Вы правы, когда говорите, что "неправильно используете stdin". Фактически, из предоставленного вами фрагмента сценария ваш сценарий предполагает, что вы получаете файлы в качестве аргументов в командной строке ... вы вообще не используете stdin!
В правом верхнем углу действия «Выполнить сценарий оболочки» под знаком X находится раскрывающийся список с двумя параметрами: «Передать ввод: в stdin» и «Передать ввод: в качестве аргументов». Эти параметры определяют, как выбранные файлы передаются в действие сценария. Если выбрана опция «в качестве аргументов», ваш скрипт должен использовать следующий шаблон
for f in "$@"; do
# so stuff here
done
Этот шаблон предоставляется самим действием, когда выбран «в качестве аргументов».
С другой стороны, если выбрана опция 'to stdin', то ваш скрипт должен использовать эту тамплату:
while read fname; do # read each line - assumes one file name per line
# do clever stuff with the filename
echo $fname # to illustrate we'll simply copy the filename to stdout
done
(Если вы не знаете сценариев bash, все, что после # в строке - это комментарий)
Обратите внимание, что шаблон, предоставленный действием сценария, является простой единой командой
cat
На мой взгляд, не очень полезно.
Обратите внимание, что до тех пор, пока вы на самом деле не введете текст в область скрипта, переключение между «на stdin» и «в качестве аргументов» будет изменять содержимое поля скрипта (я предполагаю, что это подсказка к тому, как должен выглядеть ваш скрипт), но один раз Вы вводите что-то, переключение больше не происходит.