Piszę skrypt bash, który przyjmuje niektóre opcjonalne parametry. Chcę je przetłumaczyć i przekazać do innego skryptu. Jednak trudno mi z wdziękiem przekazać opcjonalne parametry.Jak przekazać opcjonalne parametry do innego polecenia w skrypcie Bash?
Oto zarys tego, co udało mi się dostać pracę w Pseudokod:
a.sh:
if arg1 in arguments; then
firstArg="first argument"
fi
if arg2 in arguments; then
secondArg="second argument"
fi
./b.sh $firstArg $secondArg "default argument"
Uwaga przestrzenie w argumentach.
b.sh:
for arg in "[email protected]"
do
echo $arg
done
chcę zadzwonić b.sh
, ewentualnie z firstArg
i secondArg
a domyślnym argumentem tak:
./b.sh $firstArg $secondArg "default argument"
Problemem jest to, że jeśli $firstArg
lub $secondArg
są łańcuchami ze spacjami, będą one reprezentowane jako wiele argumentów, a wynik będzie podobny do:
first
argument
second
argument
default argument
Dobra, to łatwo naprawić, niech przechwycić cały ciąg argumentów dodając cudzysłowy wokół niego tak:
./b.sh "$firstArg" "$secondArg" "defaultArg"
Problem jest, jeśli, na przykład, firstArg
nie jest ustawiona, to skutkuje pusty wiersz (jak to interpretować ""
jako parametr), więc wyjście będzie coś takiego:
(blank line here)
second argument
defaultArg
ja również próbował konstruowania ciąg i przekazaniem go do skryptu powłoki, ale nie robi wydaje się działać w ten sposób (int erprets cały ciąg jako argument, nawet jeśli dodaję oddzielne argumenty z cudzysłowami).
Pamiętaj, że wywoływanie b.sh
z wiersza poleceń z cytowanymi argumentami działa poprawnie. Czy istnieje sposób naśladowania tego, jak działa to w skrypcie basha?
marginesie: Tylko dlatego, że jestem kopiując swoje prowadzenie i używanie '.sh' rozszerzeń na plikach wykonywalnych (to znaczy plikach z uprawnieniami + x, wobec których wywołanie funkcji 'execv() 'się powiedzie) nie oznacza, że jest to dobry pomysł. Ogólnie rzecz biorąc, polecenia w systemie UNIX nie powinny mieć żadnych rozszerzeń, bez względu na to, czy są dostarczane za pośrednictwem skryptu powłoki, skryptu Python, skompilowanego pliku binarnego itp. –
Czy możesz wyraźnie wyjaśnić, czy jest to dla kodu używającego '#!/bin/sh' lub '#!/bin/bash'? –
Używam bash. – Andrew