bash: Bad Substitution
#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
Ten skrypt bash daje mi Bad substitution błąd na Ubuntu.
Próbuję podzielić jobname
Na Dwa: job_201312161447
i 0003
. Daje ten błąd tylko wtedy, gdy próbuję uruchomić to na Ubuntu.
7 answers
Domyślna powłoka (/bin/sh
) w Ubuntu wskazuje na dash
, a nie bash
.
me@pc:~$ readlink -f $(which sh)
/bin/dash
Więc jeśli chmod +x your_script_file.sh
a następnie uruchomić go z ./your_script_file.sh
, lub jeśli uruchomić go z bash your_script_file.sh
, powinno działać dobrze.
Uruchomienie go z sh your_script_file.sh
nie zadziała, ponieważ linia hashbang zostanie zignorowana, a skrypt zostanie zinterpretowany przez dash
, który nie obsługuje składni zastępowania łańcuchów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-16 16:44:24
Miałem ten sam problem. Upewnij się, że Twój skrypt nie ma
#!/bin/sh
Na górze skryptu. Zamiast tego powinieneś dodać
#!/bin/bash
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-24 19:39:26
Składnia skryptu jest poprawna i dobra.
Możliwe przyczyny awarii:
Twoja {[0] } nie jest tak naprawdę bashem, ale
ksh
lub inną powłoką, która nie rozumie podstawienia parametrów Basha. Ponieważ twój skrypt wygląda dobrze i działa z bash. Zróbls -l /bin/bash
i sprawdź, czy to naprawdę bash, a nie sym-połączony z jakąś inną powłoką.Jeśli masz bash w systemie, to możesz wykonywać swój skrypt w niewłaściwy sposób, jak:
ksh script.sh
lubsh script.sh
(i domyślną powłoką nie jest bash). Ponieważ masz odpowiedni shebang, jeśli masz bash./script.sh
lubbash ./script.sh
powinno być w porządku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-16 16:35:11
Dla innych, które tu trafią, ta dokładna wiadomość pojawi się również podczas używania składni zmiennej env dla poleceń, na przykład ${which sh}
zamiast poprawnego $(which sh)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-17 09:33:52
Spróbuj uruchomić skrypt jawnie używając polecenia bash, a nie tylko wykonując go jako wykonywalny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-16 16:18:56
Upewnij się również, że nie masz pustego ciągu dla pierwszej linii skryptu.
Czyli upewnij się #!/bin / bash jest pierwszą linijką twojego skryptu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 18:23:16
Both-bash lub dash-work, ale składnia musi być:
FILENAME=/my/complex/path/name.ext
NEWNAME=${FILENAME%ext}new
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-10 10:03:32