Исполняемый цикл while: нет такого файла или каталога

#linux #bash #shell #loops #executable

#linux #bash #оболочка #циклы #исполняемый

Вопрос:

Я пытаюсь написать простой скрипт bash для перебора входных параметров для исполняемого файла. Рассматриваемый файл имеет два параметра.

Работает следующий скрипт, запускающий терминал в каталоге, который содержит как файл .sh, так и файл .exe:

 #!bin/bash
./exec 1000 1
  

Однако следующее не:

 #!bin/bash
n=1
while [ $n -le 50 ]
do
    ./exec 1000 $n
    n=$(( n 1 ))
done
  

но вместо этого возвращает ошибки

script.sh : строка 5: ./exec 1000 1: Нет такого файла или каталога

script.sh : строка 5: ./exec 1000 2: Нет такого файла или каталога

И так далее. Это означает, что цикл выполняется, но я не понимаю, почему он внезапно не может найти исполняемый файл. Я использую Ubuntu 14.04.

Комментарии:

1. Копирование и вставка вашего исходного кода у меня работает нормально. Похоже, вы пытаетесь выполнить всю строку «./ exec 1000 N» как команду; убедитесь, что нет кавычек или чего-либо еще, вызывающего это.

2. Оказывается, это была орфографическая ошибка в имени исполняемого файла… упс. Я удалю вопрос. Я рад, что все равно спросил, иначе я, вероятно, не нашел бы его. Спасибо.

Ответ №1:

У меня это работает, как только я исправлю строку shebang:

 #!/bin/bash
n=1
while [ $n -le 50 ]
do
    ./exec 1000 $n
    n=$(( n 1 ))
done
  

Исходная версия вызывает сообщение об ошибке о плохом интерпретаторе, но этого можно избежать, если ваш рабочий каталог окажется / при запуске скрипта.

Комментарии:

1. У меня тоже сработало, когда я его запускал, я скопировал его вручную и не заметил отсутствия / в shebang! Хороший вызов.