У меня есть частная папка мусорного ведра в моем корневом каталоге. Это, находится также в моем пути. Если я пытаюсь запустить скрипт откуда-либо еще в моей системе, но в той папке, я добираюсь
sh: 0: Can't open [name of script].sh
Если я выполняю что-то как sh ~/bin/killwine.sh
работает!
Я хотел бы смочь выполнить сценарий отовсюду, не изменяя мое местоположение.
Что я делаю неправильно?
Когда Вы тип sh somescript.sh
, система ищет sh
в пути не somescript.sh
.
Тогда система находит sh
и передает аргумент somescript.sh
ему. Тогда sh
ищет somescript.sh
в текущей папке или в указанной папке ~/bin/
, если Вы ввели
sh ~/bin/somescirpt.sh.
, Чтобы заставить систему искать somescript.sh
в пути, используют его непосредственно в качестве команды, без sh префикса. Другими словами, введите в терминале:
somescript.sh
Для этого для работы, somescript.sh
потребности, расположенные в папке в пути, в этом случае ~/bin/
и это должен быть исполняемый файл, как указали другие. Я включаю команду ниже для полноты.
chmod +x ~/bin/somescript.sh
Также видят , Как я выполняю .sh файлы? и
, Как выполнить сценарии, не вводя полный путь?
Hope это помогает
Поскольку darent и user68186 объяснил, что сценарий не может иметь исполняемого набора битов. Если бит установлен, можно выполнить сценарий, если Вы находитесь в каталоге, сценарий находится в просто путем добавления префикса его . / . Например:
./myscript.sh
у Вас не должно быть .sh в конце имени файла также, но это - хорошая форма для добавления .sh для уведомления других, это - сценарий оболочки.
Как сказанный комментарий, Ваш сценарий не может быть отмечен для выполнения. То, когда Вы называете его канавкой sh, что Вы делаете, говорит оболочке читать свое содержание и выполнять функции в текстовом файле, не то же как вызов исполняемого файла непосредственно. Попробуйте это:
chmod +x ~/bin/killwine.sh
Затем попытайтесь выполнить его снова из другого каталога. Кроме того, удостоверьтесь, что первая строка на сценарии содержит это, таким образом, система знает, что это должно быть выполнено оболочкой:
#!/bin/sh