Ich schreibe ein Bash-Skript, das jedes seiner Argumente als Befehl ausführt. Dies funktioniert für Befehle in my PATH
, jedoch nicht für Aliase. Ich kann einen Alias im Skript direkt aufrufen, aber ich kann keinen Alias aufrufen, der als Argument übergeben wurde.
Das Problem (ich nehme an) ist, dass Aliase vor Variablen erweitert werden. Gibt es eine Möglichkeit, Aliase aus einer Variablen auszuführen?
Beispielskript:
#!/bin/bash
# File: runall
shopt -s expand_aliases
source ~/.aliases
while (( "$#" )); do
$1
shift
done
runall "echo test"
funktioniert, runall "myalias"
gibt aberrunall: line 8: myalias: command not found
eval
Variablen?eval "echo $1"
. Sagen wir, ich rufe an./script.sh "hello;rm -rf ~
. Was wird ausgeführt?echo hello
, gefolgt vonrm -rf ~
. Das ist natürlich ein erfundenes Beispiel, aber das Prinzip gilt.eval
vor$1
gearbeitet, da ich schon hatteshopt -s expand_aliases
. Vielen Dank!Ich hatte ein ähnliches Problem und konnte mein Problem lösen, indem ich meine Aliase in Funktionen umwandelte, wie auf dieser Site beschrieben , die für mich funktionierten.
z.B
zu
quelle