Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在后台执行sudo子命令_Bash - Fatal编程技术网

Bash 如何在后台执行sudo子命令

Bash 如何在后台执行sudo子命令,bash,Bash,我有一个脚本,它应该运行如下内容: sudo command & othercommand 在运行othercommand之前,我需要sudo的密码提示才能完成,但是上面的安装程序在后台运行sudo,而不是command 例如,bash正在做:(sudo命令)&,而我想要sudo(命令&) 我会使用sudo-b,但这会使命令从终端退出,并且很难停止,因为^C和作业不会影响它 如何执行此操作?要在脚本退出(例如Ctrl-c)时停止后台进程,可以使用陷阱: trap 'kill $pids

我有一个脚本,它应该运行如下内容:

sudo command &
othercommand
在运行othercommand之前,我需要sudo的密码提示才能完成,但是上面的安装程序在后台运行
sudo
,而不是
command

例如,bash正在做:
(sudo命令)&
,而我想要
sudo(命令&)

我会使用
sudo-b
,但这会使
命令从终端退出,并且很难停止,因为
^C
作业
不会影响它


如何执行此操作?

要在脚本退出(例如Ctrl-c)时停止后台进程,可以使用陷阱:

trap 'kill $pids' EXIT
[...]
sudo command & pids="${pids+$pids }$!"
[...]
othercommand
[...]
wait

只有在
sudo
命令完成或收到终止信号后,此脚本才会退出,在这一点上,它将在退出之前终止
sudo
命令。

我认为您所需要的就是使它
sudo命令和&othercommand
命令在后台与
othercommand
同时以root用户身份运行,并且能够在同一终端中轻松停止它(即通过
fg
^C
)也许这个主题会有点帮助。我想你可以尝试做一些类似
sudo-echo'hi'&&(sudo-command-othercommand)&
的事情,因为第二个sudo不会要求密码。这是一种肮脏的解决方法。:)是的,
sudo-true&&sudo-command&
有效,但由于某些原因,我仍然无法从终端停止
command