- PR -

シェルスクリプトでディレクトリを移動させるには?

投稿者投稿内容
パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-08-19 11:44
スガです。よろしくお願いします。

件名のとおり、シェルスクリプトによってディレクトリを移動させたいのですが、
単純にcdを使うだけでは上手くいかないので困っています。

やろうとしていることは、そのシェルを実行すると、ある処理を行い、
その後、引数のディレクトリに移動するというものです。

以下、サンプルのソースになります。

コード:

#!/bin/bash

if [ $# -eq 1 ]; then
  if [ -d $1 ]; then 
    処理A (echoなど)
    cd $1
  fi
fi



環境は、RedhatLinux 7.3でbashを使用しています。

あまりシェルというものに慣れていないので手探り状態でして、
そもそもこのような処理が可能なのかどうかも判らないのです…。
皆さまのお知恵を貸していただけませんでしょうか。
よろしくお願いします。。
tadc
常連さん
会議室デビュー日: 2001/08/17
投稿数: 22
お住まい・勤務地: 東京都
投稿日時: 2003-08-19 12:30
$ . スクリプト名
Marionette
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 70
投稿日時: 2003-08-19 12:59
サンプルのシェルスクリプトで正常に動作しているはずです。

Windowsと違いプロセス毎にカレントディレクトリが存在する(という言い方でいいのかな?)ので、スクリプトが終了した時点で元のディレクトリに戻ってしまいます。

cd $1の次行に 'ls'などを追加して確認してください。
コマンドパラメータではなく、スクリプトに直接ディレクトリを指定しても同様な結果になることを確認してみてください。納得できるはずです。

まだ、困ったことがあるようであればもう少し具体的にやりたいことを書いてもらえれば、いろいろ提案してもらえるかもしれません。

Marionette
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 70
投稿日時: 2003-08-19 13:04
すみません、間違ってました。
というか、通常の実行方法で上記のような理由でディレクトリが移動していないように
みえたのでしょう。

tadcさんの回答のようにすれば OKですね。



[ メッセージ編集済み 編集者: Marionette 編集日時 2003-08-19 13:27 ]
パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-08-19 13:55
tadcさん、Marionetteさん、回答ありがとうございます!

$ . スクリプト名 引数

これで確かに実行することができました!
大変助かりました。ありがとうございます。

で、この"."(ドット)の意味というか役割が、
ウェブや書籍などを紐解いてみたのですが、
該当する情報を見つけることができませんでした。
重ねての質問になってしまいますが、
この"."についてご教授願えませんでしょうか。

また、贅沢なお願いになるのかもしれませんが、
この処理を他のコマンドを打つのと同様に行う方法は無いでしょうか。
構内の他のユーザに使用してもらう予定なので、普通にコマンドを打つがごとく
このスクリプトの処理を行うことができれば良いなーと考えてます。

よろしくお願いします。
Marionette
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 70
投稿日時: 2003-08-19 18:40
'ドットコマンド' で検索すれば何件かヒットします。

.(ドット)で起動すると現在のシェルが指定されたファイルを読み込み記述された内容の処理を実行します。
通常のコマンドとして実行すると '#!' で指定されたプログラムを起動(新たなプロセス)しファイルに
書かれた内容の処理を行ないます。
どうやって書けばいいか分かりませんが以下のような動作です。


$ . test.sh
ファイル読み込み -> 実行 (ディレクトリ移動)

$ ./test.sh
bash起動 -> ファイル読み込み -> 実行 (ディレクトリ移動) -> bash終了
という動作なので、この場合は先に書いたとおり元のディレクトリに戻ります。

> 構内の他のユーザに使用してもらう予定なので、普通にコマンドを打つがごとく
> このスクリプトの処理を行うことができれば良いなーと考えてます。
従って、どうすればいいかわかりません。


[ メッセージ編集済み 編集者: Marionette 編集日時 2003-08-19 18:50 ]

[ メッセージ編集済み 編集者: Marionette 編集日時 2003-08-19 18:51 ]
パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-08-19 19:46
Marionetteさん、ありがとうございます。

なるほど、"ドットコマンド"で検索したらばっちりマッチしました。
"ドット","コマンド"で検索していたので、特定できなかったみたいです。
仕組みが分かったので、スッキリした気がします!

さて、ドットコマンドを使わないと子プロセスが走るということは、
さしあたっての解決法は、ちょっと無さそうですねー。
少し残念ではありますが、実行に問題はないので、ドットコマンドの使用で
運用していくことにしたいと思います。ありがとうございました!!
こつぶ
常連さん
会議室デビュー日: 2002/11/11
投稿数: 47
投稿日時: 2003-08-20 09:44
直接的な解決にはならないかもしれませんが、
変数に入れてしまうという方法でドットコマンドを使用せずに実現できます。

$ CHD=". test.sh"
$ $CHD
とするとディレクトリの移動が可能です。

・・・ちょっとややこしくなってしまいますが。

スキルアップ/キャリアアップ(JOB@IT)