Баш: плохая замена
#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
этот сценарий bash дает мне плохая замена ошибка на Ubuntu.
Я пытаюсь разделить jobname
на два: job_201312161447
и 0003
. Это дает эту ошибку только тогда, когда я пытаюсь запустить это на Ubuntu.
любая помощь будет высоко ценится.
7 ответов:
командный интерпретатор по-умолчанию (
/bin/sh
) в Ubuntu указывает наdash
, а неbash
.me@pc:~$ readlink -f $(which sh) /bin/dash
если вы
chmod +x your_script_file.sh
а затем запустить его с./your_script_file.sh
, или если вы запустите его сbash your_script_file.sh
, он должен работать нормально.он работает с
sh your_script_file.sh
не будет работать, потому что строка hashbang будет проигнорирована и скрипт будет интерпретироватьсяdash
, который не поддерживает этот синтаксис строки замены.
у меня была та же проблема. Убедитесь, что ваш скрипт не имеет
#!/bin/sh
в верхней части вашего скрипта. Вместо этого, вы должны добавить
#!/bin/bash
ваш синтаксис скрипта является допустимым bash и хорошо.
возможные причины сбоя:
код
bash
Это не Баш, ноksh
или какая-то другая оболочка, которая не понимает подстановку параметров bash. Потому что ваш скрипт отлично выглядит и работает с bash. Делайls -l /bin/bash
и проверьте, что это действительно bash, а не sym-связанный с какой-то другой оболочкой.если у вас есть bash на вашей системе, то вы можете выполнять ваши сценарий неправильный, как:
ksh script.sh
илиsh script.sh
(и ваша оболочка по умолчанию не bash). Так как у вас есть правильный shebang, если у вас есть bash./script.sh
илиbash ./script.sh
должно быть нормально.
для других, которые прибывают сюда, это точное сообщение также появится при использовании синтаксиса переменной env для команд, например
${which sh}
вместо правильного$(which sh)
попробуйте запустить скрипт явно с помощью команды bash, а не просто выполнить его как исполняемый файл.