Przeprowadzimy migrację z systemu Unix do systemu Linux. zestaw -L działa tylko z ksh
Stworzyłem następujący plik:
#!/bin/ksh -u
echo $SHELL
typeset -L21 RUN_LOGL="LOG_FILE "
Zwykle shebang powinien wskazywać poprawnego interpretera (ksh). Ale kiedy zadzwonię do skryptu w bashowy sposób:
$ . test.ksh
Wynik to:
/bin/bash
-bash: typeset: -L: invalid option
typeset: usage: typeset [-aAfFilrtux] [-p] name[=value] ...
skrypt jest interpretowany w trybie bash, a zestaw -L nie jest akceptowany. mając na uwadze, że jeśli po prostu zadzwonię
$test.ksh
działa dobrze.
Czy sposób, w jaki nazywamy scenariusz (bash way lub ksh way) jest na tyle ważny, aby zignorować shebang?
Z góry dziękuję.
Odpowiedzi:
8 dla odpowiedzi № 1. test.ksh
Robi nie wykonać skrypt. To jest pozyskiwanie scenariusz.
Pozyskiwanie skryptu zawsze ignoruje shebang. Shebang jest używany tylko wtedy, gdy skrypt jest wykonany lubić:
chmod +x test.ksh
./test.ksh
0 dla odpowiedzi nr 2
Shebang jest używany tylko wtedy, gdy interpreter nie był wcześniej zdefiniowany, np .:
sh myScript.sh
zawsze będzie cię powoływać sh
i ignoruje shebang.