是否可以在 shell 脚本中使用像“fg”这样的命令?

是否可以在 shell 脚本中使用像“fg”这样的命令?

我正在尝试创建一个有趣的终端屏幕保护程序,其中包含cmatrix程序包(将终端变成类似于电影的程序包)矩阵)并xprintidle确定终端的空闲时间。

我从中得到了一些帮助超级用户的主题答案并使用与其类似的 shell 脚本,如下所示:

屏幕保护程序

#!/bin/sh
set -x  # Used for debugging
IDLE_TIME=$((60*1000)) #a minute in milliseconds

screen_saver(){
# My screensaver function
    cmatrix -abs
}

sleep_time=$IDLE_TIME
triggered=false

while sleep $(((sleep_time+999)/1000)); do
    idle=$(xprintidle)
    if [ $idle -ge $IDLE_TIME ]; then
        if ! $triggered; then
            screen_saver
            triggered=true
            sleep_time=$IDLE_TIME
        fi
    else
        triggered=false
        sleep_time=$((IDLE_TIME -idle+100))
    fi
done

当我使用以下命令在前台运行脚本时,该脚本运行完美:

./screensaver.sh

我可以看到矩阵终端被触发。

但是,如果我在后台运行它&;该功能screen_saver()在后台触发,我无法查看。查看矩阵终端的唯一可能方法是使用fg将其置于前景的方式。

问题

是否可以fg在函数中使用screen_saver()以下命令:

screen_saver(){
     cmatrix -abs && fg
}

或者类似的选项将其带到 shell 脚本中的前台?

我希望将此脚本添加到我的脚本中,.bashrc以便它实际上成为一个可定制的功能。这可能吗?

答案1

作业fg命令仅连接到交互式会话,在批处理模式(脚本)中没有任何意义。

从技术上讲,您可以使用 启用它们set -m,但它仍然没有什么意义(如果有的话),因为这仅与您可以通过 ^Z 将作业发送回的交互式应用程序相关,但因为您在 shell 中没有这种交互脚本,这使得它毫无意义。

答案是:实际上,不,你不能。

答案2

如果您使用 tmux,它有一个“屏幕保护程序”选项

set -g lock-command "cmatrix -abs"
set -g lock-after-time 10 #inSeconds

不完全是你问题的答案。

相关内容