シェルスクリプトで「fg」などのコマンドを使用できますか?

シェルスクリプトで「fg」などのコマンドを使用できますか?

パッケージを含む面白い端末スクリーンセーバーを作成しようとしていますcmatrix(端末を映画などのパッケージに切り替えます)。行列)xprintidle端末のアイドル時間を確認します。

少し助けました。スーパーユーザーのテーマの回答そして、次のようなシェルスクリプトを使用します。

スクリーンセーバー

#!/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
}

それとも、シェルスクリプトからそれを前景にインポートするための同様のオプションはありますか?

私はこれを私のスクリプトに追加して.bashrc実際にカスタマイズ可能な機能になることを願っています。可能ですか?

答え1

作業fgコマンドは対話型セッションにのみ接続され、バッチモード(スクリプト)では意味がありません。

set -m技術的には、これらのインタラクティブスクリプトがないため意味がないので、以下を使用して有効にすることができます。

答えはこんな感じです。実際にはできません。

答え2

tmuxを使用している場合は、「スクリーンセーバー」オプションがあります。

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

あなたの質問に対する正確な答えではありません。

関連情報