2016-12-09 32 views
1

特定のウィンドウセットでスクリーン(ソフトウェア)セッションを作成するためのbashスクリプトを作成しようとしており、それぞれ特定のディレクトリにcdという特定のディレクトリを作成しようとしています。ここでbashスクリプトを使用して画面をセットアップする方法

は、これまでのところ、私が持っているスクリプトです:

#!/bin/bash 

killall screen; 
screen -AmdS work; 
screen -S work bash -c "cd myDir"; 

問題は、私はそのセッションにディレクトリを変更するように見えることができないということです。このスクリプトを実行した後、私は$ screen -rを実行し、現在のディレクトリはまだ私のデフォルトのディレクトリ(〜/)です。

(私はtouch myFilecdコマンドを変更しようとしたと私はスクリプトを実行した後にファイルがある)

+2

あなたの端末は、ディレクトリを変更しないことがわかります。ディレクトリを変更するにはscreenコマンド(**ではなく**シェルコマンド) 'chdir'を使い、新しいシェルを開くとそのディレクトリで起動します –

+1

これはディレクトリを変更しますが、新しいシェルのディレクトリ*を変更しますあなたはそれを実行したシェル/プログラムのディレクトリではなく、 'bash'コマンド*で始めました。そして、新しいシェルがスクリプトの実行を終えると即座に終了し、 'bash -c'で渡されました... –

答えて

1

次のことを試してみてください、それがディレクトリを変更しますbashのと新しい画面セッションを開き、現在のように、このディレクトリを使用して新しいbashのを開きます。

screen -S work bash -c 'cd myDir && exec bash' 

は切り離さモードでそれを実行するために-d -mを追加します。そして、再接続した後、あなたはmyDirになります。

screen -S work -d -m bash -c 'cd myDir && exec bash' 

より良いソリューション

次のコードは、3つの画面ディレクトリmyDir1/2/3で実行中の各myCommand1/2/3で剥離画面を作成します。

cd myDir1 
screen -S work -d -m 
screen -S work -X exec myCommand1 
screen -S work -X chdir myDir2 
screen -S work -X screen 
screen -S work -X exec myCommand2 
screen -S work -X chdir myDir3 
screen -S work -X screen 
screen -S work -X exec myCommand3 
cd - 

最後のcd -は元の作業ディレクトリに戻ることに注意してください。

最後に、実行中の画面セッションを添付するにはscreen -r workを使用してください。

+1

' cd mydir && exec bash'は、親プロセスをメモリに残さないようにします。 –

+0

@CharlesDuffy私は答えを 'exec'で更新します –

2

あなたはレジスタに(最後の改行を含む)実行したいコマンドラインを保存し、画面入力に貼り付けることができます:あなたが `` bashの-c「CD myDirに」をしようとした場合

screen -S work -X register c $'cd myDir\n' 
screen -S work -X paste c 
関連する問題