Процесс замещения, /dev/fd/63

У меня есть сценарий, который принимает имя файла в качестве ввода в $1, и обрабатывает его... и создает выходной файл как ${1}.output.log, и он отлично работает. например, если я попробовал./myscript filename.txt

Он обработает и сгенерирует выходной файл с именем: filename.txt.output.log

Но когда я попытался подставить процесс для ввода этого сценария, например./myscript <(echo что-то), он потерпел неудачу, так как больше не может создать файл с $ {1}. output.log; потому что теперь $ 1 не является реальным файлом и не существует в моем рабочем каталоге, где сценарий должен создавать выходные данные.

Любые предложения, чтобы обойти эту проблему?

1 ответ

Проблема, вероятно, в том, что при использовании подстановки процессов вы пытаетесь создать файл в /dev, а точнее, /dev/fd/63.output.log. Я рекомендую сделать это:

output_file="$( sed 's|/dev/fd/|./process_substitution-|' <<< ${1} ).output.log"
echo "my output" >> "$output_file"

Мы используем sed для замены / dev / fd / на./process_substitution, чтобы файл создавался в текущем рабочем каталоге (pwd) с именем process_substitution-63.output.log

Другие вопросы по тегам