Я пытался сделать это, чтобы решить, нужно ли перенаправить stdin в файл или нет:
[ ...some condition here... ] && input=$fileName || input="&0"
./myScript < $input
Но это не работает, потому что, когда переменная $input является "& 0", bash интерпретирует ее как имя файла.
Однако я мог просто сделать:
if [ ...condition... ];then
./myScript <$fileName
else
./myScript
Проблема заключается в том, что. /myScript на самом деле является длинной командной строкой, которую я не хочу дублировать, и я не хочу создавать для нее функцию, потому что она не так долго (она не стоит).
Тогда мне пришло в голову сделать это:
[ ...condition... ] && input=$fileName || input= #empty
cat $input | ./myScript
Но для этого требуется запустить еще одну команду и канал (т.е. подоболочку).
Есть ли другой способ, который проще и эффективнее?