スクリプト内で作業ディレクトリを変更して実行すると、スクリプト内では作業ディレクトリは指定されたパスにのみ変更されます。

スクリプト内で作業ディレクトリを変更して実行すると、スクリプト内では作業ディレクトリは指定されたパスにのみ変更されます。

スクリプト内で作業ディレクトリを変更して実行すると、スクリプト内では作業ディレクトリは指定されたパスにのみ変更されます。これが私のスクリプトです: (これは実際にディレクトリが変更されたかどうかを確認するためのものです)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd

実行すると、指定されたパスが返されますが、ターミナルの作業ディレクトリは変更されません。スクリプトを使用してターミナルの作業ディレクトリを変更するにはどうすればよいですか?

答え1

これは正常です。「現在の」または「作業」ディレクトリはプロセスごとのパラメータであり、プロセスは変更できません。独自の作業ディレクトリ。スタンドアロンスクリプトは別のシェルプロセスとして実行され、親シェルに影響を与えることはできません(実際、親は常になれシェル)。

次のようなシェルの内部機能を使用する必要があります。

  • シェル関数:

    mycd() {
        cd /media/hard/drive/partitionX/;
        pwd;
    }
    
  • シェルエイリアス:

    alias mycd='cd /media/hard/drive/partitionX; pwd'
    
  • スクリプトを実行する代わりに「ソース」します。

    . mycd.sh
    

特定のディレクトリへのショートカットを作成することが主な目的である場合は、以下も使用できます。

  • より便利な場所にシンボリックリンクを配置します。

    ln -s /media/hard/drive/partitionX ~/partX
    cd ~/partX
    
  • 変数 ($mydir):

    mydir=/media/hard/drive
    cd $mydir
    
  • $CDPATH 機能:

    CDPATH=".:/media/hard/drive"
    cd partitionX
    

答え2

実際、何度も検索した結果、ディレクトリを変更しても同じシェルを維持し、現在のスクリプトですべての回答を取得するには、次の操作を使用できることがわかりました。

(cd your_dir; do_some_command_there)

たとえば、私が使用する必要のあったものは次のとおりです。

((cd your_dir; git remote -v | wc -l)

素晴らしい効果です!

関連情報