Ошибка в скрипте bash при чтении файла - PullRequest
1 голос
/ 04 августа 2009

Ниже приведен скрипт, который я написал для запуска исполняемого файла ./runnable для файла аргументов / ввода input.

Он принимает стандартный ввод из другого файла с именем final_file и выводит его в файл с именем outfile. В final_file имеется 91 строка (то есть 91 различное стандартное вводимое через пробел), и поэтому сценарий bash должен вызвать вход ./runnable 91 раз.

Но я не уверен, почему он звонит только один раз. Любые предложения о том, что происходит не так?

#!/bin/bash

OUTFILE=outfile
(

a=0

while read line
do 

    ./runnable input
    echo "This is line number: $a"
    a='expr $a+ 1'

done<final_file

) >$OUTFILE

Чтобы уточнить, final_file выглядит как

_ _DATA_ _
2,9,2,9,10,0,38
2,9,2,10,11,0,0
2,9,2,11,12,0,0
2,9,2,12,13,0,0
2,9,2,13,0,1,4
2,9,2,13,3,2,2

и так далее. Одной строкой является стандартный ввод. Количество строк в final_file соответствует числу раз, которое дается стандартному вводу. Таким образом, в приведенном выше случае сценарий должен выполняться шесть раз, поскольку в нем шесть строк.

Ответы [ 2 ]

3 голосов
/ 05 августа 2009

Я рискну, что ./runnable ищет весь путь через стандартный ввод . Без ввода read цикл while заканчивается после одной итерации.

Рассуждение: ваш пример Работает для меня (TM), подставляя файл, который у меня (/etc/services) для final_file, и комментируя строку, которая вызывает ./runnable.

С другой стороны, если я заменю вызов ./runnable однострочным, который просто ищет и отбрасывает стандартный ввод (например, cat - > /dev/null или perl -ne 1 ), Я понимаю поведение, которое вы описываете.

(Обратите внимание, что вам нужны обратные тики или $() вокруг вызова на expr.)

0 голосов
/ 04 августа 2009
  • Запустите скрипт оболочки с ключом -x опция для некоторых результатов отладки.
  • Добавить echo $line после вашего while read line; do
  • Обратите внимание, что while read line; do echo $line; done не читает разделенный пробелами ввод, он читает строка разделенный ввод.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...