電子書籍の厳選無料作品が豊富!

シェルスクリプトの勉強中です。

シェルで特定のフォルダに移動するスクリプトを書いているのですが、以下のような場合どうかいていけばいいのでしょうか?

[例]
/home/hogeの下にフォルダが1つだけある場合
sample01フォルダ
→無条件でそのフォルダに移動する

/home/hogeの下にフォルダが複数ある場合
sample01フォルダ
sample02フォルダ
sample03フォルダ
→自分で選択して任意のフォルダに移動する
 sample02と打ち込めばそこに移動出来るようにしたいです。


hoge配下のフォルダ名が不規則で定まっていない為、
複数ある場合にだけ選択リスト的なものを表示させて、間違えないように
移動させたいなと考えてます。

いい案などありましたら、ご教授いただけますと助かります。

よろしくお願い致します。

A 回答 (3件)

No1です。



シェルスクリプトの処理中に移動したいと言うことでなく、コマンドラインでcdコマンドの代替的に使いたいと言うことであれば、
No1で書いたスクリプトを実行するなら、source コマンド(または、"." コマンド)で実行する必要があります。ファイル名だけで実行すると、ディレクトリ変更はそのスクリプトファイルの中だけで有効です。

$ pwd
/home/hoge
$ No1のスクリプトファイル名
(sample01を選択)
$ pwd
/home/hoge →もとのまま
$ . No1のスクリプトファイル名 → ピリオド+スペース+ファイル名
(sample01を選択)
$ pwd
/home/hoge/sample01 →移動した

頻繁に使うなら、
alias mycd="source No1のスクリプトファイル名"
と、別名定義を.bashrc等に書いておくといいでしょう
    • good
    • 0
この回答へのお礼

ご丁寧に追加でご指摘いただきありがとうございます。
いろいろ試行錯誤してなんとか解決しました。ありがとうございます。

お礼日時:2015/01/13 10:17

題意に沿った答えはNo1のとおりだと思いますが…



・フォルダが1つだけある場合というのはフォルダ以外に隠しファイルでないファイルは無いのでしょうか。*.coreとか(´・ω・`)
・なぜそのような事をしたいのでしょうか?ということを考えると「選択リスト的なものを表示させて」はシェルの補完機能を使って入力するようにしたらどうですか。
即ち、選択はスクリプトの外で行うようにしたらどうでしょうか。
   ↓
  % foo.sh {ターゲットのディレクトリ(フォルダ)} というようにディレクトリを引数で取るようにする。
  ターゲットのディレクトリはシェルの補完機能で入力する
   → foo.sh ~/[TABキーを押す]
  みたいなかんじで補完候補が出てきます。
  候補の中の先頭の文字を入力してまたTABを押すと候補が絞り込まれていきます。
    • good
    • 0
この回答へのお礼

言葉足らずでしたが、隠しフォルダなどはないです。
確かに補完機能を上手く使えば出来ました。ありがとうございます。

お礼日時:2015/01/13 10:17

hoge直下にはディレクトリしかないという前提で、



cd /home/hoge
if test `ls -1|wc -l` = 1
then cd *
else select d in *
do cd "$d"
break
done
fi
続きの処理~~
    • good
    • 0
この回答へのお礼

遅くなりましたが、hoge直下にはディレクトリしかないので、上記のスクリプトでやりたいことが実現できました。ありがとうございます。

お礼日時:2015/01/13 10:13

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