Alias ​​sind nicht von einem Shell-Skript ausführbar? Mac OS X Sierra 13.x

Alias ​​sind nicht von einem Shell-Skript ausführbar? Mac OS X Sierra 13.x

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.shSkript 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?

exportEine Sache, die mir aufgefallen ist, ist, dass ich alle meine 's und alias' in /etc/bashrcund nicht ~/.bash_profileoder die anderen einfüge , und ich sehe kaum /etc/bashrcirgendwo erwähnt

Mache ich das richtig?

Antwort1

Die Aliaserweiterung erfolgt nur von der interaktiven Shell aus, nicht jedoch innerhalb von Skripten. Sie debugwird daher zu erweitert newtab, selbst jedoch newtabnicht 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 newtabmuss 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 sourceeinen Befehl benötigt, um dies zu erreichen.

verwandte Informationen