神秘的与号“&”后缀似乎导致终端将进程置于后台...(但是我不确定在那里会发生什么)。
它确实是,而且通常是您想要的。如果忘记使用&,则可以使用ctrl-z挂起程序,然后使用bg命令将其放在后台-并继续使用该shell。
进程的stdin,stdout和stderr仍连接到终端。您可以根据需要将它们从/ dev / null或任何其他文件重定向(例如,将输出日志保存在某处):
some-program </dev/null &>/dev/null &
# &>file is bash for 1>file 2>&1
您可以在作业中看到该进程,将其带回前台(fg命令),并发送信号(kill命令)。
一些图形程序将与终端分离。如果是这样,当您“正常”运行命令时,您会注意到它启动了图形程序并 “退出”。
这是一个简短的脚本,您可以将其放在〜/ bin中,我将其命名为runbg:
#!/bin/bash
[ $# -eq 0 ] && { # $# is number of args
echo "$(basename $0): missing command" >&2
exit 1
}
prog="$(which "$1")" # see below
[ -z "$prog" ] && {
echo "$(basename $0): unknown command: $1" >&2
exit 1
}
shift # remove $1, now $prog, from args
tty -s && exec </dev/null # if stdin is a terminal, redirect from null
tty -s <&1 && exec >/dev/null # if stdout is a terminal, redirect to null
tty -s <&2 && exec 2>&1 # stderr to stdout (which might not be null)
"$prog" "$@" & # $@ is all args
我在重定向之前先查找程序($ prog),以便可以报告定位错误。以“ runbg your-command args ...”的身份运行;如果需要将输出保存在某处,您仍然可以将stdout / err重定向到文件。
除了重定向和错误处理外,这等同于htorque的答案。