我经常从shell(在我的情况下是Bash)执行命令,我想立即分叉并且我想忽略它的输出。事实上我经常创建一个脚本(silent
)来执行它:
#!/bin/bash
$@ &> /dev/null &
然后我可以跑,例如
silent inkscape myfile.svg
我的终端不会被我刚刚分叉的进程的调试输出污染。
我有两个问题:
是否采用“官方”方式执行此操作?即更短但相当于&> /dev/null &
?
如果没有,有没有办法可以在silent
命令之后完成制表工作,就好像它不存在一样?举个例子,在我输入silent inksc
之后,当我按silent inkscape
时,我希望bash将命令自动完成[tab]
。
答案 0 :(得分:4)
除了:可能希望在exec "$@" &> /dev/null &
脚本中使用silent
,以使其放弃子shell,并且"$@"
周围的引号将阻止空格妨碍。
至于#2:complete -F _command silent
应该做你想要的事情。 (我在我的launch
中调用我的脚本版本complete -F launch
并.bash_profile
答案 1 :(得分:3)
看起来nohup或多或少会做你想要的。 tab-completion问题是因为bash认为你试图完成一个文件名作为脚本的参数,而它的完成规则知道nohup将一个命令作为它的第一个参数。
Nohup将stout和stderr重定向到nohup.out,并且如果你的shell退出,它也将保持命令运行。
答案 2 :(得分:2)
这是我用来启动交互式(和聊天)X应用程序的一个小脚本。一个xterm
#!/bin/bash
exe="$1"
shift
"$exe" "$@" 2>/tmp/$$."$exe".err 1>&2 & disown $!
没有输出,如果终端退出则不会死,但如果出现问题,/ tmp中的所有输出都会记录
如果您不希望日志只使用/ dev / null。
如果你是脚本过敏的话,也可以使用函数。
答案 3 :(得分:0)
也许你可以“重新绑定”标签键?显示带有回车键的超级用户Stackoverflow上的example。这是正确的想法吗?