シェルスクリプトについて、各行の値を使って、更新したいと考えています。
引数を2つ持たせて、2つともファイルです。
ファイル名1には、
test1
test2
test3
のディレクトリを記載し、
ファイル名2には、
test4.txt
test5.txt
test6.txt
のテキストを記載します。
例)
引数1 ファイル名1
引数2 ファイル名2
while read lineをどのように使ったら良いかわからないのですが、
ファイル名1を1行ずつ読み込んで、
読み込んだディレクトリをファイル名2に書かれているテキストを更新します。
具体的にやりたいと思っている内容ですが、
・cd ファイル名1の1行目ディレクトリ
・svn up ファイル名2のテキスト
ここをファイル名2に書かれている行分ループして
上記svn upコマンドを実行します。
・ファイル名2に書かれている行分ループ完了後、
ファイル名1の2行目にかかれているディレクトリを読み込んで、
cd ファイル名1の2行目ディレクトリ
・svn up ファイル名2のテキスト
ここをファイル名2に書かれている行分ループ。
という形のシェルスクリプトを作成したいと思っています。
上手く説明できないのですが、このようなことが出来るのかお教えいただけますでしょうか。
出来るのであれば、どのようにすればできるのかご教授いただけると幸いです。
宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
#1です。
cd を内側のループの外に出した場合、$2 のファイルの指定が相対バスだった場合、ファイルが見つからないと言うことになってしまいます。また、ファイル1に書かれているディレクトリ名が相対パスの場合も同じです。
それを避けるため、内側にし、かつ括弧で囲いました。
$2を必ずフルパスで指定し、ファイル1に含まれているディレクトリ名もすべてフルパスであるならcdを外側に移しても問題ありません。
また、
while read aa
do :::::
done < file
と
for aa in `cat file`
do :::::
done
の違いは、前者がファイルの行単位で処理をするのに対して、後者は行に空白・タブが含まれた場合、それらで区切られた単語単位で処理をするという事です。
例えば、fileの中身が
abc def
ghi jkl
の場合に結果が違ってきます。
丁寧なご説明ありがとうございました!
すごくよくわかりました。
今回は改行で記述したいと思っておりましたので、
whileでやりたいと思います。
あと、パスについてはフルパスで記載するつもりでしたので、
cdを外側にしてやります。
すごく助かりました!
No.2
- 回答日時:
while ~では無いのですが、私ならこうします。
for dir in `cat $1`;do
cd $dir
for svn in `cat $2`;do
svn up $svn
done
done
もちろん
while read dirname
do
cd $dirname
while read filename
do
svn up $filename
done < $2
done < $1
でも、良いと思いますが
この回答への補足
ありがとうございます!
どちらでもやりたいことが実行できたのですが、
whileではなく、forを使用しますとのことですが、
何かパフォーマンス的なことなのか、forを使うことのほうが
何かメリットがあるのでしょうか。
何度も質問という形になってしまい、申し訳ないのですが、
宜しくお願い致します。
No.1
- 回答日時:
while read dirname
do
while read filename
do
(cd $dirname; svn up $filename)
done < $2
done < $1
ですかね。
この回答への補足
ありがとうございます!
上手くできたのですが、もう一つだけ質問があるのですが・・・
上記のようなシェルを作成し、実行したら、
cd test1
svn up test4.txt
cd test1
svn up test5.txt
cd test1
svn up test6.txt
cd test2
svn up test4.txt
cd test2
svn up test5.txt
cd test2
svn up test6.txt
cd test3
svn up test4.txt
cd test3
svn up test5.txt
cd test3
svn up test6.txt
というようになるのですが、これでも問題はないのですが、
理想は
cd test1
svn up test4.txt
svn up test5.txt
svn up test6.txt
cd test2
svn up test4.txt
svn up test5.txt
svn up test6.txt
cd test3
svn up test4.txt
svn up test5.txt
svn up test6.txt
というように実行されるようにはできないでしょうか。
お手数ですが、ご教授いただけますでしょうか。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
centos7をGUIで使っているとた...
-
PCが常にBIOS画面が立ち上がっ...
-
ubuntu(linux)のシャットダウン...
-
ssh接続しようとしたらエラーメ...
-
Ubuntu on Xorgのログインについて
-
LAMPについて質問です あまりpc...
-
LinuxのOS(Ubuntu)のインスト...
-
Linux用のインストーラー(USB...
-
ubuntuで デイスク/deb/loopと...
-
VirtualBox:ヘッドレス起動の...
-
Ubuntuのインストール失敗
-
Ubuntuで数字だけのユーザーア...
-
至急です。kubuntu24.04ltsをUS...
-
ubuntuのシャットダウンが進ま...
-
2TBのUSBメモリを2000円ほどで...
-
AppImageがインストールできな...
-
Ububtuでファイル共有できない...
-
VirtualBox ゲストOSにPC内蔵HD...
-
bashでシングルクォート内の変...
-
linuxサーバーのキャッシュをク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ubuntuで デイスク/deb/loopと...
-
Linuxミントで困っています。 s...
-
Linux用のインストーラー(USB...
-
LAMPについて質問です あまりpc...
-
LinuxのOS(Ubuntu)のインスト...
-
ubuntuのシャットダウンが進ま...
-
ログにserver reached MaxReque...
-
AWSでSSH接続をしたいのですが...
-
Ubuntuのインストール失敗
-
ssl_request_logの必要性について
-
Ubuntu on Xorgのログインについて
-
Ububtuでファイル共有できない...
-
Linux Mint でも使えないですよ...
-
shellscript内のコマンドを、su...
-
Lubuntuのデスクトップのアイコ...
-
Windowsのローカルディレクトリ...
-
linuxサーバーのキャッシュをク...
-
Linux のシェルスクリプトの強...
おすすめ情報