私はシェルスクリプトを初めて作成し、自分のクラスの1つにプログラムが保存されているフォルダーにCDにスクリプトを書き込もうとしています。次に、書き込むプログラムのテストに使用するサーバーに対してsshを実行する2つ目のターミナルを開きます。 。問題は、ターミナルシェルのディレクトリをプログラムが保存されている場所に変更する方法が見つからないことです。
#!/bin/bash/
gnome-terminal -e "ssh [email protected]";
cd /path/to/dir
問題は、スクリプトの終了後に作業ディレクトリが変更されないことです(スクリプトが呼び出されたときの状態のままです)。 「。」を除いて呼び出してみました現在のプロセスで実行するスクリプトの名前の前にありますが、2番目のターミナルは開かれませんでした。
上記と同じことを試みましたが、3行目を
gnome-terminal -e "cd /path/to/dir/";
そのため、2つの端末が開きますが、パスへのCDへの端末は、「この端末の子プロセスの作成中にエラーが発生しました:子プロセス 'cd'の実行に失敗しました」という行に沿ってエラーが発生しました。
誰もがこの問題を解決する方法を理解するのを手伝ってくれる?
最初のバージョンでは、最初にgnome-terminal
を開き、閉じるまで待ってから、新しいディレクトリに移動します。
2番目のバージョンは、シェルではなくコマンドcd
を実行しようとしますが、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-terminalを実行するかを決定する必要があります。使用するリモートサイトで実行するには:
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'";
スクリプト名の前にドット(スペース)を付けてスクリプトを実行すると、作業ディレクトリは変更されたままになります。
たとえば、私はプロジェクトのmy pythonディレクトリに移動するpjという名前の1つを使用します。これには次の2行が含まれます。
#!/bin/bash
cd /home/pi/python
実行可能にし、$ PATHにある/ usr/sbinにコピーしました。
それを実行するには、次のように入力します。
. pj (note the dot and the space)
そして出来上がり、それはそのディレクトリに変わり、私をそこに残します。
これ以上簡単なことではありません。