Скрипт bash/zsh не вызывается с терминала во FreeBsd, ни в bash, ни в zsh

У меня есть скрипт в FreeBsd 11

% cat my_script.sh 
#!/usr/local/bin/zsh

# [........]

Он имеет атрибут x:

-rwxr-xr--   1 root  wheel  669 Jun 14 02:45 my_script.sh

Моя оболочка - zsh. Когда я пытаюсь выполнить его, я получаю ошибку. Это связано с тем, как я ее вызываю:

% sudo ./my_script.sh var1                  
sudo: ./my_script.sh: command not found


% sudo my_script.sh var1 
sudo: my_script.sh: command not found


% sudo source my_script.sh var1
sudo: source: command not found

В чем дело?

update:

Я изменил свой shell на bash, перезагрузился, изменил #! на bash и теперь у меня:

$ sudo ./my_script.sh test9
sudo: ./my_script.sh: command not found
0
14.06.2017, 06:06
2 ответа

Проблема в том, что sudo не гарантирует сохранения вашего текущего каталога или вашего PATH.

Таким образом, чтобы убедиться, что скрипты будут найдены, укажите полный путь:

sudo /path/to/my_script.sh

Такая же ошибка появляется и для sudo source, потому что source — это встроенная оболочка, а не файл. Вместо использования оболочки sudo выполняет свои аргументы, используя execev, который ожидает файл.

Для получения дополнительной информации см. man sudo (в частности, раздел Модель процесса и параметры -E и -s), параметры конфигурации см. в man sudoers и /etc/sudoers.

Многие другие варианты указания пути к вашему скрипту с помощью sudo см. https://stackoverflow.com/questions/12996397/command-not-found-when-using-sudo

0
28.01.2020, 02:33
 % sudo ./my_script.sh var1
sudo: ./my_script.sh: команда не найдена
 

Это сообщение означает, что либо файл ./my_script.sh не существует, либо не существует его загрузчик. Для сценария загрузчиком является исполняемый файл, упомянутый в строке shebang.

Убедитесь, что /usr/local/bin/zsh существует и что это не неработающая символическая ссылка.

Убедитесь, что файл действительно содержит #!/usr/local/bin/zsh в качестве первой строки, а не, скажем, #!/usr/local/bin/zsh с некоторыми пробелами или другими невидимыми символами после него или в середине. В частности, обратите внимание, что возврат каретки является одним из невидимых символов, которые могут сломать что-либо. Вы получите CR, если вы создали (или, возможно, отредактировали) сценарий под Windows; если вы редактируете сценарии под Windows, убедитесь, что они сохранены с окончанием строки, установленным на «LF», или «Unix», или «Linux», или как его называет ваш редактор..

 % sudo my_script.sh var1
sudo: my_script.sh: команда не найдена
 

Это не работает по простой причине: myscript.sh отсутствует в пути поиска команд.

 % источник sudo my_script.sh var1
sudo: источник: команда не найдена
 

Это не работает по простой причине: source является встроенной оболочкой, а не исполняемым файлом. (Это не имело бы смысла как исполняемый файл, поскольку его цель — выполнить некоторый код оболочки в текущей оболочке — это может сделать только оболочка.)

Какая оболочка запущена в данный момент, не имеет значения для всех трех команд.

2
28.01.2020, 02:33

Теги

Похожие вопросы