Mam następujący skrypt. Jest to prosty przypadek testowy, w którym a
dowolna wartość łańcucha i b
ma być ścieżką.
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
Jednak za każdym razem, gdy próbuję wykonać ./sample.sh, pojawiają się następujące błędy:
./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
a kiedy próbuję source sample.sh
, otrzymuję:
a: Undefined variable.
Moim celem było uczynienie z niego aliasu, aby móc pobrać ten skrypt i po prostu uruchomić alias, aby wykonać wiersz poleceń. Czy ktoś może na to spojrzeć i powiedzieć, jaki jest błąd?
command-line
bash
scripts
alias
Jovin Miranda
źródło
źródło
Odpowiedzi:
Masz tutaj kilka problemów
w przeciwieństwie do in
csh
, inbash
(i innych powłok podobnych do Bourne'a) aliasom przypisuje się=
znak npalias foo=bar
cytatów nie można tak zagnieżdżać; w takim przypadku możesz użyć pojedynczych cudzysłowów wokół aliasu i podwójnych cudzysłowów w środku
ukośnik odwrotny
\
jest znakiem kontynuacji linii : składniowo zamienia twoje polecenie w jedną linię (odwrotnie niż chcesz)Więc
Testowanie: najpierw pozyskujemy plik:
następnie
Jeśli chcesz użyć aliasu w skrypcie, pamiętaj, że aliasy są domyślnie włączone tylko w interaktywnych powłokach: aby włączyć je w skrypcie, musisz dodać
Bez względu na wszystko powyżej, powinieneś rozważyć użycie funkcji powłoki zamiast aliasu dla takich rzeczy
źródło
$a
i$b
będzie rozszerzony w momencie definicji, a nie wtedy, gdy wykonywana jest alias.Przyzwyczaj się do używania funkcji w powłoce typu POSIX. Nie masz żadnych problemów z cytowaniem:
źródło