Shell-Script是否可以在 shell 腳本中使用像
是否可以在 shell 腳本中使用像 fg
這樣的命令?
我正在嘗試創建一個有趣的終端螢幕保護程序,它由
cmatrix
包組成(一個類似於電影The Matrix的終端)並xprintidle
確定終端的空閒時間。我從SuperUser的這個 Thread 答案中獲得了一些幫助,並使用了類似於它的 shell 腳本,如下所示:
screensaver.sh
#!/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
中,以便它實際上成為可定制的功能。這可能嗎?
fg
作業命令僅連接到互動式會話,在批處理模式(腳本)中沒有任何意義。從技術上講,您可以使用 啟用它們
set -m
,但它仍然沒有什麼意義(如果有的話),因為這僅與互動式應用程序有關,您可以通過 ^Z 將作業發送回,但由於您在 shell 中沒有這種互動腳本,它使它毫無意義。答案是:實際上,不,你不能。
如果您使用 tmux,它有一個“螢幕保護程序”選項
set -g lock-command "cmatrix -abs" set -g lock-after-time 10 #inSeconds
不完全是您問題的答案。