bash运行读取文件并运行读取行OR命令

时间:2020-07-16 00:29:22

标签: bash operands

两个具有OR条件的命令

test -e a.txt || test -e b.txt,此命令从CLI正常运行,但是如果我从文件中读取并尝试运行,则会显示sh: ||: unknown operand' error

cat test.txt
test -e a.txt  || test -e b.txt

阅读并运行命令

cat test.txt| while read command; do $command;done

sh: ||: unknown operand

任何想法

1 个答案:

答案 0 :(得分:1)

非常简化,bash将:

  1. 解析一个命令或结构,然后针对每个命令:
  2. 应用大括号扩展
  3. 应用参数扩展
  4. 进行单词拆分
  5. 应用路径名扩展
  6. 执行结果

||的处理发生在步骤1的解析过程中,但是在步骤3中对其进行了扩展。结果,它像运行test -e a.txt "||" test -e b.txt一样被视为常规字符串。

类似的命令echo {1..10}和#{1}需要重新执行#3,也会失败。

同时,它将适用于echo $PATH(#4)和echo Hello(#4 /#5),因为它们仅使用其后的功能。

虽然在字符串中包含命令是一种代码气味,表明您正在将自己绘画到一个尴尬的角落,但是您可以使用ls *.png将#1之后的所有步骤应用于您选择的字符串:

eval