Как выполнить скрипт в другом каталоге?

51

Я пробовал это

./home/user/scripts/someScript

но это не работает

Данный файл или каталог отсутствует

есть идеи?

UAdapter
источник
2
Очевидно, нет такого файла или каталога. Таким образом, вы даете неправильный путь. Точка там не означает «выполнить». Это просто часть пути. В оболочке вы обычно вводите либо файлы для выполнения, либо команды (которые на самом деле также являются файлами) :)
Pithikos
избавиться от этого начального периода и попробуйте снова. Кроме того, ~ / scripts / someScript также будет работать. также имейте в виду `` qoutes 'и программы exec ($ man exec)
j0h

Ответы:

62

Начальная точка в вашей команде означает «относительно текущего каталога». Удалите его, и он будет ссылаться на «файл someScriptв каталоге /home/user/scripts:

/home/user/scripts/someScript

Если вы получаете «Отказано в доступе», это либо потому, что у вас недостаточно прав для доступа к файлу в каталоге других пользователей, либо потому, что файл не является исполняемым. Чтобы сделать его исполняемым, запустите:

chmod +x /home/user/scripts/someScript
Lekensteyn
источник
35

Если вашему сценарию требуется доступ к ресурсам в той же папке, из которой он запускается, и вы указали его как относительные пути, тогда ваш сценарий прервется.

Я всегда добавляю a cd $(dirname $0)к заголовку моего скрипта, чтобы папка, содержащая скрипт, была корневой.

naisanza
источник
6

Удалить .

Если вы делаете сценарий исполняемым с помощью, chmod 755 <nameofscript>чтобы запустить его, вам нужно только ввести путь к сценарию.

Когда вы видите, ./scriptчто он используется, он говорит оболочке, что скрипт находится в том же каталоге, где вы его выполняете. Чтобы использовать полный путь, вы вводите sh /home/user/scripts/someScript.

Бруно Перейра
источник
sh /path/to/fileотличается от /path/to/file. shработает, /bin/shкоторый связан с /bin/dash.
Лекенштейн
Просто sh ./somescriptпоясните примеры, которые вы видите в сети, обычно вы видите, что также может быть напечатано как `sh / path / to / script / scriptitself '.
Бруно Перейра