web-dev-qa-db-ja.com

コマンドでUnix画面コマンドをどのように開始しますか?

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

そこにも同じ結果。

起動時に特定の画面でコマンドを実行するための秘訣は何ですか?

25
Ethan

プログラムが実行されています(まあ、cdを除きます)。親シェルなしで実行されているだけなので、プログラムが完了するとすぐに終了し、完了です。

あなたがすることができます:

screen -t "autotest" 2 bash -c 'cd ~/project/contactdb ; autotest'

2つのシェルを生成しますが、おそらく人生は続くでしょう。

21
chaos

これを試して:

$ screen -S 'tailf messages' -d -m tailf /var/log/messages

その後、後で行うことができます:

$ screen -ls
1234.tailf messages

に続く:

$screen -r 1234
16
sodamnmad

これは役立つかもしれませんが、完全にあなたが望むものではないかもしれません。

.screenrcの最初の行に "zombie az"または "defzombie az"を入力します。 「az」は、任意の2つのキーにすることができます。これで、画面を閉じる必要がある場合(コマンドの実行が終了した場合など)は、実際には閉じません。 「a」を押すとそれが閉じ、「z」を押すとその画面にアタッチされているコマンドが再実行されます。

画面のユーザーズマニュアル でそれを見つけました。

7
Otis

入力したかのように画面に文字を「詰め込む」こともできます。

あなたの例でそれを行う方法は次のとおりです:


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"
5
Jamie Flournoy

これは私のものです。正常に動作するようです。 「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
4
Joe Calimari

これが私のやり方です。

screen -t Shell_0
chdir ~/project/contactdb
screen -t autotest autotest

上記は画面で手続き的に評価されるようです。まず、Shell_0というタイトルの新しい画面を作成します。他のオプションを指定しなかったため、現在の作業ディレクトリは、親シェルまたはユーザーのホームディレクトリのディレクトリになります。次に、新しい画面のデフォルトディレクトリを~/project/contactdbに設定します。次に、autotestコマンドを実行する新しい画面を確立します。

ウィンドウ番号(n)はオプションです。通常は省略します。

0
Adam Monsen