Я пытаюсь написать свой первый скрипт оболочки (я использую 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 /scripts
  • когда я вручную набираю команды в приведенном выше сценарии, тестовый скрипт запускается успешно

Мой вопрос тогда такой:

Как получается, что эти же (тривиальные) команды работают в командной строке, но не работают при выполнении из пакетного сценария?

В равной степени (если не важнее) вопрос - как мне это исправить?

Проще говоря, я хочу написать скрипт, который делает это:

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

1 ответ1

1

Шебанг указывает на неправильное местоположение интерпретатора, это должен быть абсолютный путь, который (поскольку вы хотите использовать bash для скрипта) наиболее вероятен:

#!/bin/bash

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

редактировать: я только что заметил, у вас есть еще одна ошибка в заголовке. Это, вероятно, потому что вы используете . testscript , который, скорее всего, должен быть ./testscript (если вы пытаетесь его выполнить). Убедитесь, что вы выполнили команду chmod +x чтобы сделать сценарий исполняемым, иначе он потерпит неудачу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .