Я пытаюсь перебрать вывод процесса Perl по строкам в пределах цикла while
. Однако я испытываю трудности с синтаксисом.вывод трубопровода процесса в ш в цикле?
Я попытался это, но получил "неоднозначной перенаправлять" ошибка:
#!/bin/sh
while read line; do
echo "$line"
# do stuff with $line
done < $(perl process.pl)
./script.sh : line 6: $(perl process.pl): ambiguous redirect
Например, один (неэффективное) решение будет:
#!/bin/sh
tmpFile=/tmp/tmpFile.txt
perl process.pl > $tmpFile
while read line; do
echo "$line"
# do stuff with $line
done < $tmpFile
Я знаю, что я могу трубы процесс Perl к while
петли, как:
perl process.pl | while ...
, но цикл в то время как выполняется в субоболочке , и мне нужно, чтобы некоторые переменные, установленные в цикле while
, оставались после завершения цикла, поэтому это не вариант.
Что я могу сделать?
OP-shebang - это '#!/Bin/sh' ... но OP упоминает Bash и помеченный вопрос Bash ... запутанный (особенно замены процесса для Bash, а не оболочек POSIX). –
На самом деле, решение «pipe» было первым, что я придумал. Тем не менее, это выполняет процесс в подоболочке, и я теряю любые переменные, измененные в '# do stuff с $ line' – asf107
@ asf107 Я не уверен, что вы подразумеваете под« Я теряю все, что происходит ». Вы можете перенаправить вывод цикла, если хотите? –