1. ホーム
  2. バッシュ

[解決済み】Bashスクリプトからカレントディレクトリを変更する

2022-04-07 09:17:07

質問

スクリプトからカレントディレクトリを変更することは可能ですか?

Bashでディレクトリナビゲーションを行うユーティリティを作りたいのですが、どうすればいいですか?私は以下のようなテストスクリプトを作成しました。

#!/bin/bash
cd /home/artemb

Bashシェルからスクリプトを実行しても、カレントディレクトリが変わりません。スクリプトからシェルのカレントディレクトリを変更することは全く不可能なのでしょうか?

解決方法を教えてください。

スクリプトをシェル関数に変換する必要があります。

#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
#   . ~/bin/myprog.sh
#

function myprog() {
  A=$1
  B=$2
  echo "aaa ${A} bbb ${B} ccc"
  cd /proc
}

これは、プロセスごとにカレントディレクトリがあり、シェルからプログラムを実行すると、新しいプロセスで実行されるからである。標準の "cd", "pushd", "popd" はシェルインタプリタに組み込まれているため、シェルプロセスに影響を与えることができるのです。

プログラムをシェル関数にすることで、独自のプロセス内コマンドを追加し、ディレクトリの変更がシェルプロセスに反映されるようになります。