#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! Хороший вызов.