Mein .bashrc hatte einen Code, der sich wiederholte, also benutzte ich eine Funktion, um ihn zu vereinfachen
do_stuff() {
local version=$1
export FOO_${version}_X="17"
export FOO_${version}_Y="42"
}
do_stuff '5.1'
do_stuff '5.2'
Wenn ich jetzt jedoch meine Shell verwende, ist der Name "do_stuff" im Gültigkeitsbereich, sodass ich diese Funktion per Tab vervollständigen und ausführen kann (wodurch möglicherweise meine Umgebungsvariablen durcheinander gebracht werden). Gibt es eine Möglichkeit, "do_stuff" nur innerhalb der .bashrc sichtbar zu machen?
()
eine Subshell erstellen. Eine andere Möglichkeit für einfache Fälle ist die Verwendung einerfor version in 5.1 5.2
Schleife, die jedochversion
entweichen kann.Antworten:
Verwenden Sie
unset
als letzte Zeile in Ihrem.bashrc
:löscht / deaktiviert die Funktion
do_stuff
.Um die Variablen zu löschen / zu deaktivieren, rufen Sie sie wie folgt auf:
quelle
if type do_stuff >/dev/null 2>&1; then echo "exists"; else echo "dont"; fi
.do_stuff
es in einer anderen Funktion verwendet wird. Wenn Sie diese Funktion aufrufen, erhalten Siebash: do_stuff: command not found
. Ich weiß, dass dies nicht der genaue Fall ist, über den die Operation gesprochen hat, aber es lohnt sich darauf hinzuweisen.Die andere Möglichkeit besteht darin, Unterstriche wie in anderen Skriptsprachen zu verwenden, um anzuzeigen, dass diese Funktion nicht öffentlich sein soll. Die Wahrscheinlichkeit, dass Sie _do_foo eingeben, ist sehr gering und es ist unwahrscheinlich, dass Sie mit anderen in Konflikt geraten.
quelle
Die einzige Lösung, die ich mir vorstellen kann, ist, es zu unterstreichen und ihm einen ziemlich eindeutigen Namen zu geben, vielleicht sogar mit Punkten wie einer Fancypants-Sprache zu versehen ( aber das wird in
sh
eurer alten Zeit nicht funktionieren ).Heck, das wird keine Konflikte haben:
quelle
Wie in einem Kommentar vorgeschlagen, können Sie eine Unterschale verwenden:
Wir erstellen ein weiteres Skript auf der Subshell-Standardausgabe für den einzigen gewünschten Nebeneffekt (mithilfe von
here
document<<SIDE
). Dann beziehen wir mit.
.Die Kraft von 'mise en abime'
sh
ist eine erschreckende Quelle des Staunens .quelle