Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Linux 使子进程中的shell命令在父进程中执行(以锁定shell)_Linux_Bash_Shell_Unix - Fatal编程技术网

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命令。