Ich habe das folgende Skript. Es ist ein einfacher Testfall, bei dem a
es sich um einen beliebigen Zeichenfolgenwert handelt und b
der ein Pfad sein soll.
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
Bei jedem Versuch, ./sample.sh auszuführen, erhalte ich jedoch die folgenden Fehlermeldungen:
./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found
und wenn ich es versuche source sample.sh
bekomme ich folgendes:
a: Undefined variable.
Mein Ziel war es, dies zu einem Alias zu machen, damit ich dieses Skript als Quelle verwenden und einfach den Alias ausführen kann, um die Befehlszeile auszuführen. Kann sich jemand das anschauen und mich wissen lassen, was der Fehler ist?
command-line
bash
scripts
alias
Jovin Miranda
quelle
quelle
Antworten:
Sie haben hier ein paar Probleme
Im Gegensatz zu In
csh
, Inbash
(und anderen Bourne-ähnlichen Shells) werden Aliase mit einem=
Vorzeichen versehen, zalias foo=bar
Anführungszeichen können nicht so verschachtelt werden; In diesem Fall können Sie den Alias in einfache Anführungszeichen und die doppelten Anführungszeichen setzen
Der Backslash
\
ist ein Zeilenfortsetzungszeichen : Syntaktisch macht es Ihren Befehl zu einer einzelnen Zeile (das Gegenteil von dem, was Sie wollen).So
Testen: Zuerst beziehen wir die Datei:
dann
Wenn Sie den Alias in einem Skript verwenden möchten , beachten Sie, dass Aliase standardmäßig nur in interaktiven Shells aktiviert sind: Um sie in einem Skript zu aktivieren, müssen Sie sie hinzufügen
Unabhängig von allem, was oben erwähnt wurde, sollten Sie in Betracht ziehen, eine Shell-Funktion anstelle eines Alias für solche Dinge zu verwenden
quelle
$a
und$b
daher zum Definitionszeitpunkt erweitert werden, nicht wenn der Alias ausgeführt wird.Gewöhnen Sie sich an die Verwendung von Funktionen in der POSIX-Shell. Sie haben keine der folgenden Probleme:
quelle