cat file_name | shell脚本中的grep“something”结果“cat:grep:没有这样的文件或目录”

时间:2015-02-20 08:05:47

标签: linux bash shell

我编写了shell脚本,它从输入文件中读取命令并执行命令。我有这样的命令:

cat linux_unit_test_commands | grep "dmesg" 

在输入文件中。执行shell脚本时,我收到以下错误消息:

cat: |: No such file or directory
cat: grep: No such file or directory
cat: "dmesg": No such file or directory

脚本:

 #!/bin/bash

 while read line
 do
     output=`$line`
     echo $output >> logs
 done < $1

下面是输入文件(example_commands):

ls
date
cat linux_unit_test_commands | grep "dmesg"

执行:./ linux_unit_tests.sh example_commands

请帮我解决此问题。

2 个答案:

答案 0 :(得分:1)

扩展变量后,不会解析|"等特殊字符;变量扩展后唯一的处理是分词和通配符扩展。如果您希望完全解析该行,则需要使用eval

while read line
do
    output=`eval "$line"`
    echo "$output" >> logs
done < $1

答案 1 :(得分:0)

您可能想知道为什么它不能使用cat命令。 那么这就是你问题的答案。

output=`$line` i.e. output=`cat linux_unit_test_commands | grep "dmesg"`

这里cat命令将(linux_unit_test_commands | grep&#34; dmesg&#34;)所有这些作为参数,即fileNames。

来自Man页面:

语法: cat [选项] ... [文件] ...

+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++

脚本没问题!

#!/bin/bash

while read line;
do
    output=`$line`
    echo $output >> logs
done < $1

要使其有效,您需要更改&#39; cat:&#34; dmesg&#34;:没有此类文件或目录&#39; &#39; grep &#34; dmesg的&#34; linux_unit_test_commands&#39; 即可。它会工作!

cat linux_unit_test_commands

ls
date
grep "dmesg" linux_unit_test_commands