web-dev-qa-db-ja.com

端末のディレクトリを変更して2番目の端末を開くシェルスクリプト

私はシェルスクリプトを初めて作成し、自分のクラスの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'の実行に失敗しました」という行に沿ってエラーが発生しました。

誰もがこの問題を解決する方法を理解するのを手伝ってくれる?

3
bs7280

最初のバージョンでは、最初に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'";
3
michas

スクリプト名の前にドット(スペース)を付けてスクリプトを実行すると、作業ディレクトリは変更されたままになります。

たとえば、私はプロジェクトのmy pythonディレクトリに移動するpjという名前の1つを使用します。これには次の2行が含まれます。

#!/bin/bash
cd /home/pi/python

実行可能にし、$ PATHにある/ usr/sbinにコピーしました。

それを実行するには、次のように入力します。

. pj         (note the dot and the space)

そして出来上がり、それはそのディレクトリに変わり、私をそこに残します。
これ以上簡単なことではありません。

1
SDsolar