我曾经有一个脚本(很久以前),它允许我在终端中执行任何操作,并会神奇地放弃并在后台运行,同时将任何输出转储为空。它甚至可能没有执行任何操作……我不记得了。我把它放在 /usr/local/bin 或 /usr/bin/ 中,它被命名为“ds”(我知道这个名字与它无关,但我想也许你们中的一些人可能做过和我当年一样的事情)。
基本上,为了完全在后台执行命令而不占用终端窗口,我只需输入:
ds command
或者
ds sudo command
我不记得我在哪里找到它,也不记得它是否是我自己创造的。它非常巧妙,所以我猜我是在别处找到它的。:)
有人可以帮忙再次创建这样的脚本吗?
短暂性失眠!
答案1
我不确定您之前设置了什么,但您可以将stderr
和输出stdout
到/dev/null
,然后disown
处理:
command > /dev/null 2>&1 & disown
$ tail -f /var/log/messages > /dev/null 2>&1 & disown
[1] 12345
$
不要混淆&
这里&&
. &
在后台运行命令,同时disown
将后台与终端进程稍微分离一下。您可以设置 BASH 脚本、函数或别名来将您的命令包装在类似的东西中。
答案2
我的天哪!我在我的另一台 *nix 机器上找到了我正在寻找的东西,我会把它复制到真正需要它的机器上。位于“/usr/local/bin/ds”
如果有人需要的话,这里有一份脚本的副本:
#!/bin/sh
if test -t 1; then
exec 1>/dev/null
fi
if test -t 2; then
exec 2>/dev/null
fi
"$@" &
现在我看了一下,我不能完全确定这是否会放弃该进程,因为它似乎只是将命令作为后台进程来执行。有什么想法吗?