我编写了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
请帮我解决此问题。
答案 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