我正在尝试编写一个简单的函数来轻松调试我的脚本并使我的代码更简单。 (3小时后仍然卡住)
我想传递给这个函数 3 个参数
该函数应该执行命令并打印正确的字符串,无论它是否成功。 我所说的成功是指命令在输出中打印一些内容。
这是我尝试过的(在 CentOS7 上):
#!/bin/bash
CMD=$(yum list installed | egrep "yum.utils.\w+" | cut -d " " -f1)
SUCCESS="YES"
ERROR="NO"
foo() {
if ["$1" != ""]; then
echo -e "$2"
else
echo -e "$3"
fi
}
foo $CMD $SUCCESS $ERROR
不幸的是,我遇到了两个问题:
你觉得有可能吗?你知道怎么做吗? 否则,使用 eval 命令有更简单的方法吗?
感谢阅读,祝您有美好的一天
瓦伦丁 M.
#!/bin/bash
CMD=$(yum list installed | grep -E "yum.utils.\w+" | cut -d " " -f1)
SUCCESS="YES"
ERROR="NO"
foo() {
if [ "$1" != "" ]; then
echo -e "$2"
else
echo -e "$3"
fi
}
foo "$CMD" "$SUCCESS" "$ERROR"
我在这里发现了一个类似的主题:Stack overflow : How to write a Bash function that can generically test the output of executed commands?
答案 0 :(得分:0)
不幸的是,我遇到了两个问题:
如果您按照上面 William Pursell 的评论中的建议进行操作,则此问题已解决,因为随后传递了一个空的第一个参数。
<块引用>我假设控制台输出是指输出到 STDERR,因为 STDOUT 被分配给 CMD
。您的 > /dev/null 2>&1
不合适,因为它也将 STDOUT 重定向到 /dev/null
;只需使用 STDERR 执行此操作:
CMD=$(yum list installed 2>/dev/null | egrep "yum.utils.\w+" | cut -d " " -f1)