Написання мого першого сценарію bash (рядок 2: testcript: Немає такого файлу чи каталогу)


0

Я намагаюся написати свій перший сценарій оболонки (я запускаю Ubuntu 10.x)

Ось як виглядає мій «сценарій»

cd /some/path/to/scripts
# pwd (if uncommented, this shows we HAVE really changed directory to /some/path/to/scripts
# echo `ls`  (if uncommented, shows that testscript is in our working directory)
# the next line is where bash LIES:  'testscript: No such file or directory' 
. testscript # (./testscript doesn't work either)

Я ставлю наступні заяви про налагодження (після компакт-диска), у сценарій вище, щоб переконатися, що все в порядку:

pwd
echo `ls -lhrt`

і він відображав усі файли в каталозі. Тому я не розумію повідомлення про помилку, яке я отримую.

[Редагувати]

Я змінив своє питання - зосередитись на ОСНОВНІй проблемі, чому я отримую повідомлення про помилку "Немає такого файлу чи каталогу".

Ось факти:

  • тестовий сценарій виконується і знаходиться в / some / path / to / script
  • коли я вручну ввожу команди в сценарії вище, тест успішно працює

Моє питання тоді таке:

Як виходить, що ці самі (тривіальні) команди працюють у командному рядку та ще не спрацьовують при виконанні з пакетного сценарію ?.

Не менш важливим є питання (як це можна виправити?)

Простіше кажучи, я хочу написати сценарій, який робить це:

  1. Змініть каталог на вказаний (жорстко закодований) каталог
  2. Запустіть скрипт у поточному робочому каталозі

Є чи на bashсамому справі в /usr/bin, або /bin?
ta.speot.is

Mine is in / bin (Debian);)
fakemustache

Схоже, ви знайшли власну відповідь на своє переглянуте запитання (у коментарі до пов’язаного запитання про SO). Ви повинні зв’язати свої акаунти на двох сайтах. Крім того, бажано, щоб ви не перекреслили публікацію. Важкий перегляд питання робить попередні відповіді не має сенсу.
Денніс Вільямсон

Відповіді:


1

Шебанг вказує на неправильне місце для перекладача, це повинен бути абсолютний шлях, який (оскільки ви хочете використовувати bash для сценарію), швидше за все:

#!/bin/bash

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

редагувати: Я тільки що помітив, що у вашій назві є ще одна помилка. Це, мабуть, тому, що ви використовуєте . testscript, що, швидше за все, має бути ./testscript(якщо ви намагаєтесь його виконати). Переконайтеся, що ви зробили chmod +xсценарій виконуваним, інакше він вийде з ладу.


testcript вже має набір виконуваних прапор (він запускається, якщо я CD в його папку і введіть ./testscript). Це точно такі самі команди, як у моєму скрипті для обгортки - тому я не розумію, чому у ньому повідомляється про відсутність такого файлу чи каталогу). використовуючи EITHER. testcript або ./testscript призводить до того ж повідомлення про помилку. Єдине, про що я можу, - це те, що cdd негайно скидається після команди thecd - але знову ж таки, це не може бути, тому що якщо я введу pwd після команди cd, це показує, що я успішно змінив робочу директорію. Так що відбувається?
skyleagle

Спробуйте використовувати абсолютний шлях.
Матьє Картьє
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.