美好的一天。我有一系列命令,我想通过一个函数执行,以便我可以获得退出代码并相应地执行控制台输出。话虽如此,我在这里有两个问题:
1)我似乎无法将stderr指向/ dev / null。
2)在执行$ 1之前,不会显示第一个回波线。直到我运行需要一段时间才能处理的命令,例如在硬盘驱动器中搜索文件,它才真正引人注目。此外,很明显是这种情况,因为输出看起来像:
sh-3.2# ./runScript.sh
sh-3.2# com.apple.auditd: Already loaded
sh-3.2# Attempting... Enable Security Auditing ...Success
换句话说,在“尝试...... $ 2”
之前显示了stderr以下是我尝试使用的功能:
#!/bin/bash
function saveChange {
echo -ne "Attempting... $2"
exec $1
if [ "$?" -ne 0 ]; then
echo -ne " ...Failure\n\r"
else
echo -ne " ...Success\n\r"
fi
}
saveChange "$(launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist)" "Enable Security Auditing"
感谢任何帮助或建议。
答案 0 :(得分:2)
这是将stderr重定向到/dev/null
command 2> /dev/null
e.g。
ls -l 2> /dev/null
你的第二部分(即echo
的排序) - 这可能是因为你在调用脚本时所拥有的。 $(launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist)
答案 1 :(得分:1)
第一个回波线稍后显示,因为它正在执行第二个。 $(...)将执行代码。请尝试以下方法:
#!/bin/bash
function saveChange {
echo -ne "Attempting... $2"
err=$($1 2>&1)
if [ -z "$err" ]; then
echo -ne " ...Success\n\r"
else
echo -ne " ...Failured\n\r"
exit 1
fi
}
saveChange "launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist" "Enable Security Auditing"
编辑:注意到launchctl
实际上没有设置$?失败时捕获STDERR以检测错误。