私はシェルスクリプトの作成が初めてで、私のクラスの1つのプログラムをアーカイブするフォルダのCDにスクリプトを作成し、2番目のターミナルを開き、SSH経由で使用しているサーバーに接続しようとしています。私が書いたプログラムをテストするために。問題は、ターミナルシェルのディレクトリをプログラムが保存されているディレクトリに変更する方法が見つからないことです。
#!/bin/bash/
gnome-terminal -e "ssh [email protected]";
cd /path/to/dir
問題は、スクリプトが終了した後も作業ディレクトリが変更されないことです(スクリプトが呼び出されたときと同じままです)。 「。」と呼んでみました。現在のプロセスで実行されますが、2番目の端末は開かないようにスクリプト名の前に付けられます。
3行目を次に置き換える以外は上記と同じことを試しました。
gnome-terminal -e "cd /path/to/dir/";
これにより両方の端末が開きますが、パスにCDを追加すると、「この端末の子プロセスの作成中にエラーが発生しました:子プロセス「cd」を実行できません」などのエラーが発生します。
誰もがこの問題を解決する方法を見つけるのに役立ちますか?
ベストアンサー1
最初のバージョンは最初に1つを開いてgnome-terminal
閉じるのを待ってから、新しいディレクトリに移動します。
cd
2番目のバージョンでは、シェルの代わりにコマンドを実行しようとしましたが、cd
これは実際のコマンドではなくシェル組み込みです。 (type -a cd
これを見てください。)
問題は、gnome-terminal
表示するディレクトリを決定する方法です。このオプションで上書きされない限り、通常は現在の作業ディレクトリを使用します--working-directory
。
したがって、次のものを使用できます。
cd /path/to/dir && gnome-terminal
または
gnome-terminal --working-directory=/path/to/dir
利用可能なオプションを確認してくださいman gnome-terminal
。
SSH部分の場合は、gnome端末をローカルで実行するかリモートで実行するかを決定する必要があります。リモートサイトで実行するには、次のものを使用できます。
ssh -X [email protected] gnome-terminal --working-directory=/path/to/dir
ローカル側では、次のようなものを使用できます。
gnome-terminal -e "ssh -t [email protected] bash -c 'cd /path/to/dir && bash -l'";