web-dev-qa-db-ja.com

GNUを作成する方法スクリーンは現在の作業ディレクトリで新しいウィンドウを開始しますか?

デフォルトでは、GNU Screenで新しいウィンドウを作成すると、screenが呼び出されたディレクトリから開始されます。GNUで新しいウィンドウを開始したい=現在使用しているウィンドウの現在の作業ディレクトリで画面を表示します。その方法は?ありがとう!

46
Rio

Gnu screen chdirコマンドを参照してください。画面で作成されたすべての新しいウィンドウは、これを初期ディレクトリとして使用します。これを使用すると、次のようなことができます

chdir /home/dan/newscreendir
screen

そして、あなたの新しいウィンドウは(将来作成されるウィンドウと共に)セットディレクトリにあります。それが常に現在の作業ディレクトリになる場合は、screenrcに何かを設定して、1つのコマンドでこれを実行できる場合があります。

Gnu screenのmanページを参照してください。非常に包括的です。

Screen chdirコマンド

画面はシェル変数にアクセスできず、バッククォートされたコマンドを実行できません。ワンクリックで実行できる最も近いのは、次のような小さなbashスクリプトです。

screen -X setenv currentdir `pwd`
screen -X eval 'chdir $currentdir' screen

よりコンパクトに

screen -X eval "chdir $PWD"

screen -X現在実行中のスクリーンセッションにコマンドを送信します。 1行目は、currentdirという変数を作成します。 2行目はcurrentdirchdirコマンドに送信し、新しい画面ウィンドウを作成します。

29
Dan Midwood

簡単な解決策は、次の文字列を〜/ .screenrcに入れてから、C-xで新しいウィンドウを開くことです。

^ xをバインド

^ xのものをバインドします "screen -X chdir\$ PWD; screen ^ M"

http://www.michaelkelleher.info は、中級/上級のスクリーンユーザー向けのヒントを多数掲載しています。

そのサイトはなくなったようですので、ここでアーカイブを見つけることができます: Michael KelleherのArchive.orgの個人Webサイト

10
Mike

すでにウィンドウでプロセスが実行されているときに機能する解決策が見つからなかったので、私は自分のアイデアを思いつきました。 .bash_profileに次の行を追加しました。

scr_cd()
{
    cd $1
    screen -X chdir $PWD
}
if [ "$TERM" == 'screen' ]; then
    alias cd=scr_cd
fi

画面の作業ディレクトリは、ディレクトリを変更するたびに更新されます。誰かがこのアプローチを好まないかもしれませんが、それは魅力のように機能します。

7
wronan

おそらくこれはByobuに固有のものですが、単にscreenと入力すると、現在のディレクトリに新しいウィンドウが開きます。

4
jth

画面で現在のディレクトリの新しいタブ/ウィンドウを開くには、次のコードを.screenrcファイルに追加します。

bind c stuff "screen bash^M"

これにより Ctrlac 現在のウィンドウ/タブのディレクトリで新しいタブ/ウィンドウを開くコマンド。

注:screenしないことを確認する必要があります起動すると、シェルは現在のディレクトリではなく、ログインシェルのデフォルトのディレクトリで起動するため、デフォルトで ログインシェル が起動します。これは、.screenrcファイルでは、Shellコマンドにダッシュ( '-')文字を含めることができないことを意味します。

たとえば、これは間違っています(つまり、ログインシェルが開始されます)。

Shell -$Shell

しかし、これは正しい(つまり、ログインシェルを開始するではないです):

Shell $Shell

注2:残念ながら、このメソッドはscreenのデフォルトの新しいwindow/tabコマンドとまったく同じように動作しません。代わりに、現在のウィンドウにコマンドを書き込み、それを実行して新しいウィンドウ/タブを作成します。そのため、長時間実行されているシェルプロセスの間は機能しません。つまり、このキーボードショートカットは、通常のシェルコマンドを実行できるときにのみ実行できます。

注3:screenで現在のディレクトリに新しいウィンドウ/タブを開く場合オープンログインシェル.screenrcに次のコードを追加できますファイル:

bind c stuff "screen bash -l^M"
2
stiemannkj1

次のコマンドを実行することもできます:

screen -X eval "chdir $(pwd)"

または、chdirを設定した直後に新しいウィンドウを開始する場合は、次のコマンドを使用します。

screen -X eval "chdir $(pwd)" screen
1
Eman

私はbashにほぼ完璧なソリューションを持っています。 :)

  1. passwordを使用してロック画面のパスワードを設定したことがない場合は、これを$HOME/.bash_profileに追加するだけです。

    export Prompt_COMMAND='screen -p $WINDOW -X chdir "$PWD"'
    
  2. パスワードが必要ですか?これとともに:

    # the digest of password "abc" is ID1wIq4l2t7s6
    export Prompt_COMMAND='screen -p $WINDOW -X eval "password none" "chdir \"$PWD\"" "idle 0 password ID1wIq4l2t7s6"'
    

Screenの開発者が環境変数PWDをできるだけ早く追加することを望んでください。

0
V.D.D

あなたの.screenrc毎回同じものが必要な場合は、chdirコマンドを使用する行を追加します。

そのセッション内で実行中のスクリーンセッションがある場合は、次のように入力できます。

screen -X chdir [arg]

引数がない場合は、ホームディレクトリになり、cdと入力した場合と同じ結果になります。

スクリプトがある場合(これはプログラミングに関するQ&Aサイトです)、画面外で画面が実行されている場合は、次のコマンドを発行できます。

`which screen` -x -X chdir [arg]

画面でいくつかの新しいプロセスを実行すると、次のようになります。

`which screen` -x -X screen [command to run in that dir] [args for the command]

それが何であるかを見つけて(スクリプトで)元に戻す方法はまだ見つけられていないので、誰かがこの答えをそれで更新したい場合は、実行してください。

0
dlamblin