Процесс замещения, /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