如何解决如何抑制Bash中的函数输出?
我写了一个小助手来启动一个如下所示的Android模拟器:
# START ANDROID EMULATION
android-sim () {
if [[ -z "$1" ]]; then
echo "No Android device supplied as argument!"
return 1
fi
if [[ -d "$ANDROID_HOME" ]]; then
cd "$ANDROID_HOME/emulator" &>/dev/null
./emulator "@$1" &>/dev/null &
cd - &>/dev/null
else
echo "The variable ANDROID_HOME is not set to a correct directory!"
fi
}
我试图用&>/dev/null
禁止所有生成的输出。对于emulator
本身,我还尝试将执行置于后台。
但是当我运行该函数时,我仍然得到以下输出:
# before exeuction
[09:11:48] sandrowinkler:~ $ android-sim pixel-29
[1] 23217
# after execution,I closed the emulator via GUI
[09:11:55] sandrowinkler:~ $
[1]+ Done ./emulator "@$1" &> /dev/null
(wd: /usr/local/share/android-sdk/emulator)
(wd now: ~)
根据此superuser post和此unix post,我使用了正确的方法来使输出静音。那么我在这里做错了什么?
PS:我也希望获得一些改进Bash代码的技巧。
解决方法
您已正确完成。该输出不是来自您的脚本,而是来自外壳程序,显示有关后台进程的信息(结尾处是PID,done消息和工作目录)。
如果您从外部重定向输入,例如:
andoroid-sim foo > log.txt
执行后,打开log.txt
,您将看到程序实际输出的内容(即使这些消息出现在控制台中,这些消息也不会存在)。
如果不需要监视后台作业,则可以使用双叉解决方案。
s.preserve_paths = 'JWPlayer_iOS_SDK.framework'
s.xcconfig = { 'OTHER_LDFLAGS' => '-framework JWPlayer_iOS_SDK' }
s.vendored_frameworks = 'JWPlayer_iOS_SDK.framework'
当父进程在子进程之前退出时,子进程将附加到进程1,因此不再受当前shell的监视。
还要查看脚本,可以避免 ( ./emulator "@$1" &>/dev/null & )
更改子shell中的目录:
cd -
因为当前的shell不会受到subshell更改目录的影响
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。