シェルスクリプト総合 その20
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2012/06/08(金) 00:35:51.19スクリプトのお勉強・自慢・腕試しなどにどうぞ。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ
シェルスクリプト総合 その19
http://toro.2ch.net/test/read.cgi/unix/1323515200/
0746名無しさん@お腹いっぱい。
2012/08/22(水) 02:57:14.91中身はもしかしたらexモードのvim.tinyとかだったりするのかも知らんがw
0747名無しさん@お腹いっぱい。
2012/08/22(水) 03:14:43.870748名無しさん@お腹いっぱい。
2012/08/22(水) 15:08:45.070749名無しさん@お腹いっぱい。
2012/08/22(水) 22:33:02.240750名無しさん@お腹いっぱい。
2012/08/22(水) 23:14:05.900751名無しさん@お腹いっぱい。
2012/08/26(日) 11:54:24.95グレイヴコマンド(例:echo `date` の`date`)はネストできませんが、
ネストしたような働きをさせるにはどうコマンドしたらよいでしょうか
0752名無しさん@お腹いっぱい。
2012/08/26(日) 12:01:34.46echo `echo ¥`date¥``
0753名無しさん@お腹いっぱい。
2012/08/26(日) 12:03:20.510754名無しさん@お腹いっぱい。
2012/08/26(日) 12:11:27.990755名無しさん@お腹いっぱい。
2012/08/30(木) 23:13:56.24レッドハットとHP-UX混在環境です。
サーバーA、サーバーB、サーバーCとあり
全て異なるネットワークに属しているサーバで
ftpやhulftでのファイルやり取りを行います。
サーバー間でファイルの送受信を行うスクリプトを組むのですが、
ファイルごとに組むと100本近くになってしまうため、外部定義ファイルにパスなどを記述し
そこからパスなどを読んで処理するような作りをかんがえてます。
例えばhulftならhulft idを引数にしてそのhulft idの行にファイルのパスやファイル名、
sendなのかrecvなのかを記載しそれらをスクリプト内で代入出来ればいいんじゃないか
と思ったのですが具体的な構文がいまいち浮かびません。
またサーバーA上にシェルA、サーバーB上にシェルBといて
シェルBはシェルAからキックされる場合、引数や変数は継承されますでしょうか。
0756名無しさん@お腹いっぱい。
2012/08/30(木) 23:23:26.73ファイル名にスペース等が含まれていないなら、
for file in `cat 外部定義ファイル`; do ...
で行ける。
異なるサーバー上のシェルに変数は継承されない。
引数は明示的に引数を渡せば当然継承される。
0757名無しさん@お腹いっぱい。
2012/08/31(金) 09:31:26.31少なくとも、バッシュやZSHかな大別できるのは…
Kshは癖があるな。
シェルを実行するためには、chmodのコマンド手続きがいるだろ?
そんなこと初心者には周知されていない。
コマンド入力にしても ./付けるとかひと工夫しないとだめだ。
この件も初心者には周知されていない。
初心者と言ってもシェル経験者ならPATHで権限を付ける知識くらいはある。
しかし、Windowsの経験者にはPATHの概念さえ聞いたことも何ができるかも
わからない筈だ。
0758名無しさん@お腹いっぱい。
2012/08/31(金) 09:47:52.570759名無しさん@お腹いっぱい。
2012/08/31(金) 12:48:53.440760名無しさん@お腹いっぱい。
2012/08/31(金) 12:50:56.18馬鹿は無理に答えなくていいよw
0761名無しさん@お腹いっぱい。
2012/08/31(金) 13:04:38.23どっか間違ってました?
0762名無しさん@お腹いっぱい。
2012/08/31(金) 13:07:21.17.を含めちゃいかんだろ、と。
0763名無しさん@お腹いっぱい。
2012/08/31(金) 13:08:11.26勉強不足を人のせいにされてもなぁ。
0764名無しさん@お腹いっぱい。
2012/08/31(金) 13:21:45.38ああコロンでしたかすいません
前読んだ本にはlsっていうウイルスがカレントディレクトリにあったときに備えて.は置かない方がいいって書いてたけどPATHの後ろに書いとけば大丈夫かと
あとWindowsにもPATH変数はあるけどコントロールパネル->システム->どっかのタブ->環境変数って辿らないと設定するとこまでたどりつけなくてしかも再起動しないと反映されないありさまだったような
0765名無しさん@お腹いっぱい。
2012/08/31(金) 14:24:17.000766名無しさん@お腹いっぱい。
2012/08/31(金) 15:34:17.51かなりカッコ悪い。
0767名無しさん@お腹いっぱい。
2012/08/31(金) 15:39:47.48あれってbashのことなんだろうか。
0768名無しさん@お腹いっぱい。
2012/08/31(金) 16:03:33.420769名無しさん@お腹いっぱい。
2012/08/31(金) 23:12:05.50大丈夫じゃねーよ、バカ。
0770名無しさん@お腹いっぱい。
2012/09/01(土) 02:21:32.430771名無しさん@お腹いっぱい。
2012/09/01(土) 09:17:52.290772名無しさん@お腹いっぱい。
2012/09/01(土) 09:27:17.810773名無しさん@お腹いっぱい。
2012/09/01(土) 09:31:57.030774名無しさん@お腹いっぱい。
2012/09/01(土) 14:01:09.120775名無しさん@お腹いっぱい。
2012/09/02(日) 04:13:15.79bash=バッシュ
csh=シーシェル
d-shell=ディーシェル
sh=ビーシェル
tcsh=ティーシーシェル
zsh=ゼットシェル
バッシュだけアホみたい。
0776名無しさん@お腹いっぱい。
2012/09/02(日) 09:58:21.310777名無しさん@お腹いっぱい。
2012/09/02(日) 10:08:27.84「z」は、
イギリス発音なら「ゼッ『ド』」
アメリカ発音なら「ズィー」
どこにも「ゼット」なんて発音はない。
中学英語からやり直しだなw
0778名無しさん@お腹いっぱい。
2012/09/02(日) 15:38:49.680779名無しさん@お腹いっぱい。
2012/09/02(日) 16:01:49.22俺も z はズィーと習ったけどさ、
zsh をズィーシェルと読むヤツには会った事無い。
0780名無しさん@お腹いっぱい。
2012/09/02(日) 17:01:28.910781名無しさん@お腹いっぱい。
2012/09/02(日) 17:05:15.94鉄腕
0782名無しさん@お腹いっぱい。
2012/09/02(日) 17:34:15.94ググるとそっちばっかりヒットするよなw
0783名無しさん@お腹いっぱい。
2012/09/03(月) 00:53:44.84[zed-?el]が[?]に接続して、無声化して[zet-?el]
0784名無しさん@お腹いっぱい。
2012/09/03(月) 11:20:15.540785名無しさん@お腹いっぱい。
2012/09/03(月) 11:35:09.440786名無しさん@お腹いっぱい。
2012/09/05(水) 02:43:38.450787名無しさん@お腹いっぱい。
2012/09/05(水) 07:54:36.010788名無しさん@お腹いっぱい。
2012/09/07(金) 00:21:56.750789名無しさん@お腹いっぱい。
2012/09/08(土) 13:09:33.30ゼットシェル
日本人なんだからZの読み方にこだわる必要なし
0790名無しさん@お腹いっぱい。
2012/09/08(土) 15:23:53.340791名無しさん@お腹いっぱい。
2012/09/09(日) 11:41:33.370792名無しさん@お腹いっぱい。
2012/09/09(日) 13:14:38.930793名無しさん@お腹いっぱい。
2012/09/09(日) 13:22:46.94このマシンにbashを入れたいのですが、UNIX-OS用のbashバイナリが
入手できるところをご存知の方いらっしゃいましたら、入手先を教えて下さい。
ソースからコンパイルするのは、私があまりUNIX-OSに詳しくないので、あまり気が
進まないのですが、もしもコンパイルするしかないのでしたら、ソース入手先を
教えて頂けないでしょうか。
また、コンパイルしか手段が無いとしたら、UNIX-OSでは、bashのバージョンいくつまで
対応可能でしょうか。
0794名無しさん@お腹いっぱい。
2012/09/09(日) 13:35:34.280795名無しさん@お腹いっぱい。
2012/09/09(日) 14:25:33.64ケーブル買ってやっと居間のテレビにつないだんですけど、
電源を入れるとオペラシステム、ナンバーTが見つかった、
みたいなシェル画面が出て先に進みません。2台ともそうです。
この後どういうシェルコマンドを打てばいいのでしょうか?
0796名無しさん@お腹いっぱい。
2012/09/09(日) 17:39:59.21http://www.shell.co.jp/
0797名無しさん@お腹いっぱい。
2012/09/09(日) 18:20:22.560798名無しさん@お腹いっぱい。
2012/09/09(日) 18:42:25.390799名無しさん@お腹いっぱい。
2012/09/11(火) 12:23:14.320800名無しさん@お腹いっぱい。
2012/09/13(木) 01:14:45.24あるファイルをmakeするのが面倒なので自動化させたいです。
させたい処理はcd変更→makeの2点だけです。
ですが、うまくいきません。(シェルが一瞬立ち上がってそのまま終了します)
シェルにどういう引数を与えて起動させればいいでしょうか。
0801名無しさん@お腹いっぱい。
2012/09/13(木) 01:23:56.910802名無しさん@お腹いっぱい。
2012/09/13(木) 01:31:25.80どういうことでしょうか?
bash make -C directoryでしょうか?
えーと、makeは-fオプションで行いたいので、bash make -f directoryですか?
0803名無しさん@お腹いっぱい。
2012/09/13(木) 01:35:05.89あ、いや、つまり-Cでcd変更を兼ねるわけですね。理解しました
それで、その前にシェルを起動させなければいけないのですが、シェル起動→make -C directoryまでを
一連の動作として行うにはどうすればいいでしょう亜k?
0804名無しさん@お腹いっぱい。
2012/09/13(木) 02:03:13.41シェル起動とかいう独自用語使ってるとアドバイス来ないよ。
「何をしたら何が起きてほしい」と「目的」が重要。
0805名無しさん@お腹いっぱい。
2012/09/13(木) 02:32:36.620806名無しさん@お腹いっぱい。
2012/09/13(木) 02:35:29.220807名無しさん@お腹いっぱい。
2012/09/13(木) 02:40:38.930808名無しさん@お腹いっぱい。
2012/09/13(木) 06:26:57.770809名無しさん@お腹いっぱい。
2012/09/13(木) 06:38:48.750810名無しさん@お腹いっぱい。
2012/09/13(木) 07:40:19.710811名無しさん@お腹いっぱい。
2012/09/13(木) 07:52:00.730812名無しさん@お腹いっぱい。
2012/09/13(木) 08:36:35.52端末エミュレータ起動のことだろうとエスパー。
あるいはcygwin環境なのかも試練。
が、そういう低レベルの質問はお断りなので、
次の方どうぞ
↓
0813名無しさん@お腹いっぱい。
2012/09/13(木) 08:40:27.04デスクトップと端末エミュレータとshとbashとシェルスクリプトとオプション引数とmakeとmakefileとcdとカレントディレクトリと手段と目的がごっちゃになってる。
整理して出直せ。
0814名無しさん@お腹いっぱい。
2012/09/13(木) 10:11:28.58xtermでFreeBSDのコマンドが実行できません。FreeBSDは対応してないんでしょうか?
関係あるかどうかわかりませんが、ホストOSはLinuxです。
0815名無しさん@お腹いっぱい。
2012/09/13(木) 10:21:58.22次の方どうぞ
0816名無しさん@お腹いっぱい。
2012/09/13(木) 21:30:04.47FreeBSDもLinuxもUNIXじゃありません。
0817名無しさん@お腹いっぱい。
2012/09/13(木) 21:34:21.69この板にfreeBSDスレ立ってますがイタチと言われません
→freeBSDはUNIX
UNIX系OS用ソフトの大半はLinuxで動きますしディレクトリ構造が同じです
→LinuxはUNIXライク
0818名無しさん@お腹いっぱい。
2012/09/13(木) 21:51:52.27freeBSDなんていうあなたが発明したシステムが
UNIXかどうかは、ほかの人にはわかりません。
0819名無しさん@お腹いっぱい。
2012/09/13(木) 22:11:31.870820名無しさん@お腹いっぱい。
2012/09/13(木) 22:18:29.90でも飲んだか飲んでないか、すぐ忘れちゃうんです。
0821名無しさん@お腹いっぱい。
2012/09/13(木) 23:02:26.980822名無しさん@お腹いっぱい。
2012/09/13(木) 23:28:44.84っつーかある意味、マジな話、一日一度、cronやatを使えず、どうしても手動で
動かさなければならない手順を、結構いつも忘れてしまう…
0823名無しさん@お腹いっぱい。
2012/09/13(木) 23:29:59.390824名無しさん@お腹いっぱい。
2012/09/13(木) 23:40:27.06USBメモリにコピって、テストマシンにアップロードして、集計して、そんで最終的に
得られたデータを所定のExcelのシートに記入して、その結果出てきた情報を
ログに書き込んでスクリプトを実行する、みたいな作業だ
昔は派遣の人にお願いしてたんだが、コストカットで人が減っちまった
自動化できるんならしたいわマジ
0825名無しさん@お腹いっぱい。
2012/09/13(木) 23:41:01.52むしろ、sleep 86400 を条件にすりゃいんじゃねとかの、誘い水かね?
0826名無しさん@お腹いっぱい。
2012/09/13(木) 23:44:38.84それだとkillall sleepされたときに一緒に終了されちゃうじゃん。
0827名無しさん@お腹いっぱい。
2012/09/13(木) 23:48:41.090828名無しさん@お腹いっぱい。
2012/09/13(木) 23:53:12.25while sleep 86400; do ./hoge; done
だと、最初の実行まで24時間待たされる。
敢えてsleepを条件に入れたいなら、
while ./hoge; sleep 86400; do :; done
だな。
でもこれだと結局 :コマンドが要るから、素直に
while :; do sleep 86400; ./hoge; done
かな。
0829名無しさん@お腹いっぱい。
2012/09/13(木) 23:55:28.620830名無しさん@お腹いっぱい。
2012/09/14(金) 10:42:32.570831名無しさん@お腹いっぱい。
2012/09/14(金) 11:03:37.390832名無しさん@お腹いっぱい。
2012/09/14(金) 11:04:58.510833名無しさん@お腹いっぱい。
2012/09/14(金) 12:35:38.76っていうか、なんで出来ないの?
Excelのシートに記入するところは苦戦しそうだけど。
0834名無しさん@お腹いっぱい。
2012/09/14(金) 16:45:58.07寧ろUSBメモリ移動が鬼門。
0835名無しさん@お腹いっぱい。
2012/09/15(土) 13:19:37.17egrep "\t" *.txt
だと、tを検索してしまいます。
0836名無しさん@お腹いっぱい。
2012/09/15(土) 13:22:50.87こっちもやり方がよくわかりません。
ついでに教えてください。
0837名無しさん@お腹いっぱい。
2012/09/15(土) 13:32:23.770838名無しさん@お腹いっぱい。
2012/09/15(土) 13:38:45.62対話環境での話ならCTRL-Vあたりがクォート機能に割り当てられている
シェルなら
$ grep '[CTRL-V][TAB]' *.txt
スクリプトの中ならエディタでTABコード書けるだろ。
0839名無しさん@お腹いっぱい。
2012/09/15(土) 13:44:39.15(じゃあMakefileは? というのは無しで)
0840名無しさん@お腹いっぱい。
2012/09/15(土) 15:06:46.92http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbAS
grep $'\t' *.txt
0841名無しさん@お腹いっぱい。
2012/09/15(土) 21:55:57.05grepでというのには反則だけど
perl -ne 'print if /\t/'
0842名無しさん@お腹いっぱい。
2012/09/15(土) 21:59:20.76grep -P なら許す
0843名無しさん@お腹いっぱい。
2012/09/15(土) 23:49:50.180844名無しさん@お腹いっぱい。
2012/09/16(日) 09:58:27.49rsync以外で効率のいいやり方を教えて下さい。
diff -rqやfind | sort | diffでは遅すぎるのでもっといいやり方は無いでしょうか。
0845名無しさん@お腹いっぱい。
2012/09/16(日) 10:10:52.16diff <(ls -aR /dir1) <(ls -aR /dir2)
■ このスレッドは過去ログ倉庫に格納されています