在螢幕中運行腳本

在螢幕中運行腳本

我想在獨立的螢幕中運行 bash 腳本。該腳本多次呼叫程序,每次都需要等待很長時間。我的第一個想法是簡單地打開一個螢幕,然後調用腳本,但似乎ctrl-a d在腳本運行時我無法分離(通過)。所以我做了一些研究並發現了這個操作說明將 shebang 替換為以下內容:

#!/usr/bin/screen -d -m -S screenName /bin/bash

但這也不起作用(選項不被識別)。有什麼建議麼?

PS 我現在想到這screen -dmS name ./script.sh可能適合我的目的,但我仍然很好奇如何將其合併到腳本中。謝謝。

答案1

舍邦您所看到的行可能適用於某些 UNIX 變體,但不適用於 Linux。 Linux 的 shebang 行是有限的:你只能有一種選擇。整個字串-d -m -S screenName /bin/bash作為單一選項傳遞給screen,而不是作為不同的單字傳遞。

如果您想在螢幕內執行腳本而不是處理多個檔案或引用,您可以將該腳本設為 shell 腳本,如果尚未在螢幕內執行,則該腳本將呼叫螢幕。

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

答案2

根據螢幕手冊頁:

  • screen -d -m 以分離模式啟動螢幕。這會建立一個新會話,但不會附加到它。這對於系統啟動腳本很有用。
  • -S sessionname 將新會話的名稱設為 sessionname。

所以當我運行你提供的命令時:screen -dmS name ./script.sh

Screen 啟動一個名為 name 的視窗並自動執行該 script.sh。要返回那裡查看狀態,您只需輸入:screen -r test

現在使用 Ubuntu 14.04,指令略有不同。嘗試:

screen -d -m -S test

現在要運行腳本,您需要轉到其設定檔來執行此操作:

sudo vim /etc/screenrc

到達那裡後,向下滾動到底部,您將看到:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

在這一部分,您需要添加要運行的腳本名稱,這應該允許您從螢幕上執行所需的所有操作。

答案3

這有點舊了,但這是我能找到的為數不多的線程之一。在嘗試了一番之後,在 ubuntu 14 上以分離模式運行的唯一方法是:

screen -d -m -t nameofwindow sh nameoflaunch.sh

發布將是上面的第二部分,其中包含當前的 java 命令和伺服器版本。我經營香草。

相關內容