デフォルトでは、GNU Screenで新しいウィンドウを作成すると、screenが呼び出されたディレクトリから開始されます。GNUで新しいウィンドウを開始したい=現在使用しているウィンドウの現在の作業ディレクトリで画面を表示します。その方法は?ありがとう!
Gnu screen chdir
コマンドを参照してください。画面で作成されたすべての新しいウィンドウは、これを初期ディレクトリとして使用します。これを使用すると、次のようなことができます
chdir /home/dan/newscreendir
screen
そして、あなたの新しいウィンドウは(将来作成されるウィンドウと共に)セットディレクトリにあります。それが常に現在の作業ディレクトリになる場合は、screenrc
に何かを設定して、1つのコマンドでこれを実行できる場合があります。
Gnu screenのmanページを参照してください。非常に包括的です。
画面はシェル変数にアクセスできず、バッククォートされたコマンドを実行できません。ワンクリックで実行できる最も近いのは、次のような小さなbashスクリプトです。
screen -X setenv currentdir `pwd`
screen -X eval 'chdir $currentdir' screen
よりコンパクトに
screen -X eval "chdir $PWD"
screen -X
現在実行中のスクリーンセッションにコマンドを送信します。 1行目は、currentdir
という変数を作成します。 2行目はcurrentdir
をchdir
コマンドに送信し、新しい画面ウィンドウを作成します。
簡単な解決策は、次の文字列を〜/ .screenrcに入れてから、C-xで新しいウィンドウを開くことです。
^ xをバインド
^ xのものをバインドします "screen -X chdir\$ PWD; screen ^ M"
http://www.michaelkelleher.info は、中級/上級のスクリーンユーザー向けのヒントを多数掲載しています。
そのサイトはなくなったようですので、ここでアーカイブを見つけることができます: Michael KelleherのArchive.orgの個人Webサイト
すでにウィンドウでプロセスが実行されているときに機能する解決策が見つからなかったので、私は自分のアイデアを思いつきました。 .bash_profileに次の行を追加しました。
scr_cd()
{
cd $1
screen -X chdir $PWD
}
if [ "$TERM" == 'screen' ]; then
alias cd=scr_cd
fi
画面の作業ディレクトリは、ディレクトリを変更するたびに更新されます。誰かがこのアプローチを好まないかもしれませんが、それは魅力のように機能します。
おそらくこれはByobuに固有のものですが、単にscreen
と入力すると、現在のディレクトリに新しいウィンドウが開きます。
画面で現在のディレクトリの新しいタブ/ウィンドウを開くには、次のコードを.screenrc
ファイルに追加します。
bind c stuff "screen bash^M"
これにより Ctrl + ac 現在のウィンドウ/タブのディレクトリで新しいタブ/ウィンドウを開くコマンド。
注:screen
がしないことを確認する必要があります起動すると、シェルは現在のディレクトリではなく、ログインシェルのデフォルトのディレクトリで起動するため、デフォルトで ログインシェル が起動します。これは、.screenrc
ファイルでは、Shell
コマンドにダッシュ( '-')文字を含めることができないことを意味します。
たとえば、これは間違っています(つまり、ログインシェルが開始されます)。
Shell -$Shell
しかし、これは正しい(つまり、ログインシェルを開始するではないです):
Shell $Shell
注2:残念ながら、このメソッドはscreen
のデフォルトの新しいwindow/tabコマンドとまったく同じように動作しません。代わりに、現在のウィンドウにコマンドを書き込み、それを実行して新しいウィンドウ/タブを作成します。そのため、長時間実行されているシェルプロセスの間は機能しません。つまり、このキーボードショートカットは、通常のシェルコマンドを実行できるときにのみ実行できます。
注3:screen
で現在のディレクトリに新しいウィンドウ/タブを開く場合オープンログインシェル、.screenrc
に次のコードを追加できますファイル:
bind c stuff "screen bash -l^M"
次のコマンドを実行することもできます:
screen -X eval "chdir $(pwd)"
または、chdirを設定した直後に新しいウィンドウを開始する場合は、次のコマンドを使用します。
screen -X eval "chdir $(pwd)" screen
私はbashにほぼ完璧なソリューションを持っています。 :)
password
を使用してロック画面のパスワードを設定したことがない場合は、これを$HOME/.bash_profile
に追加するだけです。
export Prompt_COMMAND='screen -p $WINDOW -X chdir "$PWD"'
パスワードが必要ですか?これとともに:
# 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
をできるだけ早く追加することを望んでください。
あなたの.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]
それが何であるかを見つけて(スクリプトで)元に戻す方法はまだ見つけられていないので、誰かがこの答えをそれで更新したい場合は、実行してください。