nixの "screen"コマンドのドキュメント によると、.screenrcで、指定したコマンドを実行する一連のデフォルト画面で開始するように構成できます。
これが私のコフィです:
# Default screens
screen -t "Shell_0" 1
screen -t "autotest" 2 cd ~/project/contactdb ; autotest
Autotestコマンドは実行されません。 autotest
を実行しようとしているウィンドウは、screen
を起動するとすぐに閉じます。
私もそれを試してみました...
screen -t "autotest" 2 cd ~/project/contactdb
同じ結果。
私も試しました...
screen -t "autotest" 2 ls
そこにも同じ結果。
起動時に特定の画面でコマンドを実行するための秘訣は何ですか?
プログラムが実行されています(まあ、cdを除きます)。親シェルなしで実行されているだけなので、プログラムが完了するとすぐに終了し、完了です。
あなたがすることができます:
screen -t "autotest" 2 bash -c 'cd ~/project/contactdb ; autotest'
2つのシェルを生成しますが、おそらく人生は続くでしょう。
これを試して:
$ screen -S 'tailf messages' -d -m tailf /var/log/messages
その後、後で行うことができます:
$ screen -ls
1234.tailf messages
に続く:
$screen -r 1234
これは役立つかもしれませんが、完全にあなたが望むものではないかもしれません。
.screenrcの最初の行に "zombie az"または "defzombie az"を入力します。 「az」は、任意の2つのキーにすることができます。これで、画面を閉じる必要がある場合(コマンドの実行が終了した場合など)は、実際には閉じません。 「a」を押すとそれが閉じ、「z」を押すとその画面にアタッチされているコマンドが再実行されます。
画面のユーザーズマニュアル でそれを見つけました。
入力したかのように画面に文字を「詰め込む」こともできます。
あなたの例でそれを行う方法は次のとおりです:
screen -t "Shell_0" 1
# create the following screen in the desired dir, instead of cd-ing afterwards :)
chdir ~/project/contactdb
screen -t "autotest" 2
# (without this sometimes screens fail to start correctly for me)
sleep 5
# paste some text into screen number 2:
select 2
stuff "autotest\012"
これは私のものです。正常に動作するようです。 「autotest」コマンドが存在しない場合、括弧が問題の原因であるか、画面がウィンドウを開かない可能性があります。
screen -t zsh 1 screen -t emacs 2 emacs -nw screen -t mutt 3 mutt monitor on screen -t mc 4 mc -s screen -t elinks 4 elinks
これが私のやり方です。
screen -t Shell_0
chdir ~/project/contactdb
screen -t autotest autotest
上記は画面で手続き的に評価されるようです。まず、Shell_0
というタイトルの新しい画面を作成します。他のオプションを指定しなかったため、現在の作業ディレクトリは、親シェルまたはユーザーのホームディレクトリのディレクトリになります。次に、新しい画面のデフォルトディレクトリを~/project/contactdb
に設定します。次に、autotest
コマンドを実行する新しい画面を確立します。
ウィンドウ番号(n
)はオプションです。通常は省略します。