• ベストアンサー

シェルスクリプト内のcdで、カレントディレクトリを変えるには?

シェルスクリプト内のcdコマンドで、カレントディレクトリを変えるにはどうしたらいいか?をどうか教えて下さい。 MS-DOSのバッチファイル内で"cd XXXXX"と書き実行した時の動作を、UNIX(CygWin)環境でも行いたいです。 が、シェルスクリプトは(サブシェルで動く為)カレントディレクトリが変わってくれません。aliasコマンド等でいろいろ実験しましたが、DOSバッチファイルのように「バッチファイル単体でディレクトリ移動が出来る方法」を探し出せませんでした。 極めて初歩的とは存じますが、どうか宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

カレントディレクトリはプロセスの属性なので、子プロセス内で変更しても親には影響しないというのはおわかりのようなので、親プロセスの中で実行すればいいわけです。 今実行しているシェルプロセスの中でスクリプトファイルに書かれたコマンド群を実行するには、ピリオドコマンドもしくはsourceコマンドを使います。 . スクリプトファイル名 か source スクリプトファイル名 で実行してください。 別の方法としては、やりたいことをスクリプトファイルに書くのでなく、aliasや関数で定義するという方法もあります。 たとえば引数がディレクトリならそこにcdする関数は、 cddd() { test -d $1 && cd $1; } と.bashrcなどで定義します。

noname#32535
質問者

お礼

接頭辞shの代わりに.を使うように致します。最も単純に実現できました。どうも有難うございます。

その他の回答 (2)

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.2

DOSのバッチファイルとどうような処理をさせようとすると,sourceコマンドを使うことになるかと思います. 例えば,cdを含むスクリプトscr.sh を書いておいて, source ./scr.sh とやるとか. (で,これをaliasで別名を割り振ることになるかと.その場合, scr.sh は絶対パスを指定する必要が出てきますが)

noname#32535
質問者

補足

期待通りになりました。どうも有難うございました。 が、No3の方がより単純な . の方法を教えてくださりました。 それを使おうと思います。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

(cd hoge; command1; command2;...) のように()でsub shellを起動後cdします。

関連するQ&A