アプリ版:「スタンプのみでお礼する」機能のリリースについて

シェルスクリプト内のcdコマンドで、カレントディレクトリを変えるにはどうしたらいいか?をどうか教えて下さい。

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

極めて初歩的とは存じますが、どうか宜しくお願い致します。

A 回答 (3件)

カレントディレクトリはプロセスの属性なので、子プロセス内で変更しても親には影響しないというのはおわかりのようなので、親プロセスの中で実行すればいいわけです。



今実行しているシェルプロセスの中でスクリプトファイルに書かれたコマンド群を実行するには、ピリオドコマンドもしくはsourceコマンドを使います。

. スクリプトファイル名

source スクリプトファイル名

で実行してください。

別の方法としては、やりたいことをスクリプトファイルに書くのでなく、aliasや関数で定義するという方法もあります。
たとえば引数がディレクトリならそこにcdする関数は、
cddd() { test -d $1 && cd $1; }
と.bashrcなどで定義します。
    • good
    • 2
この回答へのお礼

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

お礼日時:2007/04/19 14:58

DOSのバッチファイルとどうような処理をさせようとすると,sourceコマンドを使うことになるかと思います.



例えば,cdを含むスクリプトscr.sh を書いておいて,
source ./scr.sh
とやるとか.
(で,これをaliasで別名を割り振ることになるかと.その場合, scr.sh は絶対パスを指定する必要が出てきますが)

この回答への補足

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

補足日時:2007/04/19 14:56
    • good
    • 1

(cd hoge; command1; command2;...)


のように()でsub shellを起動後cdします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!