
Dieser Screenshot erklärt es im Wesentlichen
https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b
Ich habe einige Aliase zum Öffnen einer neuen Registerkarte im Terminal und für andere Dinge eingerichtet, sogar einen Alias zum Ausführen des Debug-Shell-Skripts, aber das debug.sh
Skript verwendet einfach einen Alias, newtab
, um zu versuchen, eine neue Registerkarte zu öffnen, was funktioniert, wenn man einfach eingibt newtab
, aber es funktioniert nicht, und auch keine anderen Aliase funktionieren innerhalb einer .sh- oder anderen ausführbaren Datei. Wie behebe ich dies?
export
Eine Sache, die mir aufgefallen ist, ist, dass ich alle meine 's und alias
' in /etc/bashrc
und nicht ~/.bash_profile
oder die anderen einfüge , und ich sehe kaum /etc/bashrc
irgendwo erwähnt
Mache ich das richtig?
Antwort1
Die Aliaserweiterung erfolgt nur von der interaktiven Shell aus, nicht jedoch innerhalb von Skripten. Sie debug
wird daher zu erweitert newtab
, selbst jedoch newtab
nicht erweitert, da sie von einem Skript aufgerufen wird.
Wenn Sie exportierte Funktionen anstelle von Aliasnamen verwenden, funktioniert Folgendes: -
debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab
Der Export ist erforderlich, da Skripte in Unter-Shells ausgeführt werden. Für den von Ihnen genannten konkreten Fall newtab
muss es sich jedoch nur um eine Funktion handeln.
Funktionen können überall anstelle von Aliasen verwendet werden, können aber noch viel mehr, z. B. einen zusätzlichen Parameter an das Ende der Ausführungszeichenfolge anhängen, eine sehr einfache Anforderung, die Aliase nicht erfüllen können. Tatsächlich können sie alles tun, was Skripte können, aber im Gegensatz zu Skripten werden sie in der aktuellen Shell ausgeführt, sodass sie die Umgebung und das aktuelle Verzeichnis ändern können, was ein Skript .
oder source
einen Befehl benötigt, um dies zu erreichen.