Ich möchte wissen, wie alle Variablen, die ich in der Eingabeaufforderung definiert habe, gelöscht werden können, ohne das Terminal zu schließen .
Zum Beispiel, wenn ich eine Variable in der Eingabeaufforderung wie folgt festlege:
$ a=1
Jetzt möchte ich die Variable $a
(und viele andere auf ähnliche Weise definierte Variablen) löschen , ohne das Terminal zu schließen. Ich könnte es gebrauchen, unset
aber es wird hektisch, wenn es große Nein gibt. von Variablen
shell
environment-variables
Edward Torvalds
quelle
quelle
exec "$0"
vielleicht - aber es ist schwer zu sagen, was du mit global meinst .$var
mit gespeichert ist,var=$(declare -p +F);
und übergibt diese als Argument an eine Funktion, die dies tut.echo "${2%%=*}".
Diese Antwort hat ein paar Probleme mit der Größe - aber es sollte funktionieren, wenn Ihre Umgebung nicht riesig ist.Antworten:
Wenn Sie dies tun (GNU Coreutils)
Sie werden eine frische und neue Umgebung nutzen
quelle
exec "$0"
?$0
ist das nullte Argument für eine ausgeführte Shell. Also, wenn Sie laufen,bash
$0
istbash
(wahrscheinlich - es kann-bash
in einem-l
Ogin-Shell-Fall sein, abhängig von der Version) . Wenn Sie ein Skript mit einer#!/bin/bash
Bangline ausführen,$0
ist dies der Pfad zum Skript.exec "$0"
ist wahrscheinlich flexibler, aberexec bash
expliziter. Wenn Sie diesen Befehl an einem Terminal eingeben,bash
sollten Sie erkennen, dass er sich in einer interaktiven Umgebung befindet, und das Gleiche tun wiebash -i
- wodurch auch Ihre~/.bashrc
Datei ausgeführt wird.export a=123
, diese Variable wird vererbt ...Sie können Folgendes verwenden
env
: GNU-Coreutils (normalerweise auf GNU / Linux-Systemen vorinstalliert):exec env --ignore-environment /bin/bash
Der Exec-Systemaufruf ist so, dass Ihr aktueller Prozess direkt durch die neue, umgebungslose Version Ihrer Shell ersetzt wird.
Dies hat den Vorteil, dass auch exportierte Umgebungsvariablen gelöscht werden.
quelle
export PATH=$PATH:~/foo
, oder?