Як виконати скрипт у різних каталогах?


51

Я спробував це

./home/user/scripts/someScript

але це не працює

Немає такого файлу чи каталогу

якісь ідеї?


2
Очевидно, що такого файлу чи каталогу немає. Так ви даєте неправильний шлях. Точка там не означає "виконати". Це просто частина шляху. У оболонці ти зазвичай
вводиш

позбудьтеся цього початкового періоду і спробуйте знову. Крім того, ~ / script / someScript також працюватиме. також майте на увазі `` qoutes, і програми exec ($ man exec)
j0h,

Відповіді:


61

Провідна точка у вашій команді означає "відносно поточного каталогу". Видаліть його, і він буде посилатися на "файл someScriptу каталозі /home/user/scripts:

/home/user/scripts/someScript

Якщо у вас є "Дозвіл відхилено", це або тому, що у вас недостатньо дозволів на доступ до файлу в каталозі інших користувачів, або через те, що файл не виконується. Щоб зробити його виконуваним, запустіть:

chmod +x /home/user/scripts/someScript

35

Якщо ваш сценарій потребує доступу до ресурсів у тій самій папці, з якої він запускається, і ви вказали його як відносні шляхи, ваш сценарій буде порушений.

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


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 '.
Бруно Перейра
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.