Linux 使子进程中的shell命令在父进程中执行(以锁定shell)
我有一个用户定义的命令,名为Linux 使子进程中的shell命令在父进程中执行(以锁定shell),linux,bash,shell,unix,Linux,Bash,Shell,Unix,我有一个用户定义的命令,名为lock。执行命令后,系统将被锁定。如果我们只给出正确的密码,那么只有命令 出现提示。现在,我想从下面的脚本执行lock命令 在后台运行。如果执行脚本lock命令,则会执行该命令,但不会锁定当前终端。它只锁定背景bash。它不会在当前bash中执行。如何解决这个问题 谢谢。您可以在命令提示符下使用调试陷阱执行命令之前执行命令: trap 'command' DEBUG 这将在每个命令之前执行命令。更改后台脚本,以便在系统锁定时创建某种标志文件。并让您的命令检查该文件
lock
。执行命令后,系统将被锁定。如果我们只给出正确的密码,那么只有命令
出现提示。现在,我想从下面的脚本执行lock
命令
在后台运行。如果执行脚本lock
命令,则会执行该命令,但不会锁定当前终端。它只锁定背景bash。它不会在当前bash中执行。如何解决这个问题
谢谢。您可以在命令提示符下使用调试陷阱执行命令之前执行命令:
trap 'command' DEBUG
这将在每个命令之前执行命令。更改后台脚本,以便在系统锁定时创建某种标志文件。并让您的命令检查该文件是否存在。像这样:
if [[ -f lockfile ]]
then p=
while [[ "$p" != secret ]]
do echo -n password:
read p
done
rm -f lockfile
fi
我不是说它是安全的
另一种方法:
跑两个炮弹。下层shell循环询问密码,然后运行上层shell。上壳为普通壳。后台任务要锁定终端时会杀死上外壳,将控制权返回下外壳。您不能。后台进程无法控制前台shell。它们是独立的过程。同样,后台脚本不能在前台进程中设置变量。因此,无法从子shell在父shell中执行命令。是这样吗?谢谢……没错。与其他两个进程一样,它们是完全独立的进程。我的要求是:如果我的系统达到1分钟的空闲时间,“锁定”命令将自动执行。到目前为止,检查后台进程将运行的系统空闲时间。如果达到1分钟,后台进程将执行lock命令。这是我的要求。那么,有没有办法实现这一点呢?它需要锁定还是可以终止shell会话?我不知道有什么方法可以直接用外壳实现锁的想法。像GNU屏幕和tmux这样的东西支持这种超时/锁定。要终止会话,可以查看
TMOUT
bash变量。此外,无论这个“锁定”命令是什么,听起来都不太安全(随便)。它在做什么?我的要求是:如果我的系统达到1分钟的空闲时间,“锁定”命令将自动执行。到目前为止,检查后台进程将运行的系统空闲时间。如果达到1分钟,后台进程将执行lock命令。这是我的要求。这是解决方案,不是要求。要求类似于“我想在一分钟后锁定终端”。您可以在后台运行lock命令,但它永远不会起作用。您可以按照我的建议,有条件地在标志文件上从调试陷阱运行lock命令。