Создайте данные для вашего лупа while read
:
#!/bin/sh
if [ "$#" -gt 0 ]; then
# We have command line arguments.
# Output them with newlines in-between.
printf '%s\n' "$@"
else
# No command line arguments.
# Just pass stdin on.
cat
fi |
while IFS= read -r string; do
printf 'Got "%s"\n' "$string"
done
Обратите внимание, что ваш пример concat
может быть выполнен с заменой петли while read
на tr '\n' ','
или аналогичной.
Кроме того, тест -t
ничего не говорит о том, есть ли у вас аргументы командной строки или нет.
В качестве альтернативы, для обработки аргументов командной строки и стандартного ввода (в указанном порядке):
#!/bin/sh
{
if [ "$#" -gt 0 ]; then
# We have command line arguments.
# Output them with newlines in-between.
printf '%s\n' "$@"
fi
if [ ! -t 0 ]; then
# Pass stdin on.
cat
fi
} |
while IFS= read -r string; do
printf 'Got "%s"\n' "$string"
done
Или, используя сокращенную -нотацию, которая нравится некоторым людям:
#!/bin/sh
{
[ "$#" -gt 0 ] && printf '%s\n' "$@"
[ ! -t 0 ] && cat
} |
while IFS= read -r string; do
printf 'Got "%s"\n' "$string"
done
Установите live linux на свой VirtualBox, и этого должно быть достаточно, именно по этой причине они довольно маленькие. Их много на выбор,(вот небольшой список с описаниями). Лично я использую slax на usb, но есть и другие. Ничто не мешает вам сделать свою живую версию, которая была бы абсолютно минималистичной после того, как вы освоитесь с готовым решением.