In meinem ~/.bashrc
Datei befinden sich zwei Definitionen:
commandA
, was ein Alias für einen längeren Pfad istcommandB
, was ein Alias für ein Bash-Skript ist
Ich möchte dieselbe Datei mit diesen beiden Befehlen verarbeiten, also habe ich das folgende Bash-Skript geschrieben:
#!/bin/bash
for file in "[email protected]"
do
commandA $file
commandB $file
done
Selbst nachdem ich mich von meiner Sitzung abgemeldet und wieder angemeldet habe, fordert Bash mich mit command not found
auf Fehler für beide Befehle, wenn ich dieses Skript ausführe.
Was mache ich falsch?
Akzeptierte Antwort:
Zunächst einmal werden, wie ddeimeke sagte, Aliase standardmäßig nicht in nicht-interaktiven Shells erweitert.
Zweitens .bashrc
wird nicht von nicht interaktiven Shells gelesen, es sei denn, Sie setzen BASH_ENV
Umgebungsvariable.
Aber vor allem:Tu das nicht! Bitte? Eines Tages werden Sie dieses Skript irgendwohin verschieben, wo die notwendigen Aliasnamen nicht gesetzt sind, und es wird wieder kaputt gehen.
Setzen und verwenden Sie stattdessen Variablen als Abkürzungen in Ihrem Skript:
#!/bin/bash
CMDA=/path/to/gizmo
CMDB=/path/to/huzzah.sh
for file in "[email protected]"
do
$CMDA "$file"
$CMDB "$file"
done