シェルスクリプト総合 その14
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
2009/01/29(木) 06:54:48スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合は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 でトレースしましょう。
前スレ落ちたみたいなのでリンク省略。
0002名無しさん@お腹いっぱい。
2009/01/29(木) 06:55:25sed
http://pc11.2ch.net/test/read.cgi/unix/1085730992/
正規表現
http://pc11.2ch.net/test/read.cgi/unix/1039165754/
おまえら! shell は何を使っているんですか?
http://pc11.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc11.2ch.net/test/read.cgi/unix/1102921590/
□初心者向けリンク
「誰にでも」シリーズ
ttp://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/dareUni/
/bin/shプログラミング入門
ttp://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/
シェルを使おう - 導入からプログラミングまで -
ttp://www.netfort.gr.jp/~tomokuni/lms/shell/text/
□入門者向け書籍:
プロフェショナルシェルプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756116329/
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
http://www.amazon.co.jp/exec/obidos/ASIN/4797321946/
UNIXシェルプログラミング徹底解説
http://www.amazon.co.jp/exec/obidos/ASIN/4822280489/
入門Kornシェル
http://www.amazon.co.jp/exec/obidos/ASIN/4873110149/
入門bash
http://www.amazon.co.jp/exec/obidos/ASIN/4900900788/
0003名無しさん@お腹いっぱい。
2009/01/29(木) 06:56:21UNIXの部屋 (沢山のコマンドの簡単な紹介など)
http://x68000.q-e-d.net/~68user/unix/
POSIX: Shell & Utilities (標準規格)
http://www.opengroup.org/onlinepubs/009695399/utilities/contents.html
□最近のシェルスクリプト本(1)
(2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著)
http://amazon.co.jp/o/ASIN/4797326522/
(2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著)
http://amazon.co.jp/o/ASIN/4798008842/
(2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著)
http://amazon.co.jp/o/ASIN/4822282090/
(2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著)
http://amazon.co.jp/o/ASIN/4797327286/
(2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著)
http://amazon.co.jp/o/ASIN/4774122610/
(2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著)
http://amazon.co.jp/o/ASIN/4872802349/
(2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著)
http://amazon.co.jp/o/ASIN/4797330635/
(2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著)
http://amazon.co.jp/o/ASIN/4774123625/
0004名無しさん@お腹いっぱい。
2009/01/29(木) 06:57:24(2005/07) UNIX シェルスクリプト辞典 川井 義治 (著)
http://amazon.co.jp/o/ASIN/4798109231/
(2005/08) シェルスクリプト ポケットリファレンス bash編 宮原 徹 (著), 川原 龍人 (著)
http://www.amazon.co.jp/o/ASIN/4774124818/
(2005/12) 図解でわかるLinuxシェルスクリプト・正規表現 小泉 修 (著)
http://www.amazon.co.jp/o/ASIN/4534040067/
(2006/01)詳解 シェルスクリプト アーノルド ロビンス (著), ネルソン・H.F. ベーブ(著), Arnold Robbins (原著), Nelson H.F. Beebe (原著), 日向 あおい (翻訳)
http://www.amazon.co.jp/o/ASIN/4873112672/
(2007/3) Linuxシェルスクリプトユーザー便利帳―bash2/bash3対応 伊藤 幸夫 (著), 寒川 陽美(著)
http://www.amazon.co.jp/o/ASIN/4798015954/
(2007/9) ゲームで極める シェルスクリプトスーパーテクニック 山森 丈範
http://www.amazon.co.jp/o/ASIN/4774132020/
(2007/10) UNIX/Linuxシェルスクリプトマスタリングハンドブック 野川 准子
http://www.amazon.co.jp/o/ASIN/4798017957/
0005名無しさん@お腹いっぱい。
2009/01/29(木) 06:58:02FreeBSD Hypertext Man Pages
http://www.freebsd.org/cgi/man.cgi
Linux JF (Japanese FAQ) Project.
http://www.linux.or.jp/JF/
Unix Programming Frequently Asked Questions 日本語訳
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html
UNIXプログラミング環境
http://www.amazon.co.jp/exec/obidos/ASIN/4871483517/
□人間初心者へのお願い:
・このスレはシェルスクリプトについてのスレです。
シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
使い方の質問などはスレ違いなので無用に願います。
□シェルスクリプトでよく使うコマンド:
制御・条件判定系: [,test,expr,true,false,yes,getopts
テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join
ファイル検索系: find
(スペースなどを含むファイル名を正しく処理するため、
findは -exec command {} + を推奨。
他に -print0、xargsは -0オプションという方法もあるがSolaris非対応)
ディレクトリ系: basename,dirname
出力系: echo,printf
対話コマンド制御系: expect
http/ftpの処理自動化: wget,curl
0006名無しさん@お腹いっぱい。
2009/01/29(木) 07:56:090007名無しさん@お腹いっぱい。
2009/01/29(木) 08:11:03シェルスクリプト総合 その13
http://pc11.2ch.net/test/read.cgi/unix/1224085718/
0008名無しさん@お腹いっぱい。
2009/01/29(木) 12:03:55freeコマンド相当のシェルを作りたいと思っています。
具体的にはどう書けばいいですか?
できれば、bashに依存せず、汎用シェルになるようにお願いします。
0009名無しさん@お腹いっぱい。
2009/01/29(木) 12:48:300010名無しさん@お腹いっぱい。
2009/01/29(木) 12:53:430011名無しさん@お腹いっぱい。
2009/01/29(木) 18:16:43busyboxというシェルが組み込みのfreeコマンドを持っています。
0012名無しさん@お腹いっぱい。
2009/01/29(木) 18:19:55そのbosyboxとかいうシェルを具体的に書いて下さい。
1行目は
#!/bin/shでお願いします。
2行目以降は?
0013名無しさん@お腹いっぱい。
2009/01/29(木) 18:43:090014名無しさん@お腹いっぱい。
2009/01/29(木) 18:44:53#!/bin/sh
busybox free
0015名無しさん@お腹いっぱい。
2009/01/29(木) 18:49:36#!/bin/sh
busybox free $*
0016名無しさん@お腹いっぱい。
2009/01/29(木) 18:52:52えっと、何か勘違いされてますか?
シェル名はなんでもいいんですが、bosyboxとして
$ cat bosybox
#!/bin/sh
この行をお願いします
この行をお願いします
この行をお願いします
:
$ ./bosybox
…実行結果…
ということですが、、
0017名無しさん@お腹いっぱい。
2009/01/29(木) 19:01:290018名無しさん@お腹いっぱい。
2009/01/29(木) 19:08:49なないかかんちがいてまちぇんでちゅか?
0019名無しさん@お腹いっぱい。
2009/01/29(木) 19:08:49$ cat busybox
#!/bin/sh
/bin/busybox $*
$./busybox free
...
0020名無しさん@お腹いっぱい。
2009/01/29(木) 19:16:00/bin/busybox というのはbash依存、またはOS依存だと思います。
どのOSにもあるコマンドだけを組み合わせてfree相当のシェルを作って下さい。
0021名無しさん@お腹いっぱい。
2009/01/29(木) 19:17:55busyboxはbash依存でもなければOS依存でもありません。
freeが組み込まれたシェルです。
0022名無しさん@お腹いっぱい。
2009/01/29(木) 19:21:59busybox内部の freeコマンドは、引数に対応してない。
あと、引数を渡すにしても $* で渡してはいけない。
(シェルスクリプトのコーディングルールとして)
よって失格。
0023名無しさん@お腹いっぱい。
2009/01/29(木) 19:24:23そうなのか。フォローthx
0024名無しさん@お腹いっぱい。
2009/01/29(木) 19:25:16無理
0025名無しさん@お腹いっぱい。
2009/01/30(金) 07:27:08一緒だったら次のAというコマンドを、違ったらBというコマンドを実行するには
どう書いたらいいですか?
0026名無しさん@お腹いっぱい。
2009/01/30(金) 07:35:41if diff hoge.txt boke.txt > /dev/null
then
commandA
else
commandB
fi
0027名無しさん@お腹いっぱい。
2009/01/30(金) 07:42:040028名無しさん@お腹いっぱい。
2009/01/30(金) 07:45:05>>25 「diffコマンドで」
0029名無しさん@お腹いっぱい。
2009/01/30(金) 07:50:34diff文が使えるようなシェルってあるんですか?
うちのシェルはif文は if [ ... ] みたいに書く普通のシェルです。
普通のシェルでお願いします。
0030名無しさん@お腹いっぱい。
2009/01/30(金) 07:53:550031名無しさん@お腹いっぱい。
2009/01/30(金) 07:58:05comA
else
comB
fi
だろ?
0032名無しさん@お腹いっぱい。
2009/01/30(金) 10:12:430033名無しさん@お腹いっぱい。
2009/01/30(金) 10:58:24その [ ... ] が何を示すのか勉強しなおしてこい
0034名無しさん@お腹いっぱい。
2009/01/30(金) 16:59:25条件文を表してるのは知ってますよ
0035名無しさん@お腹いっぱい。
2009/01/30(金) 19:21:23[ ... ]っつー見かけに惑わされちゃいかん
0036名無しさん@お腹いっぱい。
2009/01/30(金) 22:19:18[: shell built-in command
/bin/[
0037名無しさん@お腹いっぱい。
2009/01/30(金) 22:32:562つのコマンド、commandA と commandB の標準出力同士を、
テンポラリファイルを作らずに diffコマンドで比較したい時、
bashなら、
diff <(commandA) <(commandB)
でできますが、
これを標準シェルでやるにはどうすればいいですか?
0038名無しさん@お腹いっぱい。
2009/01/30(金) 22:41:36commandA | (commandB | diff /dev/fd/3 -) 3<&0
0039名無しさん@お腹いっぱい。
2009/01/30(金) 22:42:34無理。
bash使うか、一旦ファイルに落せ。
0040名無しさん@お腹いっぱい。
2009/01/30(金) 22:47:410041名無しさん@お腹いっぱい。
2009/01/30(金) 22:57:08おおでけた。THX!
0042名無しさん@お腹いっぱい。
2009/01/30(金) 23:32:55その昔は、 /bin/[ なんてのが有ったんだがなぁ。
0043名無しさん@お腹いっぱい。
2009/01/30(金) 23:34:28今でもあるだろ
0044名無しさん@お腹いっぱい。
2009/01/30(金) 23:38:21今でもあるだろw
$ which '['
/usr/bin/[
0045名無しさん@お腹いっぱい。
2009/01/30(金) 23:50:580046名無しさん@お腹いっぱい。
2009/01/30(金) 23:52:10すまん、BSD育ちなんだw
0047名無しさん@お腹いっぱい。
2009/01/30(金) 23:59:24cshはaliasとかがあるせいでwhichを内部コマンドに持った。
0048名無しさん@お腹いっぱい。
2009/01/31(土) 07:29:55/dev/fd/3 って純正シェルでも使えるの??
0049名無しさん@お腹いっぱい。
2009/01/31(土) 13:15:290050名無しさん@お腹いっぱい。
2009/01/31(土) 13:41:51なんでもいいから、結局使えるの??
0051名無しさん@お腹いっぱい。
2009/01/31(土) 13:58:320052名無しさん@お腹いっぱい。
2009/01/31(土) 19:54:54いくらなんでもそんな質問しないもんね?
0053名無しさん@お腹いっぱい。
2009/01/31(土) 20:15:42あり得る。
例えば、bashだと、/dev/stdout とかは、実際の /dev/stdoutを読まずに
シェルが /dev/stdoutという文字列を特別扱いして動作する。
そのことを考慮すれば、/dev/fd/n がシェルに依存しているかも知れないと
考えることにも一定の合理性が認められる。
0054名無しさん@お腹いっぱい。
2009/01/31(土) 20:59:540055名無しさん@お腹いっぱい。
2009/02/01(日) 00:46:460056名無しさん@お腹いっぱい。
2009/02/01(日) 02:18:13面白い人が増えたなw
0057名無しさん@お腹いっぱい。
2009/02/01(日) 08:04:35/dev/fd/3 がシェルに依存してるのは本当だよ。
0058名無しさん@お腹いっぱい。
2009/02/01(日) 08:23:14man bash | less -p /dev/fd/fd
man zshmisc | less -p /dev/fd/n
if file is of the form `/dev/fd/n',
where n is an integer, then the test applied to the open file whose
descriptor number is n, even if the underlying system does not support
the /dev/fd directory.
> even if the underlying system does not support the /dev/fd directory
> even if the underlying system does not support the /dev/fd directory
> even if the underlying system does not support the /dev/fd directory
> even if the underlying system does not support the /dev/fd directory
0059名無しさん@お腹いっぱい。
2009/02/01(日) 22:53:380060名無しさん@お腹いっぱい。
2009/02/02(月) 04:47:50させるにはどのようにしたらいいですか?
0061名無しさん@お腹いっぱい。
2009/02/02(月) 06:25:59read
0062名無しさん@お腹いっぱい。
2009/02/02(月) 10:24:22bashの場合は read -n 1 の方がよりpauseの動作に近いかと
0063名無しさん@お腹いっぱい。
2009/02/02(月) 22:25:23質問欲嫁。それはpauseの動作。>>60 の質問はpuaseの動作。
0064名無しさん@お腹いっぱい。
2009/02/03(火) 00:09:20どう処理すればよいのでしょうか?
応答に対して入力する値(番号など)決まっているという前提でお願いします
0065名無しさん@お腹いっぱい。
2009/02/03(火) 00:12:580066名無しさん@お腹いっぱい。
2009/02/03(火) 00:25:53$ app
〜
$ exit
$ ttyplay x
006760
2009/02/03(火) 02:44:31>>61-62
read -n 1が良さそうなのでこれを使ってみます
>>63
すみません。タイプミスですorz
正しくは「pause」です
0068名無しさん@お腹いっぱい。
2009/02/03(火) 09:03:27expect
0069名無しさん@お腹いっぱい。
2009/02/03(火) 15:36:110070名無しさん@お腹いっぱい。
2009/02/05(木) 00:30:200071名無しさん@お腹いっぱい。
2009/02/05(木) 00:35:26conquerer -bj --creeping-deth
0072名無しさん@お腹いっぱい。
2009/02/05(木) 06:38:09多次元配列という意味なら、使えない。
0073名無しさん@お腹いっぱい。
2009/02/05(木) 18:40:06起動コストは抜きにして
とりあえずディレクトリーをたぐりながら正規表現での文字列探索みたいなジャンルで
好みでもかまわないので意見がききたいです。
0074名無しさん@お腹いっぱい。
2009/02/05(木) 18:52:19実際にやってみればいいじゃん。
まあシェルスクリプトは速度を求めるものじゃないけどね。
0075名無しさん@お腹いっぱい。
2009/02/05(木) 18:53:41速い順に、
sh > perl > bash > python
で、大体合ってる
0076名無しさん@お腹いっぱい。
2009/02/05(木) 19:03:08perl, python > sh, bash だろ。JK
0077名無しさん@お腹いっぱい。
2009/02/05(木) 20:23:440078名無しさん@お腹いっぱい。
2009/02/06(金) 12:09:09http://www.commandlinefu.com/commands/browse
0079名無しさん@お腹いっぱい。
2009/02/06(金) 12:18:340080名無しさん@お腹いっぱい。
2009/02/06(金) 12:19:50護符とかの。
0081名無しさん@お腹いっぱい。
2009/02/06(金) 12:51:06なお、Script-Fuの名はカンフー(Kung-fu)からきている。
0082名無しさん@お腹いっぱい。
2009/02/06(金) 15:28:51偉丈夫、気丈夫、大丈夫
0083名無しさん@お腹いっぱい。
2009/02/06(金) 15:34:190084名無しさん@お腹いっぱい。
2009/02/06(金) 15:57:59起動コスト安くなりませんか?めんどいけど
Tclってきるつもりだったけれどある程度の機能がセットになっているのならば
選択肢なのかなぁ。
でも要するにざっくりとみたら対さないんだったら素直にperl使うのが楽なんですかね、
0085名無しさん@お腹いっぱい。
2009/02/06(金) 16:11:31いつの人ですか?
ここ3年くらい使ったことないよ!
0086名無しさん@お腹いっぱい。
2009/02/06(金) 17:36:190087名無しさん@お腹いっぱい。
2009/02/06(金) 23:17:30これってhogeの内容がechoに渡されると思うんだけど、
なんで何も表示されないんですか?
0088名無しさん@お腹いっぱい。
2009/02/06(金) 23:30:300089名無しさん@お腹いっぱい。
2009/02/06(金) 23:45:25了解しました
[ana@coppola ~]$ echo <(ls)
/proc/self/fd/63
ではこうなるのはいったいなぜですか?
というか、
/proc/self/fd/63
って?
0090名無しさん@お腹いっぱい。
2009/02/07(土) 00:16:57<(command)はprocess substitutionというbashの特殊な記法でファイルディスクリプタ
ファイル(/dev/fd/#)名に置換されます。
0091名無しさん@お腹いっぱい。
2009/02/07(土) 00:43:49曖昧さがあるので|記法に変った。
0092ミジンコ未満
2009/02/07(土) 01:17:25コマンドを実行する。なんてことをするにはどうすればいいですか
0093名無しさん@お腹いっぱい。
2009/02/07(土) 01:32:22http://www.linux.or.jp/JF/JFdocs/SCSI-2.4-HOWTO/sr.html
0094名無しさん@お腹いっぱい。
2009/02/07(土) 11:06:58head -c 1 /dev/cdrom > /dev/null 2>&1 && command
>>93
そのリンク見ても、メディアが挿入されてるかどうかの判定はできないよ。
0095名無しさん@お腹いっぱい。
2009/02/08(日) 00:47:14暗号化zipを別のフォルダに分けるっていう事、どうやればいいでしょうか
0096名無しさん@お腹いっぱい。
2009/02/08(日) 00:49:330098名無しさん@お腹いっぱい。
2009/02/08(日) 02:15:27現状では、2つのディレクトリ内のファイルは同期が取れていますが、たまに異なる更新日時のファイルが出来ます。
その同期の取れていないファイルはできれば抜き出したいです。
ファイルは全部で5000件くらいあります。
1.ls -ltでディレクトリ内一覧情報を出してファイルに出力
2.出したファイルから不要な情報を削除(ユーザー名とか)して時間とファイル名だけにしぼる
3.上の1と2を両ディレクトリで行う
4.diffでファイル同士比較
5.偏った情報を出力
これをシェルでやらせようと思ってますが、どうも効率を悪い気がします。
0099名無しさん@お腹いっぱい。
2009/02/08(日) 03:18:26ところどころ日本語も意味不明
更新日時の比較なら、ls -lt の結果を比較すればいいし
ファイル内容の比較をしたいのなら、diff や dircmp で
ディレクトリを指定すればいい
0101名無しさん@お腹いっぱい。
2009/02/08(日) 07:23:22なぜ同期ツールを始めから使わないのか?
e.g. rsync等
0102名無しさん@お腹いっぱい。
2009/02/08(日) 16:13:21readlink相当のことをシェルでやるには、
どうやるのが定番ですか?
シンボリックリンクの中にはスペースや特殊記号等、
すべてアリの状態でお願いします。
0103名無しさん@お腹いっぱい。
2009/02/08(日) 16:17:180104名無しさん@お腹いっぱい。
2009/02/08(日) 16:26:430105名無しさん@お腹いっぱい。
2009/02/08(日) 16:57:46> シンボリックリンクの中にはスペースや特殊記号等、
> すべてアリの状態でお願いします。
0106名無しさん@お腹いっぱい。
2009/02/08(日) 17:05:41$ ln -s 'hoge -> hage' 'boke -> kasu'
$ ls -l
lrwxrwxrwx 1 guest guest 12 Feb 8 17:05 boke -> kasu -> hoge -> hage
こういう状態で、どうやって判定するのかね?
0107名無しさん@お腹いっぱい。
2009/02/08(日) 18:26:11perl -e "print readlink ファイル名;"
でどう?
perl はたいてい入ってるし
0108名無しさん@お腹いっぱい。
2009/02/08(日) 22:41:27lrwxrwxrwx
一文字目の l はどういう意味?
0109名無しさん@お腹いっぱい。
2009/02/08(日) 22:45:41お前、>>105 が言わんとしてることをわかってない
boke -> kasu -> hoge -> hage
↑
この部分を見て、どこがシンボリックリンクの中身か判読できないだろw
0110名無しさん@お腹いっぱい。
2009/02/08(日) 22:50:11>>106 を良く読め、
ls -lの結果が、 boke -> kasu -> hoge -> hage となった場合、
「hage」を指している 「boke -> kasu -> hoge」と言うsymlinkかも知れないし、
「hoge -> hage」と言うファイルを指している 「boke -> kasu」と言うsymlinkかも知れないし、
「kasu -> hoge -> hage」と言うファイルを指している 「boke」と言うsymlinkかも知れない、
ということだな。
0111名無しさん@お腹いっぱい。
2009/02/08(日) 23:26:170112名無しさん@お腹いっぱい。
2009/02/09(月) 00:30:15(
echo a
echo b
)
これと
#!/bin/sh
{
echo a
echo b
}
これってなんか違いあります?
0113名無しさん@お腹いっぱい。
2009/02/09(月) 04:42:060114名無しさん@お腹いっぱい。
2009/02/09(月) 06:32:24実際にはシェル内部で最適化されるから、
( ) を使ってもプロセスは起動されない。
>>112
これだけだと違いは起きない。
( ) や { } 以外の他の部分の記述によっては違いが出ることもあるというだけ。
0115名無しさん@お腹いっぱい。
2009/02/09(月) 23:28:32ls -l と ls -lF の結果を比較すればできそうだから、あとはまかせた。
0116名無しさん@お腹いっぱい。
2009/02/10(火) 04:06:300117名無しさん@お腹いっぱい。
2009/02/10(火) 06:44:56>>102
「readlinkコマンドがないOSで、」
最近、質問をちゃんと読まない人多いね
0118名無しさん@お腹いっぱい。
2009/02/10(火) 09:48:36>>102はreadlink相当のことをビルトインコマンドとして持っているシェルを
探しているんだぞ。
>>102
> readlink相当のことをシェルでやるには、
0119名無しさん@お腹いっぱい。
2009/02/10(火) 09:58:010120名無しさん@お腹いっぱい。
2009/02/10(火) 10:00:52readlinkがないOSにはstatもないと考えるのが妥当。
あと、stat -f というオプションはFreeBSD方言だから気を付けろ。
0121名無しさん@お腹いっぱい。
2009/02/10(火) 11:04:50$ stat --printf "%n\n" /vmlinuz
/vmlinuz
$ stat --printf "%N\n" /vmlinuz
`/vmlinuz' -> `boot/vmlinuz-2.6.27-11-generic'
->とかquoteとかいらねーよ
0122名無しさん@お腹いっぱい。
2009/02/10(火) 13:20:19マリー アントワネットにマジレスする不粋
0123名無しさん@お腹いっぱい。
2009/02/10(火) 15:07:27おれには>>119 がマジで stat -f %Y が他のOSでも使えると思い込んでるように見えるが、
0124名無しさん@お腹いっぱい。
2009/02/10(火) 15:15:420125名無しさん@お腹いっぱい。
2009/02/10(火) 15:46:31しゅぎょーが足らないな
0126名無しさん@お腹いっぱい。
2009/02/10(火) 16:08:23言い訳見苦しい。本当に知らなかったんだねw
0127名無しさん@お腹いっぱい。
2009/02/10(火) 16:12:10ファイル名がわかってるなら、ls -l を解析できるんじゃないか?
lrwxrwxrwx 1 guest guest 12 Feb 8 17:05 boke -> kasu -> hoge -> hage
ファイル名が boke ならば 'kasu -> hoge -> hage'
ファイル名が 'boke -> kasu' ならば、 'hoge -> hage'
が取り出せればいいんじゃないの?
0128名無しさん@お腹いっぱい。
2009/02/10(火) 21:01:33たとえば、lsって打ちますよね、
で、hoge1 hoge2 とか表示されます。
そのあと、rm hoge1 ってやっても、
上の ls のところのシェルには hoge1 が表示されたままになります。
もう一回 ls を売っても、下の画面に2重に出てきて、
上のシェルの ls が更新されません
0129名無しさん@お腹いっぱい。
2009/02/10(火) 21:17:200130名無しさん@お腹いっぱい。
2009/02/10(火) 21:18:01端末の画面上ということですね。
CUIの端末の元祖はテレタイプです。
これはキーボードとプリンタがくっついたものです。
プリンタで打ち出されたlsの結果がいつのまにか変化するようなことはありません。
画面に表示するようになった現在でも同じです。
0131名無しさん@お腹いっぱい。
2009/02/10(火) 21:30:20プリンターは繋いでいません。
プリーンターを繋げばリロードが治るんでしょうか?
良くわかりませんが??
0132名無しさん@お腹いっぱい。
2009/02/10(火) 21:37:26こういうのを購入して接続するとリロードが治るはずです。
どこで売ってるかは知らないので、がんばって探してください。
なければあきらめましょう。
0133名無しさん@お腹いっぱい。
2009/02/11(水) 00:05:140134名無しさん@お腹いっぱい。
2009/02/11(水) 09:36:33#!/bin/sh
echo 'b[9];main(int c,char**v){printf("%.*s?n",readlink(v[1],b,36),b);}'|gcc -xc - 2>/dev/null;./a.out "$1";rm a.out
0135名無しさん@お腹いっぱい。
2009/02/11(水) 09:37:180136名無しさん@お腹いっぱい。
2009/02/11(水) 10:46:40ソースにじかに "$1" を入れ込めばもっと短くなるだろ
echo 'b[9];main(){printf("%.*s\n",readlink("'"$1"'",b,36),b);}'|gcc -xc - 2>/dev/null;./a.out;rm a.out
0137名無しさん@お腹いっぱい。
2009/02/11(水) 13:06:27> 2>/dev/null
書き込めないcurrent directoryで、
/usr/bin/ld: cannot open output file a.out: Permission denied
すら見られませんが…
0138名無しさん@お腹いっぱい。
2009/02/12(木) 16:45:07b[9];main(int c,char**v){printf("%.*s\n",readlink(v[1],b,36),b);}
0139名無しさん@お腹いっぱい。
2009/02/14(土) 18:30:520140名無しさん@お腹いっぱい。
2009/02/14(土) 18:32:02uptime
0141名無しさん@お腹いっぱい。
2009/02/15(日) 01:04:500142名無しさん@お腹いっぱい。
2009/02/15(日) 02:12:42/proc/statのcpu行の最初の三つがCPUタイム
0143名無しさん@お腹いっぱい。
2009/02/15(日) 09:42:440144名無しさん@お腹いっぱい。
2009/02/15(日) 09:44:200145名無しさん@お腹いっぱい。
2009/02/15(日) 09:56:360146名無しさん@お腹いっぱい。
2009/02/15(日) 10:30:18すればいいですか?
phpで言えば
$hen01 = $_POST["読み込んだ文字"];
$fp = fopen('書き込み先.txt', 'a+');
flock($fp, LOCK_EX);
$return = fputs($fp,"$hen01\n");
flock($fp, LOCK_UN);
fclose($fp);
こんな感じで一旦あるテキストファイルの文字列を全部読み込んで、別のファイルに
追記書き込みの処理をしたいんです。
0147名無しさん@お腹いっぱい。
2009/02/15(日) 10:40:050148名無しさん@お腹いっぱい。
2009/02/15(日) 10:47:30なるほどcatを使うんですね、即レスありがとうございました。
0149名無しさん@お腹いっぱい。
2009/02/15(日) 11:00:110150名無しさん@お腹いっぱい。
2009/02/15(日) 11:12:06でも制限させたらさせたで面倒なんだよな。
仕事で使うんならいざしらず、遊びで使うんなら
少々飛ばそうが関係ないし。
0151名無しさん@お腹いっぱい。
2009/02/15(日) 11:18:560152名無しさん@お腹いっぱい。
2009/02/15(日) 11:23:28それだと、>>146 のphpでやってる flock の処理が出来てないと思うが。
同時にプロセス起動されたら出力がぐちゃぐちゃに混ざる。
0153名無しさん@お腹いっぱい。
2009/02/15(日) 11:30:38147でいいんじゃないの?
0154名無しさん@お腹いっぱい。
2009/02/15(日) 11:35:22ロックできなかった場合はflockのところでロック解除になるまで待たされる。
だから、ロックの処理はちゃんと行なわれている。
よって >>147 ではダメ。
0155名無しさん@お腹いっぱい。
2009/02/15(日) 11:43:02>phpは知らんが
知らないのに突っ込むと恥をかくという典型例ですな
0156名無しさん@お腹いっぱい。
2009/02/15(日) 11:50:000157名無しさん@お腹いっぱい。
2009/02/15(日) 12:01:31lockf(1)が無かったら作れ。
0158名無しさん@お腹いっぱい。
2009/02/15(日) 12:04:49flock(1)が存在するOS (Linux)なら、
flock out.txt cat in.txt >> out.txt
0159名無しさん@お腹いっぱい。
2009/02/15(日) 12:18:35>>157のスタイルの方が>>158のスタイルより、
ファイルロック以前に書き込まれる恐れがない。
0160名無しさん@お腹いっぱい。
2009/02/15(日) 12:21:59>>158が知っていたのかはわからない。
0161名無しさん@お腹いっぱい。
2009/02/15(日) 12:26:130162名無しさん@お腹いっぱい。
2009/02/15(日) 12:28:310163名無しさん@お腹いっぱい。
2009/02/15(日) 12:32:41いや、仕様とか品質とか関係なく無駄。
アペンドで先にオープンされるだけであって、
実際の書き込みはロック取得後に行なわれるから、
sh -c なしで全く問題ない。
0164名無しさん@お腹いっぱい。
2009/02/15(日) 12:35:16それだと、実行後に bbbが削除されるだろ(笑)
>>158
こっちは合格。
0165名無しさん@お腹いっぱい。
2009/02/15(日) 17:50:43する事は可能でしょうか?
1、a.txtの中に文字列「/var/log/maillog」が記述されている
2、シェルスクリプトを使って「/var/log/maillog」を記憶(変数にセット?)
3、b.txtに記憶した「/var/log/maillog」の文字列を追記したい
なおa.txtの内容は、
/var/log/maillogだったり/var/log/http_error_logだったりしますが、原則一行であり、
後ろの文字列は変わることはあっても先頭部分の/var/log/は不変です。
0166名無しさん@お腹いっぱい。
2009/02/15(日) 17:56:26一旦変数に記憶させたいという要求なのかな?
だとすると、
file=`cat a.txt`
echo "$file" >> b.txt
なお、変数に記憶させる必要がなければもちろん、
cat a.txt >> b.txt でよい。
0167名無しさん@お腹いっぱい。
2009/02/15(日) 19:20:20ありがとうございました、少し形を変えましたが思っていた事ができました。
こういう場合は``でくくるのですね。また一つ勉強になりました。
0168143
2009/02/15(日) 20:48:500169名無しさん@お腹いっぱい。
2009/02/15(日) 21:44:12>>144
0170名無しさん@お腹いっぱい。
2009/02/15(日) 23:20:16diagostini --autumn-leaves
0171名無しさん@お腹いっぱい。
2009/02/15(日) 23:42:59所詮、指してる先は i-node だから
ls -i 元ファイルのパス
じゃ、だめなのか
0172名無しさん@お腹いっぱい。
2009/02/15(日) 23:54:350173名無しさん@お腹いっぱい。
2009/02/16(月) 00:31:330174名無しさん@お腹いっぱい。
2009/02/16(月) 09:15:29ユーザー登録用にシェルスクリプトを書いて、手動で実行すると普通に通るんですが
cronで実行すれば通らないんです。
ユーザー登録用のuseradd.shの内容は以下になります。
while read LINE
do
USER=`echo $LINE | sed -e 's/:.*$//'`
useradd $USER
echo $LINE | chpasswd
done < /home/xxxx/public_html/user_add.txt
exit
登録すべきユーザーの読み込み元のuser_add.txtはuser:passの形式でして、
手動でuseradd.shを走らせると普通に登録してくれるんですが、cron経由だと
ウンともスンとも言わず・・・
ただ、試行錯誤の末に気づいたんですが、デーモン再読み込みをさせる.shのの書き方で
service named reloadと書いて、手動で.shを実行すればOK、このスクリプトを
cronから実行すればNGだったんですが、/etc/rc.d/init.d/named reloadに書き直して
みたらcronから実行でも通りました。
rootで実行させて、かつパーミも権限あります。cronログはこのようになりました。
Feb 16 09:02:01 xxx crond[10113]: (root) CMD (/root/useradd.sh)
又、他の単純な.shは手動でもcronでも動きますので多分、cronは適正だと思います。
となると、やはりuseradd.shの記述がおかしい可能性が高いと思いますので、間違いなど
あればご指導お願いします。
0175名無しさん@お腹いっぱい。
2009/02/16(月) 09:35:31して何が起ってるか調べろ
0176名無しさん@お腹いっぱい。
2009/02/16(月) 09:37:070177名無しさん@お腹いっぱい。
2009/02/16(月) 10:42:27ありがとうございます、>>176の仰るとおり$pathでした。
useraddを絶対パスに指定してやって/usr/sbin/useraddにすればOKでした。
0178名無しさん@お腹いっぱい。
2009/02/16(月) 16:28:19cronに書いてなかったっけ、$PASSの事。
0179名無しさん@お腹いっぱい。
2009/02/16(月) 16:37:590180名無しさん@お腹いっぱい。
2009/02/16(月) 16:43:40コマンドライン上での実行時のPATHその他の環境変数が
実行時と同じように引き継がれて実行されるし。
0181名無しさん@お腹いっぱい。
2009/02/16(月) 16:51:37確かに書いてなかった。
0182名無しさん@お腹いっぱい。
2009/02/17(火) 01:20:42bbb,222
ccc,333
みたいな、1対1のデータ定義のテーブルを作って、
これを1行ずつ
コマンド aaa 111
コマンド bbb 222
コマンド ccc 333
のように実行していきたいんですが、かっこよくかけなくてこんな感じになりました。
#!/bin/sh
list=" aaa,111 \
bbb,222 \
ccc,333 "
for n in $list
do
sono1=`echo $n | cut -d, -f1`
sono2=`echo $n | cut -d, -f2`
command $sono1 $sono2
done
特にcutがださいと思ってます。
美しい書き方教えてください
0183名無しさん@お腹いっぱい。
2009/02/17(火) 01:30:15command `echo $n | sed 's/,/ /'`
0184名無しさん@お腹いっぱい。
2009/02/17(火) 01:31:59do
IFS=,
echo $n | { read sono1 sono2 ; command $sono1 $sono2; }
done
0185名無しさん@お腹いっぱい。
2009/02/17(火) 02:15:31すいません
0186名無しさん@お腹いっぱい。
2009/02/17(火) 02:16:40>>184
{}これでくくっている意味がわからんのですけどなんででしょう?
0187名無しさん@お腹いっぱい。
2009/02/17(火) 06:29:27{ }で括らなかったら echoのパイプが左のreadだけにしかかからないだろ
( )でもいいけどさ。
0188名無しさん@お腹いっぱい。
2009/02/17(火) 06:31:27わざわざreadしなくていいよ。
IFS=,
command $n
だけで桶。
0189名無しさん@お腹いっぱい。
2009/02/17(火) 21:27:45hashとか構造体風な感じ
0190名無しさん@お腹いっぱい。
2009/02/17(火) 22:08:31list= の部分も自分で自由に決めていいなら、
カンマにこだわらずに、↓ みたいにすればいいのでは。
#!/bin/sh
list='
aaa 111
bbb 222
ccc 333
'
set $list
while [ $# -ne 0 ]; do
command $1 $2
shift 2
done
一旦位置パラメータに setして、forじゃなくてwhileで、
shift 2で2つずつ回すのがポイント。
0191名無しさん@お腹いっぱい。
2009/02/17(火) 22:12:37cat <<EOF | while read x y; do echo $x $y; done
aaa,111
bbb,222
ccc,333
EOF
0192名無しさん@お腹いっぱい。
2009/02/17(火) 22:18:340193名無しさん@お腹いっぱい。
2009/02/17(火) 22:20:38list='aaa bbb ccc'
aaa=111
bbb=222
ccc=333
for arg in $list
do
eval command $arg \$$arg
done
0194名無しさん@お腹いっぱい。
2009/02/17(火) 22:23:19>>191
ありがとうございます。
ちなみに、
>>191のような場合のwhileは
cat <<EOF | while read xy
do
echo $x $y
done
aaa,111
bbb,222
ccc,333
EOF
のようにインデント、改行つきでかけないもんでしょうか?
0195名無しさん@お腹いっぱい。
2009/02/17(火) 22:25:16継続行使えばOK
cat <<EOF | while read xy \
do \
echo $x $y \
0196名無しさん@お腹いっぱい。
2009/02/17(火) 22:28:51アフォか。\ などイラン。
あと、お前の解答の cat <<EOFは無駄。
無駄を省くと、
↓
IFS=,
while read x y
do
echo $x $y
done << EOF
aaa,111
bbb,222
ccc,333
EOF
それより、>>190 方式がお勧め。
0197名無しさん@お腹いっぱい。
2009/02/17(火) 22:47:54#!/bin/sh
# aaa,111
# bbb,222
# ccc,333
IFS=,
grep '^# ' $0 | sed 's/^# //' | while read a b
do
command $a $b
done
0198名無しさん@お腹いっぱい。
2009/02/17(火) 22:51:14>>197 はもっとカッコ悪い。grepもsedも使うなんて。
0199名無しさん@お腹いっぱい。
2009/02/17(火) 22:56:31外部コマンドなしでできる。
#!/bin/sh
# aaa 111
# bbb 222
# ccc 333
while read a b c
do
if [ "$a" = '#' ]; then
echo $b $c
fi
done < $0
0200名無しさん@お腹いっぱい。
2009/02/17(火) 23:00:280201名無しさん@お腹いっぱい。
2009/02/17(火) 23:02:540202名無しさん@お腹いっぱい。
2009/02/17(火) 23:04:31#define bbb 222
#define ccc 333
とかにする?
0203名無しさん@お腹いっぱい。
2009/02/17(火) 23:07:14コメントアウトする必要なくなるぞ。
↓
#!/bin/sh
exec < $0
while read a; [ "$a" != exit ]; do :; done
while read a b
do
if [ "$a" != '' ]; then
echo $a $b
fi
done
exit
aaa 111
bbb 222
ccc 333
0204名無しさん@お腹いっぱい。
2009/02/17(火) 23:16:47これはかっこいいですね!
でも使いたいけど、仕事のだから気がひけるなぁ
0205名無しさん@お腹いっぱい。
2009/02/18(水) 01:28:19たとえば、以下のようなスクリプトがあるとします
----------------------------
#!/bin/sh
echo hello
echo hello | grep hello
echo goodby | sed 's/goodby/hello/'
----------------------------
この中からコマンドをあらわす単語だけを抜き出したいんです。
(この場合だと、echoとgrepとsedがそれにあたりますが、これ以外のコマンドが存在する可能性もあります。
0206名無しさん@お腹いっぱい。
2009/02/18(水) 01:40:50作ってみた
-----------------------
~$ cat test.sh
#!/bin/sh
echo hello
echo hello | grep hello
echo goodby | sed 's/goodby/hello/'
-----------------------
~$ cat hoge.sh
#!/bin/sh
for word in `cat test.sh`
do
type "$word" > /dev/null
if [ $? -eq 0 ]; then
echo "$word"
fi
done
-----------------------
~$ ./hoge.sh
#!/bin/sh
echo
echo
grep
echo
sed
's/goodby/hello/'
-----------------------
うーん、コマンドでないものまで出力されてる、、、
0207名無しさん@お腹いっぱい。
2009/02/18(水) 02:17:05echo dog cat man
という行があったらどうするとか、
eval ls
という行があったらどうするとか、
l=l; s=s; $l$s
という行があったらどうするとか。
0208名無しさん@お腹いっぱい。
2009/02/18(水) 22:30:53test,
[,
ummm,,,,
0209名無しさん@お腹いっぱい。
2009/02/18(水) 23:02:580210名無しさん@お腹いっぱい。
2009/02/20(金) 22:59:42書き込みをするにはどんな感じに書けばいいのですか?
aaa.txt
1行目 名前はAAAです
bbb.txt
1行目 名前は関口です
2行目 名前は川原です
3行目 名前は遠藤です
これをシェルスクリプトを使用してbbb.txtを次のようにしたいのですが・・。
1行目 名前は関口です
2行目 名前はAAAです
3行目 名前は川原です
4行目 名前は遠藤です
説明が下手なのでわかりにくいですがよろしくお願いします。
0211名無しさん@お腹いっぱい。
2009/02/20(金) 23:01:30一回実行してよいなら簡単に抜ける。
exec(2)をフックして、引数を調べれるか、OSによっては
/procみれば即判る。
0212名無しさん@お腹いっぱい。
2009/02/20(金) 23:05:350213名無しさん@お腹いっぱい。
2009/02/20(金) 23:54:56text=`cat aaa.txt`
sed "2i$text" bbb.txt
あるいは
printf "2i\n$text\n.\nwq\n" | ed bbb.txt
0214名無しさん@お腹いっぱい。
2009/02/21(土) 07:17:26それだと、if文とかcaseとかの分岐があった場合に
分岐しなかった方が抜き出せない。
内部コマンドが抜き出せない。
0215名無しさん@お腹いっぱい。
2009/02/21(土) 07:21:51(head -1 bbb.txt; cat aaa.txt; tail -n +2 bbb.txt) > outfile.txt
>>213
sedのiの直後に改行がなくてもOKなのはGNU sed依存。
0217名無しさん@お腹いっぱい。
2009/02/21(土) 12:15:58どんな感じでやるのがよいのでしょう。
ループ組まないでやる方法があればベターです。
とりあえずそのディレクトリー内で得に拡張子はとわず
英文(例えばソース中の関数名とか#includeとか)程度でいいです。
0218名無しさん@お腹いっぱい。
2009/02/21(土) 12:17:59grep -r のことか?
0219名無しさん@お腹いっぱい。
2009/02/21(土) 13:48:39勘違いしていた。orz。良くmanよみますたい
0220名無しさん@お腹いっぱい。
2009/02/21(土) 14:02:15stdioによるストリームデータとして捉えてください。
シェルスクリプト処理の主な対象は。
0221名無しさん@お腹いっぱい。
2009/02/21(土) 14:06:18意味がわからない
0222名無しさん@お腹いっぱい。
2009/02/21(土) 14:07:050223名無しさん@お腹いっぱい。
2009/02/21(土) 14:09:29find . -type f -exec grep pattern {} +
ちっともシェルスクリプトじゃないな。find総合スレが必要? w
0224名無しさん@お腹いっぱい。
2009/02/21(土) 14:44:09あ、全員がopensolarisに移行すれば解決するのか。
0225名無しさん@お腹いっぱい。
2009/02/21(土) 15:07:190226名無しさん@お腹いっぱい。
2009/02/21(土) 18:20:07取り合えず同じディレクトリーないでいいので
grep -a 'キーワード' *.txt
みたいにしてみたんだけれど
これってshで書けば日本語通るけれどターミナルだと打てないのが不便
あとマッチしたファイル名を一回だけ表示したらファイル名だけ探索して次にいくようにするにはいかに書けば良いなり?
0227名無しさん@お腹いっぱい。
2009/02/21(土) 18:22:07grep -rl 'キーワード' .
0228名無しさん@お腹いっぱい。
2009/02/21(土) 18:24:320229名無しさん@お腹いっぱい。
2009/02/21(土) 18:29:39日本語を探索する場合 いちいちshに書くの面倒なんだけど
どうやってんでしょう。各々方は
0230名無しさん@お腹いっぱい。
2009/02/21(土) 18:31:06文字コードがアレな時はlgrep使ってる。
0231名無しさん@お腹いっぱい。
2009/02/21(土) 18:40:37普通にコマンドラインに日本語入力してるけど。
逆に、なんでコマンドラインに日本語入力できないの?
0232名無しさん@お腹いっぱい。
2009/02/21(土) 19:05:15x 入れてなきゃ出来ないだろ。
鯖なら普通いれてない。
まあ、鯖でコマンドラインから日本語をいれにゃならんのも想像しにくいが。
0233名無しさん@お腹いっぱい。
2009/02/21(土) 19:08:07X 入れてなくても日本語入力できてるけど、、
あと、>>229 で、「shに書く」なら出来てるんだよね?
どうやって shに書いてるの?
それと同じ方法でコマンドラインに日本語入力するだけだが、、
0234232
2009/02/21(土) 19:24:51>>229 がどうしてるのかは知らんが、
x の入っているマシンで書いて、scpだ。
これと同じ方法でコマンドライン入力するとなると、
ssh comannd args ってなことになるが、リモートでシェルの補完機能が
使えない状況ではその気になれない。
0235名無しさん@お腹いっぱい。
2009/02/21(土) 19:35:06どんくさいね。
0236229
2009/02/21(土) 19:49:28これもfirefoxでカキコしてるし
gnome-terminal,Terminal,xtermいずれも日本語は表示するので
shの実行結果では日本語表示されます。
anthyでの変換画面はでるけれど変換終了すると日本語部分は表示されません。(ぴっとかはねられる)
コピペでもセレクションコピーでも同様
ただしnano等起動すればターミナル内でも日本語変換できます。
ちょっとスレの趣旨と別枠だけれど世間とは違うのですか。
0237229
2009/02/21(土) 19:50:59grepにそれはないでしょうということで一応質問しているわけであります。
0238名無しさん@お腹いっぱい。
2009/02/21(土) 19:58:16ロケール設定とshellの設定とターミナルの設定の問題だが、
スレ違いなんで、くだ質スレで、
「コマンドラインで日本語入力したい」ときいてみてくれ。
0239名無しさん@お腹いっぱい。
2009/02/21(土) 20:09:13その、Xが入ってるというマシンで日本語入力できてるなら、
xtermとかktermとか開いて、その中からsshでログインして、
ログイン先のシェルのコマンドラインに、ローカルのXの
いつもの入力方法で日本語入力できるだろ。
0240名無しさん@お腹いっぱい。
2009/02/21(土) 20:15:44shってゆうな。クズ。
0242名無しさん@お腹いっぱい。
2009/02/21(土) 20:40:570243名無しさん@お腹いっぱい。
2009/02/21(土) 20:48:37> 変換終了すると日本語部分は表示されません。(ぴっとかはねられる)
↑
というのは、ログイン先でLANG(またはLC_ALLとかLC_CTYPE)が
ちゃんと設定されてないのが原因。
EUC環境なら LANG=ja_JP.eucJPに、
UTF-8環境なら LANG=ja_JP.UTF-8に設定しろ。
あと、これとは別件だが、canuumやuumがある環境なら、
Xが全くなくてもcanuumを起動すれば直接日本語入力できる。
0244名無しさん@お腹いっぱい。
2009/02/21(土) 21:29:42環境変数LANGによらず、シェルが8ビットコードに対応してないと
はじかれる。Solarisだと/bin/tcshは8ビット入力できなかった。
>>236 は別のシェルを使ってみるといいと思う
ただ、>>229 の「日本語を探索する場合」って漢字コードが混在していると
非常にやっかいなんだんだよね。昔 jgrep だか ngrep だかが fj.sources に
流れたような記憶があるけど、ああゆう漢字コードを変換する grep が欲しいかも
0245名無しさん@お腹いっぱい。
2009/02/21(土) 21:38:48「なら」ってなんだよ。つながってねーぞ。クズ。
0246名無しさん@お腹いっぱい。
2009/02/21(土) 22:03:10どうせUNIXはサーバー専用なんだろ?
0247名無しさん@お腹いっぱい。
2009/02/21(土) 22:04:20>>243 環境変数は全部(LANGもLC_ALLもLC_CTYPEも)ja_JP.UTF-8なり
アプリだと入力できるのでターミナルソフトの問題ではなく>>244
いうようにシェルの問題だと思ったのだけれど
ふと思いついてsudo xterm(sh)するとなぜかコピペはできて変換はできず
su(csh)だとコピペも入力もできた。
原因は解明できていないしファイラーからターミナル開いて探索ということはやりにくいけれど
オラ個人の設定の問題の様なのでこの件はもうきにしないでくれ
grepの基本がわかっただけでも充分に前進したよ。
0248名無しさん@お腹いっぱい。
2009/02/21(土) 22:06:000249名無しさん@お腹いっぱい。
2009/02/21(土) 22:09:04ブラウジング用ウェブサーバーだったりするサーバー用OS
0250名無しさん@お腹いっぱい。
2009/02/21(土) 22:52:42perlで<STDIN>使うという最低の方法に逃げたです。これだとクリック起動で文字入力待ちしてPerlで組めばいいのに``でgrep呼んでしまいました。
単純な探索の場合処理的にはファイルをたぐるループ分perlで直接書くより速いと思います。
0251名無しさん@お腹いっぱい。
2009/02/21(土) 23:04:53$ grep -f - -rl .
ってやれよ。すると、標準入力から読み込んだキーワードがgrepに使われる。
シェルのコマンド行じゃない標準入力なら日本語は通るはず。
日本語打った後は、改行直後に Ctrl-Dで終了。
0252名無しさん@お腹いっぱい。
2009/02/22(日) 00:34:27だからlgrepがあるつーの。
0253名無しさん@お腹いっぱい。
2009/02/24(火) 23:14:27当然文字コードが違う(EUCとSJIS)ので化けます。
LANGを途中変えても変わらないです。(ターミナルのせいだと思いますが)
化けないようにできますか?
0254名無しさん@お腹いっぱい。
2009/02/24(火) 23:19:46・標準出力にパイプで | nkf -Se をかます
・ktermをSJISモードで開く
好きな方選べ
0255名無しさん@お腹いっぱい。
2009/02/24(火) 23:30:460256名無しさん@お腹いっぱい。
2009/02/24(火) 23:42:350257名無しさん@お腹いっぱい。
2009/02/25(水) 06:36:32それ、-t と -f 逆だろ。
0258名無しさん@お腹いっぱい。
2009/02/25(水) 10:09:23grep -f - -rl .
後の日本語入力→改行→ctrl+dで探索スタートできました。(xterm)
0259名無しさん@お腹いっぱい。
2009/02/25(水) 15:12:52コマンドを実行しようと思い、
for dir in `find . -type d -maxdepth 1`
do
test $(ls -1 $dir | wc -l) -eq 1 && command
done
このように書いてみたのですが、ディレクトリ名が空白で区切られて
しまいうまく動きません。
どのように対処したらいいでしょうか?
0260名無しさん@お腹いっぱい。
2009/02/25(水) 15:17:13do
test $(ls -1 "$dir" | wc -l) -eq 1 && command
done
0261名無しさん@お腹いっぱい。
2009/02/25(水) 15:28:47find . -maxdepth 1 -type d \
-exec sh -c 'for d;do [ $(ls "$d"| wc -l) -eq 1 ] && command; done' dummy {} +
0262名無しさん@お腹いっぱい。
2009/02/25(水) 16:21:38ありがとうございます。readを使うと良いんですね。
無事目的の動作をさせることができました。
>>261
ありがとうございます。
-execはあまり使ったことがないのですが、最後の
done' dummy {} +
の意味がいまいち理解できませんでした。
よろしければ教えていただけますか?
0263名無しさん@お腹いっぱい。
2009/02/25(水) 16:26:36(途中じゃなく)頭にスペースが付いてるディレクトリ名が読めないとか
問題が残るんだな。
その点も含めて解決するとなると、>>261 の解になる。
0264名無しさん@お腹いっぱい。
2009/02/25(水) 17:34:24>(途中じゃなく)頭にスペースが付いてるディレクトリ名が読めないとか
IFS= read -r
0265名無しさん@お腹いっぱい。
2009/02/25(水) 17:36:23read -r は bash依存。
で、それやっても「改行入り」ディレクトリ名が正しく処理されない。
結局 >>261 一択。
0266名無しさん@お腹いっぱい。
2009/02/25(水) 17:48:530267名無しさん@お腹いっぱい。
2009/02/28(土) 18:54:04キーボードを読んで分岐するバッチはどう書けば医院でしょうか?
0268名無しさん@お腹いっぱい。
2009/02/28(土) 19:04:180269名無しさん@お腹いっぱい。
2009/03/01(日) 02:23:56MSDOSのバッチスクリプトしか知らない人?
バッチって、バッチ処理等の普通名詞だろう
0270名無しさん@お腹いっぱい。
2009/03/01(日) 03:26:52そもそもパスワードがかかってないか判定するすべはありますか?
0271名無しさん@お腹いっぱい。
2009/03/01(日) 06:54:24unzip -Zv *.zip | grep 'file security status'
0272名無しさん@お腹いっぱい。
2009/03/01(日) 08:06:080273名無しさん@お腹いっぱい。
2009/03/01(日) 11:17:51普通名詞のバッチ処理はユーザーからの入力待ちは行えない。必要な入力データは
あらかじめ用意しておく処理。対話処理とは対極的なもの。
ユーザーからの入力によって処理を変えたい「バッチ」というならMSDOSのバッチに他ならない。
0274名無しさん@お腹いっぱい。
2009/03/01(日) 11:20:52指定時刻までの時間を計算してsleepする。
0275名無しさん@お腹いっぱい。
2009/03/01(日) 11:27:52それはわかってますよ。その具体的なシェルを質問してるんですが。
0276名無しさん@お腹いっぱい。
2009/03/01(日) 11:29:40read t
sleep $t
command
0277名無しさん@お腹いっぱい。
2009/03/01(日) 11:32:040278名無しさん@お腹いっぱい。
2009/03/01(日) 12:34:37お前、何様のつもり?
0279名無しさん@お腹いっぱい。
2009/03/01(日) 12:42:540280名無しさん@お腹いっぱい。
2009/03/01(日) 13:14:31これってシェルスクリプトで出来るんですか?
0281名無しさん@お腹いっぱい。
2009/03/01(日) 16:28:03こういう荒らしを楽しんでる奴が最近いる。
0282名無しさん@お腹いっぱい。
2009/03/01(日) 18:03:410283名無しさん@お腹いっぱい。
2009/03/01(日) 19:27:530284名無しさん@お腹いっぱい。
2009/03/01(日) 20:10:390285名無しさん@お腹いっぱい。
2009/03/01(日) 20:44:210286名無しさん@お腹いっぱい。
2009/03/01(日) 21:02:500287名無しさん@お腹いっぱい。
2009/03/01(日) 21:03:020288名無しさん@お腹いっぱい。
2009/03/01(日) 23:21:15まさかbashのプラグインと来るなんてねえ。
0289名無しさん@お腹いっぱい。
2009/03/02(月) 09:25:51GUI とhttp通信は別コマンドじゃないかな
awkを書いたのはCSVのparseに使ってるからだろうね
0290名無しさん@お腹いっぱい。
2009/03/02(月) 15:07:180291名無しさん@お腹いっぱい。
2009/03/03(火) 10:58:08$ echo $a
echo の結果を read では変数にセットできない?
0292名無しさん@お腹いっぱい。
2009/03/03(火) 11:05:13ただ、| のうしろはサブシェルになるので、
セットしてすぐサブシェルが終了して忘れるだけ。
echo abcd def | { read a; echo $a; }
ksh だとサブシェルにならないので↑のようにしなくてもふつーに動く。
0293名無しさん@お腹いっぱい。
2009/03/03(火) 11:43:30大人しくバッククォートで実行の結果使います。
0294名無しさん@お腹いっぱい。
2009/03/04(水) 23:31:090295名無しさん@お腹いっぱい。
2009/03/05(木) 00:18:50俺はcshは分からんが。
0296名無しさん@お腹いっぱい。
2009/03/05(木) 02:03:59Perl の chomp をシェルでやりたいのです。
0297名無しさん@お腹いっぱい。
2009/03/05(木) 02:18:180298名無しさん@お腹いっぱい。
2009/03/05(木) 02:21:310299名無しさん@お腹いっぱい。
2009/03/05(木) 06:46:31b=`echo "$a"`
で桶。
0300名無しさん@お腹いっぱい。
2009/03/06(金) 00:52:11ではだめもとで。
配列の
array=( "a 1" "b 2" "b 3")
をforで1要素づつ使いたい場合
for d in ${array[@]}
do
echo $d
done
とかできますよね
これをcshでやること可能ですか?
0301名無しさん@お腹いっぱい。
2009/03/06(金) 01:36:18for d in "${array[@]}"
do
echo $d
done
こうです。
0302名無しさん@お腹いっぱい。
2009/03/06(金) 06:41:00echo $i
end
だろ。
0303名無しさん@お腹いっぱい。
2009/03/06(金) 06:48:04http://pc11.2ch.net/test/read.cgi/unix/1094041299/
>>302
それだと、要素の中のスペースで分割されてしまうからダメ。
例: "a 1" が a と 1 に別れてしまう。
0304名無しさん@お腹いっぱい。
2009/03/06(金) 09:42:48http://pc11.2ch.net/test/read.cgi/linux/1210999497/
0305名無しさん@お腹いっぱい。
2009/03/06(金) 22:26:43cshなら配列使えばいいのでは?
#!/bin/csh -f
set a = ("a 1" "b 2" "c 3");
set i=1
while ( $i <= $#a )
echo $a[$i]
@ i = $i + 1
end
0306名無しさん@お腹いっぱい。
2009/03/07(土) 00:49:25とかイコール前後にスペース付けられるあたりはcsh悪くないよね
というかスペースを許さないbashの代入がちょっとどうかと思う。
0307名無しさん@お腹いっぱい。
2009/03/07(土) 01:10:080308名無しさん@お腹いっぱい。
2009/03/07(土) 03:17:010309名無しさん@お腹いっぱい。
2009/03/07(土) 07:01:04算術式ならbashでもスペースを入れられるよ。
((i = 123))
echo $i
0310名無しさん@お腹いっぱい。
2009/03/08(日) 04:05:420311名無しさん@お腹いっぱい。
2009/03/08(日) 05:48:050312名無しさん@お腹いっぱい。
2009/03/09(月) 19:53:57echo $i
0313名無しさん@お腹いっぱい。
2009/03/10(火) 07:44:38代入したいのですがどうすればよいでしょうか?
eval "$A=B"
や
eval "$A"=B
と書くと、意図通りに代入と判断されるシェル(最近のLinuxのbashやSolarisのsh)も
有ればコマンドと判断されてcommand not foundとなってしまう
シェルもあって、困っています。
0314名無しさん@お腹いっぱい。
2009/03/10(火) 08:24:35一般的には、代入する値のスペースや記号の解釈を避けるには、
eval $A=?''代入する値'?'
と書いておけば桶。evalを含めた2回の解釈を回避するために、
シングルクォートを2回ネスティングする。
$Aの方は、中身は単純な変数名が入っているため、
裸の $A のままクォートしなくても桶。
Solarisのshで動くならそれが標準と考えて良い。
これで動かないようなシェルは捨てるべき。
0315名無しさん@お腹いっぱい。
2009/03/10(火) 08:27:12わ、なぜかこの環境から書き込むと、
半角の\が?に化ける。(なんで?)
>>313 の?はバックスラッシュに読み変えてね。
0316名無しさん@お腹いっぱい。
2009/03/10(火) 08:59:21具体的にどのシェルか言えよ
そのときだけ"$A"にスペースが入ってんじゃないの?
0317名無しさん@お腹いっぱい。
2009/03/10(火) 18:05:12ダサっ
0318名無しさん@お腹いっぱい。
2009/03/10(火) 18:37:45困っています、じゃあ独り言にしかなってないぞ。
動かない場合の代わりの方法が欲しいのか、
ネタを流してるのかハッキリしろ。
0319名無しさん@お腹いっぱい。
2009/03/10(火) 20:10:54いいでしょうか。
0320名無しさん@お腹いっぱい。
2009/03/10(火) 20:30:06last -f /tmp/wtmp
rm -f /tmp/wtmp
場所が違えば適宜探すこと。
圧縮されてたら適宜伸長すること。
11月の分が存在しなければ諦めること。
0321名無しさん@お腹いっぱい。
2009/03/11(水) 02:00:46ありがとうございます。
が、試してみたところエラーとなりました。
XX=YY形式の設定ファイルをIFS="="として、
while readで読み込んで、環境変数XX=値YYとしています。
whileブロックの外ではエラーがでないので、
IFS="="が悪さをしているのではないかとふと思いつきました。
明日試してみます。
>>316,318
bash3.2.25です。
0322名無しさん@お腹いっぱい。
2009/03/11(水) 06:29:23エラーになってあたりまえだ。
IFS="=" にすれば、コマンド上では = が消えてしまう。
XX=YY は、実際には XX YY という風に実行され、エラーになる。
これは、「シェル変数の値を変数名とするシェル変数を定義して代入」
以前の問題。
「シェル変数の値を変数名とするシェル変数を定義して代入」の問題なら、
>>314-315 の回答で合ってる。
あと、bash-3.2.25かどうかは関係ないと思うぞ。
エラーが出るなら他のシェルでもエラーになるはず。
0323名無しさん@お腹いっぱい。
2009/03/11(水) 09:45:54シェルスクリプトはOOじゃないんだよね
時代遅れだね
0324名無しさん@お腹いっぱい。
2009/03/12(木) 07:21:25PowerShell は最近生まれたものなんだから当然だろ。
比較するなら PowerShell と同時期に生まれたシェルと比較しろ。
0325名無しさん@お腹いっぱい。
2009/03/14(土) 01:53:460326名無しさん@お腹いっぱい。
2009/03/14(土) 02:09:290327名無しさん@お腹いっぱい。
2009/03/14(土) 02:14:51彼はLinux板のシェルスクリプトのところでも同じことを書いてたから。
0328名無しさん@お腹いっぱい。
2009/03/14(土) 02:20:53imagemagickのidentifyコマンド
0329名無しさん@お腹いっぱい。
2009/03/14(土) 12:03:010330名無しさん@お腹いっぱい。
2009/03/14(土) 12:32:290331名無しさん@お腹いっぱい。
2009/03/14(土) 23:02:45ありがとうございます。できました。
>>329
>>330
すいません。サイズという表現微妙でした。
解像度?1280x1024とかの値の話でした。
0332名無しさん@お腹いっぱい。
2009/03/17(火) 22:56:18while read l; do
for w in $l; do
type $w > /dev/null 2>&1 && echo $w
done
done < (ファイル) | sort | uniq
0333名無しさん@お腹いっぱい。
2009/03/18(水) 19:31:29xfceのthunarだと画像ファイルを選ぶとステータスバーにサイズを表示する。
あとImageMagickいれるならば関連付けでdisplayにすれば良い
あとはperlなりcなりでperlmagickなりmagickwandなりでやりたい放題。
但しexifはdisplayでは対応しているけれどImageMagickのライブラリーは対応していないので
libexifとかexiftool入れると良いと思う
0334名無しさん@お腹いっぱい。
2009/03/18(水) 19:32:160335328
2009/03/18(水) 20:35:040336名無しさん@お腹いっぱい。
2009/03/19(木) 01:52:23WIDTH=`identify -format '%w' image.jpg`
HEIGHT=`identify -format '%h' image.ipg`
じゃない?
0337名無しさん@お腹いっぱい。
2009/03/21(土) 00:05:33exifに手を出せばいろいろおもしろいんだから、すぐにmanとかで分かるし。
ijgのおまけの返しから削る手だってある。
ノーヒントならともかく「わかった」という喜びを与えてあげよう
それにshell script的には削って置換した方がおもろい。
選択肢が多く汎用性のあるものはいかにおもろいかが重要。
0338名無しさん@お腹いっぱい。
2009/03/22(日) 04:07:520339名無しさん@お腹いっぱい。
2009/03/22(日) 08:11:40俺がお前に聞きたいわ。
0340名無しさん@お腹いっぱい。
2009/03/22(日) 23:38:380341名無しさん@お腹いっぱい。
2009/03/25(水) 18:48:49cshでさ、cshrcで
set path = (${path} ${TOMCAT_HOME}/bin)
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${TOMCAT_HOME}/lib
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${TOMCAT_HOME}/ROOT/WEB-INF/classes
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${TOMCAT_HOME}/ctx/lib:${TOMCAT_HOME}/jdbc/lib
って設定してて、気がつくと、
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/app/tomcat/webapps/bin:/opt/app/tomcat/webapps/bin:/opt/app/tomcat/webapps/bin:/opt/app/tomcat/webapps/bin:/opt/app/tomcat/webapps/bin
LD_LIBRARY_PATH=:/opt/app/tomcat/webapps/lib:/opt/app/tomcat/webapps/ROOT/WEB-INF/classes:/opt/app/tomcat/webapps/ctx/lib:/opt/app/tomcat/webapps/jdbc/lib
:/opt/app/tomcat/webapps/lib:/opt/app/tomcat/webapps/ROOT/WEB-INF/classes:/opt/app/tomcat/webapps/ctx/lib:/opt/app/tomcat/webapps/jdbc/lib
:/opt/app/tomcat/webapps/lib:/opt/app/tomcat/webapps/ROOT/WEB-INF/classes:/opt/app/tomcat/webapps/ctx/lib:/opt/app/tomcat/webapps/jdbc/lib
:/opt/app/tomcat/webapps/lib:/opt/app/tomcat/webapps/ROOT/WEB-INF/classes:/opt/app/tomcat/webapps/ctx/lib:/opt/app/tomcat/webapps/jdbc/lib
みたいなことになってるけど、重複した同じパスの解消ってスクリプトで出来る?
なんだか検索で遅くなりそうだが、気にしないが現実的?
0342名無しさん@お腹いっぱい。
2009/03/25(水) 21:04:54.cshrcでは setenvしない(setenvは .loginでする)のが現実的
setenvする場合でも、以前の値が蓄積するような書き方はしないのが現実的
cshの話題は
http://pc12.2ch.net/test/read.cgi/unix/1094041299/
に書くのが現実的
0343名無しさん@お腹いっぱい。
2009/03/26(木) 00:23:22それならshでも同じことでしょ
存在しないコマンド打った場合はエラーが帰るのが多少遅くなりそうだけど・・
気持ち悪ければ、「;」を改行に変えて、sort -u して「;」戻して新たにPATHに突っ込めばよいのかもしれんけどそうすると元の順番と変わるなぁ
0344名無しさん@お腹いっぱい。
2009/03/26(木) 07:27:35>それならshでも同じことでしょ
↑
なんでやねん。アフォかw
shの .profile は「ログインシェル」しか読まない。
shって何回も打っても二重登録されない。
0345名無しさん@お腹いっぱい。
2009/03/26(木) 07:41:070346名無しさん@お腹いっぱい。
2009/03/26(木) 07:51:23はぁ? .shrc なんてファイル何者?
少なくとも/bin/shはそんなファイルを読まない。
ash bash zsh ksh も .shrcなんてファイル読まないぞw
0347名無しさん@お腹いっぱい。
2009/03/26(木) 08:00:360348名無しさん@お腹いっぱい。
2009/03/26(木) 08:04:57>>342 が回答済み
0349名無しさん@お腹いっぱい。
2009/03/26(木) 14:58:19普通に使ってたら、そんなことは起きない。
0350名無しさん@お腹いっぱい。
2009/03/26(木) 23:52:39bashしか使わんから.bashrcみたいにあると思い込んでいたよ
0351名無しさん@お腹いっぱい。
2009/03/27(金) 01:18:270352名無しさん@お腹いっぱい。
2009/03/27(金) 01:36:440353名無しさん@お腹いっぱい。
2009/03/27(金) 12:34:12スクリプトの中で変数が空かどうか調べるにはどう書けばよいでしょうか?
ご教示頂きたくm()m
0354名無しさん@お腹いっぱい。
2009/03/27(金) 12:44:24変数名 HOGE が空かどうかを調べる
(1)空文字列は空とはみなさない場合:
echo ${HOGE-'空だよ'}
---
(2)空文字列がセットされていても空とみなしたい場合:
echo ${HOGE:-'空だよ'}
0355名無しさん@お腹いっぱい。
2009/03/27(金) 12:48:45)空文字列も空と見做していいなら、
if [ -z "$HOGE" ]; then
: 空の場合の処理
fi
0356353
2009/03/27(金) 12:51:540357名無しさん@お腹いっぱい。
2009/03/27(金) 12:52:39空文字列は空ではないと考えるなら、
if [ "${HOGE+a}" ]; then
: 空の場合の処理
fi
0358名無しさん@お腹いっぱい。
2009/03/27(金) 12:56:12条件逆になってるよw
if [ -z "${HOGE+a}" ]; then
: 空の場合の処理
fi
0359353
2009/03/27(金) 15:36:18すいませんもう一個疑問が出来ました。
$1のような特殊変数には値の代入はできないのでしょうか??
0360名無しさん@お腹いっぱい。
2009/03/27(金) 15:38:120361名無しさん@お腹いっぱい。
2009/03/27(金) 15:52:22× 特殊変数
○ 位置パラメータ
代入方法 ( $1 に HOGEを代入したいなら)
set -- HOGE
ただし、$2以降のすべての位置パラメータがリセットされる
他に、「特殊パラメータ」($0 $@ $# $? など)もあって、
特殊パラメータには値は代入できない。
0362名無しさん@お腹いっぱい。
2009/03/27(金) 17:23:22「空文字列は空ではない」ってどういう意味??
HOGE+aってそんな変数できるの? 変数に足し算?
HOGE+bとかやるとなにか違い出るの?
全然わかりません><
0363名無しさん@お腹いっぱい。
2009/03/27(金) 17:28:370364名無しさん@お腹いっぱい。
2009/03/27(金) 19:24:58変数設定されてるが空。
変数に値が設定されている。
0365名無しさん@お腹いっぱい。
2009/03/27(金) 23:44:09で、質問は何?
変数が必要なら設定すれば?
0366名無しさん@お腹いっぱい。
2009/04/01(水) 09:36:21はいって何?
出来るの?
さっきから何度も。
はいって言葉の重みわかってる?
いま出来ますって断言したんだよ君。
その責任の重さわかってんの?
社会に出たらもっと自分の言葉に責任持てよ。
ん?
社会人の一言一言に掛かる責任の重さが分かってないだろ全然。
学生気分でやってんだったら帰ってもらうよ。
とにかく明日からもう来なくていいから。
0367名無しさん@お腹いっぱい。
2009/04/01(水) 12:44:330368名無しさん@お腹いっぱい。
2009/04/01(水) 14:58:190369名無しさん@お腹いっぱい。
2009/04/01(水) 15:53:48今までの下っ端が下っ端を抜け出せるかの試練の日。
0370名無しさん@お腹いっぱい。
2009/04/01(水) 16:14:02対話式で
ftp example.com
username
password
cd ディレクトリ
put ファイル
quit
とやると正常にファイルを送信することができます。
ftp -n example.com << __END__
user username password
bin
passive
cd ディレクトリ
put ファイル名
quit
__END__
をシェルスクリプトで実行すると
ファイル名: Permission denied.
と権限がない旨が表示されます。
転送元ファイルの権限はroot、パーミッションは0644、転送するファイル一般ユーザー権限、ディレクトリに変えてみたのですが、
結果は変わらずです。
実行ユーザーはroot、シェルスクリプトのパーミッションは0700です。
対話式とは権限周りが違うのでしょうか?
0371名無しさん@お腹いっぱい。
2009/04/01(水) 16:29:25cronを使わずに、そのシェルスクリプトを一般ユーザーで実行して正常動作するなら、
NFSでrootの権限がない問題と思われる。
シェルスクリプトのパーミッションを755とかにすれば?
0372名無しさん@お腹いっぱい。
2009/04/01(水) 16:44:030373名無しさん@お腹いっぱい。
2009/04/01(水) 16:56:370374名無しさん@お腹いっぱい。
2009/04/01(水) 17:02:47それだったらメッセージが違う。ftpdからのメッセージになるから、
5XX cannot write hoge とか。
0375370
2009/04/01(水) 17:06:33/bin/sh /home/ユーザーdir/適当なフォルダ/backup.sh
を実行しましたが、変わらずです。
backup.shのパーミッションは0755。
CRONでもコマンドライン上でも、シェルスクリプト経由でFTPを通すとエラーが出るようです。
一般ユーザー権限でも、対話式なら問題ありません。
0376名無しさん@お腹いっぱい。
2009/04/01(水) 17:12:240377名無しさん@お腹いっぱい。
2009/04/01(水) 17:17:53一般ユーザーで、
$ /bin/sh -x /home/ユーザーdir/適当なフォルダ/backup.sh
を実行した結果を省略せずに貼ると何かわかるかも。
0378名無しさん@お腹いっぱい。
2009/04/01(水) 17:34:55そんなこと言って、「省略せずに貼」ったとたん、黙り込むんだよなぁ。
または、他の人が正解を回答して、結局、貼った内容は全く関係なかったり
するんだよなぁ。
0379名無しさん@お腹いっぱい。
2009/04/01(水) 17:38:59その backup.sh の中の ftp -n を、ftp -nv に変えてメッセージを検証して。
0380名無しさん@お腹いっぱい。
2009/04/01(水) 17:39:14試してみた?>>370 のようなエラーがでたよ
(Solaris8)
0381名無しさん@お腹いっぱい。
2009/04/01(水) 17:49:58まぁあくまで「わかるかも」だからな。
0382370
2009/04/01(水) 18:17:08原因はシェルスクリプト自体の権限が、FTPで接続するユーザート違かったからだと思います。
SSHでログインしているサーバーのユーザーは「root」の他に「admin」「information」などのユーザー名を使用していたのですが、FTPで接続する先のユーザーは全く違う名前でした。
なので、FTPのユーザー名と同じユーザーを作成し、そのユーザー権限でシェルスクリプトを実行したら、無事成功しました。
けど、FTPのユーザー名と、実行するユーザー名が異なると権限のエラーがでるのですね。 不思議です。
皆様ありがとうございました。
0383名無しさん@お腹いっぱい。
2009/04/01(水) 18:24:360384名無しさん@お腹いっぱい。
2009/04/01(水) 18:25:24for文の中で文字列の代入をさせようとするとエラーが返されます
#!/bin/sh
for i in *
do
$output = $i
(・・処理・・)
done
どうしたらfor文の中で文字列の代入をさせることができるでしょうか?
0385名無しさん@お腹いっぱい。
2009/04/01(水) 18:26:18$output = $i
はできてるのか?
0386名無しさん@お腹いっぱい。
2009/04/01(水) 18:36:15for文の外でも
=: command not found
と言われてエラーを返されました(´・ω・`)
0387名無しさん@お腹いっぱい。
2009/04/01(水) 18:38:48output=$i
ってマジレスしちゃダメなんだろなぁ
0388名無しさん@お腹いっぱい。
2009/04/01(水) 18:39:51他の言語の常識持ち込まずに
ちゃんと構文調べてから書いた方がいいよ。
>>387
別にいいんじゃね。
0389名無しさん@お腹いっぱい。
2009/04/01(水) 18:46:55それでも
output: command not found
とエラーが返されましたorz・・・
0390名無しさん@お腹いっぱい。
2009/04/01(水) 18:49:060391名無しさん@お腹いっぱい。
2009/04/01(水) 18:49:20>>387をそのまま書く。
空白入れちゃだめ。
0392名無しさん@お腹いっぱい。
2009/04/01(水) 18:59:18できました。ありがとうございました(;´∀`)
0393名無しさん@お腹いっぱい。
2009/04/01(水) 21:22:43【ネット】朝日新聞編集局員(49)、2ちゃんで荒らし行為&差別を助長する書き込み→朝日新聞からの書き込み規制され…★64
http://tsushima.2ch.net/test/read.cgi/newsplus/1238588235/
※ソース(3月31日付けasahi.com)
http://www.asahi.com/national/update/0331/TKY200903310332.html
0394名無しさん@お腹いっぱい。
2009/04/02(木) 02:25:42なんだかなあ。
0395名無しさん@お腹いっぱい。
2009/04/02(木) 08:47:42この場合って、事前にIFSをイジるしか解決策は無いのでしょうか?
findの-print0とかして、forのデリミタをNULLにしたりとかは出来ないのでしょうか?
0396名無しさん@お腹いっぱい。
2009/04/02(木) 08:51:34find . -exec sh -c 'for arg in "$@"; do echo "$arg"; done' dummy {} +
0397名無しさん@お腹いっぱい。
2009/04/02(木) 09:09:17ありがとうございます。
出来ました。
ただ何をやっているのか、理解していないと思われる部分があるので質問させて下さい。
dummyは何をやってるのでしょうか?
僕の理解としては、shの引数としてfindの1結果を渡しているんだと思うんですけど、shにとっての第1引数はdummyなので、
dummy ファイル名
が$@に入ってると思います。
ただ、
$ sh -c 'echo "$@"' arg1 arg2
とすると、arg22がechoされるので、dummyが必要なのは現象からわかるのですが、理由がわかりません。
それと、最後の+はどういう意味でしょう。findのmanでは\;で-execは終われと書いてあるように読めるのですが。
以上、すいませんが、解説お願い出来たらお願いします。
0398名無しさん@お腹いっぱい。
2009/04/02(木) 10:55:42sh(1)より:
-c string If the -c option is present, then commands are read from string. If there are
arguments after the string, they are assigned to the positional parameters,
starting with $0.
find(1)より:
-exec command {} +
This variant of the -exec action runs the specified command on the selected files,
but the command line is built by appending each selected file name at the end; the
total number of invocations of the command will be much less than the number of
matched files. The command line is built in much the same way that xargs builds
its command lines. Only one instance of `{}' is allowed within the command. The
command is executed in the starting directory.
0399名無しさん@お腹いっぱい。
2009/04/02(木) 11:33:43空気読んで黙っておくよ
0400名無しさん@お腹いっぱい。
2009/04/02(木) 11:47:12for files in `find . -printf "'%p' "`
do
echo "$files"
done
findに、「シェルで再利用可能なクォートを施した状態でprint」という
機能がない以上、完全な対応は無理。なので、>>396 のように sh -c を -exec する
方法しかない。
0402名無しさん@お腹いっぱい。
2009/04/06(月) 02:09:11LANGが日本語じゃないとcshでは表示されない理由を教えてださい
[root@yama ~]# csh -c "setenv LANG C ; echo '日本語'"
・
[root@yama ~]# sh -c "export LANG=C ; echo '日本語'"
日本語
[root@yama ~]#
0403名無しさん@お腹いっぱい。
2009/04/06(月) 02:24:30% sh -c "export LANG=C ; echo $LANG"
0404名無しさん@お腹いっぱい。
2009/04/06(月) 07:46:03>>403 は $LANGがコマンドラインのシェルによって先に展開されてしまうから
shやcsh上での動作をテストしたことにはならない。
>>402 が聞いているのは >>403 とは全く別の問題。
だが、cshはスレ違いなので、これで終了。
ハイ次
↓
0405名無しさん@お腹いっぱい。
2009/04/06(月) 08:43:190406名無しさん@お腹いっぱい。
2009/04/06(月) 17:45:12・やりたいこと
# zlogin <対象ノード>
$ df -h
$ exit
※ログインパスは無し
対象ノードへログインし、ディスク構成をとってきたい。
シェルスクリプト中でのログイン処理はどのように書いたらいいですか?
0407名無しさん@お腹いっぱい。
2009/04/06(月) 17:47:46ふつうに、
# zlogin 対象ノード df -h
でいいじゃん。
0408名無しさん@お腹いっぱい。
2009/04/06(月) 18:22:46!!!!
出来ました。ありがとうございました。
てっきりヒアドキュメントやらを駆使するのかと....
0409名無しさん@お腹いっぱい。
2009/04/09(木) 20:07:15printenvもしましたが、メールを出して何分経ってもメッセージが出ません。
他に何か設定がいるのでしょうか?
0410名無しさん@お腹いっぱい。
2009/04/09(木) 20:41:570411名無しさん@お腹いっぱい。
2009/04/09(木) 21:27:470412名無しさん@お腹いっぱい。
2009/04/09(木) 22:03:080413名無しさん@お腹いっぱい。
2009/04/09(木) 23:21:26質問の仕方が悪すぎるので出直してください。
0414名無しさん@お腹いっぱい。
2009/04/10(金) 01:43:53$@に渡ってくる外からの引数をfor文でまわして一部の引数を取り去るということをやろうとしている。
ダブルクウォートを含んだ引数のクウォートがなくなってしまったり、
シングルクウォートもなくなってしまうので混じって呼び出されていると処理の仕方が分からない。
よりよい引数群の加工の仕方、サブプロセスへの引数の渡し方を教えてほしい。
#!/bin/bash
#...(前略)
OPTIONS=""
# some options are needed to disregard
for i in "$@"
do
case $i in
-fmerge-all-constants)
;;
-mpreferred-stack-boundary=*)
;;
*)
ii=`echo $i | sed -e 's/\"/\\\"/g'`
OPTIONS="${OPTIONS} \"$ii\""
esac
done
0415後半
2009/04/10(金) 01:44:36#exec -a "/opt/intel/Compiler/11.0/074/bin/intel64/icc" /opt/intel/Compiler/11.0/074/bin/intel64/iccbin "$@";
#(2)普通に実行して戻り値も処理する
/opt/intel/Compiler/11.0/074/bin/intel64/iccbin "$@";
#(3)目的の実行法
#/opt/intel/Compiler/11.0/074/bin/intel64/iccbin $OPTIONS;
#(4)だが引数がおかしくなるのでこう渡している
#echo $OPTIONS | xargs /opt/intel/Compiler/11.0/074/bin/intel64/iccbin
last=$?
#iccbinがエラーだったときの処理
#...
0416名無しさん@お腹いっぱい。
2009/04/10(金) 02:54:40・0から始まるインデックス変数を用意
・iccに渡したい引数なら、arg[インデックス]="$i"
・最後に、icc "${arg[@]}"
0417名無しさん@お腹いっぱい。
2009/04/10(金) 04:06:51早速書き換えてみた。スゲー!
長い間悩まされてたMySQLやapacheなどの大物がまたビルドできるようになったよ。ありがとう。
0418名無しさん@お腹いっぱい。
2009/04/10(金) 06:45:45bashで解決したみたいだけど、
このスレ的に /bin/sh での解決方法書いておくね。
$#を一旦セーブしておいて、
forで回しながら setで "$@" の後ろに必要な引数だけを追加し、
最後に shift 「セーブしてあった$#」で最初の引数を消す
というのがポイント。
#!/bin/sh
argc=$#
for i in "$@"
do
case $i in
-fmerge-all-constants)
;;
-mpreferred-stack-boundary=*)
;;
*)
set - "$@" "$i"
;;
esac
done
shift $argc
exec gcc "$@"
0419名無しさん@お腹いっぱい。
2009/04/10(金) 07:53:01>bashで解決したみたいだけど、
>このスレ的に /bin/sh での解決方法書いておくね。
どうでもいいです。
さらに、間違っているし。
酢布?
0420名無しさん@お腹いっぱい。
2009/04/10(金) 08:08:07>>419 が 「>>418 = 正解」を見て、
何を「間違っている」と勘違いしたかに興味あるな。
$# 引数の個数を覚えておいて、
同じ "$@" を干渉しないように使い回して
あとで shift する、って結構高度な技が使われてるよ。
高度過ぎて >>419 には「間違ってる」ように見えたかな(笑)
0421名無しさん@お腹いっぱい。
2009/04/10(金) 08:23:55>高度過ぎて >>419 には「間違ってる」ように見えたかな(笑)
うざいなぁ
418 = 420なの? 顔真っ赤なんだよねw
>exec gcc "$@"
すごく低度な感じ。だれも、そんなこと聞いてない。
まずは、謝ってくれ
0422名無しさん@お腹いっぱい。
2009/04/10(金) 08:33:41まさかそんなところに突っ込んだの?( )笑
icc に変えればいいだけじゃん。
多分 >>418 の環境には iccがないから、テスト的に gcc でテストしただけだろ。
本当は >>419 は本気で >>418 がどこか間違ってると勘違いしてて、
>>420 で指摘されてとっさに苦し紛れに 「exec gcc "$@"」とか言い訳したんだろな(笑)
0423名無しさん@お腹いっぱい。
2009/04/10(金) 08:35:370424名無しさん@お腹いっぱい。
2009/04/10(金) 08:37:53for i in "$@" の ループ中に $@ をいじってるのを見て
反射的に間違っていると思った、に一票
(for の引数はループ前にしか評価されないから問題なし)
多分図星。
0425名無しさん@お腹いっぱい。
2009/04/10(金) 08:46:380426名無しさん@お腹いっぱい。
2009/04/10(金) 09:05:400427名無しさん@お腹いっぱい。
2009/04/10(金) 10:01:16どんなスクリプトの記述がありますか?
teeやscriptを入れると実行が止まってしまう
0428名無しさん@お腹いっぱい。
2009/04/10(金) 10:18:00{
} 2>&1 | tee hoge.log
とか
(
) 2>&1 | tee hoge.log
とかで囲ったら止まるの?
0429名無しさん@お腹いっぱい。
2009/04/10(金) 10:44:260430名無しさん@お腹いっぱい。
2009/04/10(金) 11:19:240431名無しさん@お腹いっぱい。
2009/04/10(金) 11:20:120432名無しさん@お腹いっぱい。
2009/04/10(金) 11:26:210433名無しさん@お腹いっぱい。
2009/04/10(金) 11:53:510434名無しさん@お腹いっぱい。
2009/04/11(土) 00:25:580435名無しさん@お腹いっぱい。
2009/04/11(土) 00:39:580436名無しさん@お腹いっぱい。
2009/04/11(土) 00:42:020437名無しさん@お腹いっぱい。
2009/04/11(土) 14:04:290438名無しさん@お腹いっぱい。
2009/04/11(土) 22:45:580439名無しさん@お腹いっぱい。
2009/04/11(土) 23:09:26もちろん、できません。というか、半角文字であってもできません。シェルスクリプトでは。
0440名無しさん@お腹いっぱい。
2009/04/12(日) 02:07:240442名無しさん@お腹いっぱい。
2009/04/12(日) 03:30:32もう、書き込まないで一生ろむってろっっwww
趣旨があってねーYO。ぷぷぷ
0443名無しさん@お腹いっぱい。
2009/04/12(日) 09:21:490444名無しさん@お腹いっぱい。
2009/04/12(日) 11:28:35たしか、
for file in *
do
ある処理 "$file"
done
みたいな感じで、「ある処理」の部分を質問していた。
で、質問自体は解決していた。
解決後に、「それじゃダメ」みたいなことをいう人がいて、
何レスか続いたあと、結局「* じゃドットファイルが処理されない」ことを
言いたかったらしい。でも、質問者はforループ内の「ある処理」の部分について
質問したかっただけで、forの部分は質問のために参考に書いただけ
(実際のスクリプトではおそらく違うのだろう)
今回荒してる >>419 = >> 441 と同じ匂いがする。
0445名無しさん@お腹いっぱい。
2009/04/12(日) 11:36:340446名無しさん@お腹いっぱい。
2009/04/12(日) 17:03:020447名無しさん@お腹いっぱい。
2009/04/12(日) 17:57:53利点なのだから、特別な処理をするわけでもない一般的なスクリプト中では
単純に * と書くことが良い。
などと、さらにズレてて無意味なレスをしてみる。
0448名無しさん@お腹いっぱい。
2009/04/14(火) 00:22:500449名無しさん@お腹いっぱい。
2009/04/14(火) 13:21:520450名無しさん@お腹いっぱい。
2009/04/14(火) 14:44:570451名無しさん@お腹いっぱい。
2009/04/14(火) 15:53:160452名無しさん@お腹いっぱい。
2009/04/14(火) 22:14:330453名無しさん@お腹いっぱい。
2009/04/15(水) 00:32:23ガリが嫌いな女も居るぉ。
0454名無しさん@お腹いっぱい。
2009/04/15(水) 09:41:51ファイルの作成日付を取得する方法を教えてください。
sh使ってます。
0455名無しさん@お腹いっぱい。
2009/04/15(水) 09:50:55st_atime: ファイルのデータが最後にアクセスされた時刻。
st_mtime: ファイルのデータが最後に修正された時刻。
st_ctime: ファイルステータスが最後に変更された時刻 (inode データの修正)。
0456名無しさん@お腹いっぱい。
2009/04/15(水) 10:55:130457名無しさん@お腹いっぱい。
2009/04/15(水) 10:58:12ctimeは「ファイルの作成日付」だと広く混同されているので、
「ファイルの作成日付を取得してくれ」と要求した人が
本当は「ctimeを取得してくれ」という意味で言ったのなら、
ctimeを取得すれば桶。
だから ls -lc (ls -lc --fu # for GNU) (ls -lcT # for *BSD)( ls -lce for solaris)
0458名無しさん@お腹いっぱい。
2009/04/15(水) 11:15:50lsだとフォーマットが一定しないのでlsでやりたく無かったんですが(年が入ったり入らなかったりする)、
ls -lc 等だとその問題もないみたいです。
ありがとうございました。
0459名無しさん@お腹いっぱい。
2009/04/15(水) 11:22:41↑この方が環境依存性は小さくなる。
0460名無しさん@お腹いっぱい。
2009/04/15(水) 11:37:320461名無しさん@お腹いっぱい。
2009/04/16(木) 20:01:06perl入れてるなら何でも入れてもいいと思う。
0462名無しさん@お腹いっぱい。
2009/04/18(土) 04:32:11CUIで困らない程度に使えるレベルなんだけど、どういう順序でshスクリプトを学習するのがいいのでしょうか?
1 普段、使っているbashの仕様を理解する。例題をヒントにいくつか、書いてみる。
2 ちょっとした自動化できる作業は、意識的にshスクリプトを書いて、どんどん試してみる
3 別のOSを用意し、どちらの環境でも汎用的に使えるスクリプトを書く。普段、良く使うプログラムのいろいろな設定ファイルも極力同一のものにしてみる
4
5
3以降の先は、まったく想像つかないんだけど
0463名無しさん@お腹いっぱい。
2009/04/18(土) 05:36:49bashにもBash POSIX Modeってのがあるか。
コマンド類はまぁ気合で。
#busyboxあたりにposix互換モードがあると便利なのになぁ。
0464名無しさん@お腹いっぱい。
2009/04/18(土) 10:07:33shとbashの違い以前に、どこまで古いバージョンに対応するかという問題
もあるし、完全に汎用なシェルスクリプトを追求して、時間コストや労力
に見合う結果を得られるのだろうか。
結局、対応したいOSやバージョン、そこから限定されるシェルの種類とバ
ージョンを設定して、その範囲で動作するものを作るしかないし、動作確
認はその限定された環境で行えばよいのではないだろうか。
仕事なのか趣味なのかによっても違うだろうし。
0465名無しさん@お腹いっぱい。
2009/04/18(土) 10:44:46bashのPOSIX Modeでbashismは防げない。
でも、dashもPOSIX互換を標榜しつつ、細かいところで
POSIXの機能がなかったりする。
困ったね。
0466名無しさん@お腹いっぱい。
2009/04/18(土) 11:09:11Solarisの/bin/shのように、posix非対応のシェルが標準シェルになってるし、
posix準拠を基準にしてしまうと、「汎用的」ではなくなってしまう。
だから、posixは忘れるのが吉。
0467名無しさん@お腹いっぱい。
2009/04/18(土) 12:03:03手間がかかるけど、posix規格(または、何かの規格)を意識して書く事は、いいことでしょ?
個人的には方向性も大きく違っていないと思っているんだけど
もちろん、どうしても例外的な事例が発生して、それをどうするんだというのは、あるんだろうけど
Solarisは目の前に現れたら考える
とりあえず、総合すると自分がよく使うOSに対応して、ある要請があったら、そのOSの対応を考えて、
随時対処していく感じが労力と時間を考慮すると現実的になんですかね
100行程度の高機能ではない簡易スクリプトをとりあえず自分の狭い世界観で汎用的に
書くことを想定としています
shスクリプトを学習したい理由は、
・shの機能を通じて、UNIXを理解したいこと
・頻出する作業は自動化して労力を軽減したいこと
例え、コーディングのほうが結果的には労力かかったとしても
自分はまだ学習レベルなので労力が結果的にトントンなら大成功
汎用的に書きたい理由は、
・本でそう奨励しているから(?)w
・「汎用的に」書くって響きがかっこいいじゃん
・プログラマなら、ケースバイケースで汎用的書けないと恥ずかしいでしょ
・まあ、多少なりとも汎用性を意識して書くことは、悪いことにはならないよな
馬鹿ってかっこいいなあw
0468名無しさん@お腹いっぱい。
2009/04/18(土) 12:41:57後任者が全く理解できずに大惨事になってると風の噂で聞いたので反省している
文字のエンコードするのにiconv何発もかましたうえに\\\\\\\\とかやってるからなぁ
0469名無しさん@お腹いっぱい。
2009/04/18(土) 12:47:53やっつけ仕事ではなく、ちゃんと他人が読むためのわかりやすいコードを書いたんでしょ?
もちろん、ポイントポイントでコメントでの解説付きで
0470名無しさん@お腹いっぱい。
2009/04/18(土) 12:51:34前任者のすごさをアピールできる。
もちろん、コメントなど書いてはいけない。
0471名無しさん@お腹いっぱい。
2009/04/18(土) 12:59:24bashだって同じだろ
0472名無しさん@お腹いっぱい。
2009/04/18(土) 13:22:58一部修正することになって、ソースを読み込むことになったら、どのくらいの時間で
読めるものだろうか
また、他人が一部修正を任されることになって、読み込むことになって、どのくらいの時間で
読めるものだろうか
0473名無しさん@お腹いっぱい。
2009/04/18(土) 13:23:06コメントどころか基本設計詳細設計まである
要は複雑なshellの経験者って簡単に集められないから
なんでもshellでやるのもよくないねみたいな
0474名無しさん@お腹いっぱい。
2009/04/18(土) 13:36:100475名無しさん@お腹いっぱい。
2009/04/18(土) 13:40:18コメントもドキュメントも残さないこと。
リストラ時代の保身テクニックですな。
0476名無しさん@お腹いっぱい。
2009/04/18(土) 13:52:46そこまでやっているなら、問題ないと思うけどなあ
bashのバッチで書かずに何でやるのよ?
学習するチャンスだし、峠を越えたら、あとあと楽になりそうなんだが
今ならPython?
その反省を踏まえて、1から再設計するなら、どういう比率でどの言語でやるんですか?
0477名無しさん@お腹いっぱい。
2009/04/18(土) 13:54:18それで褒められるのはdjbみたいな教祖様だけだろ。
まあ、djb信者以外は誰も褒めないけどさ。
0478名無しさん@お腹いっぱい。
2009/04/18(土) 14:07:00シェルスクリプトなんて(大幅に譲歩して)100行を越えたら
別のスクリプト言語で書き直すべきだと思う。
それこそ、PythonでもRubyでも良いからさ。
0479名無しさん@お腹いっぱい。
2009/04/18(土) 14:09:060480名無しさん@お腹いっぱい。
2009/04/18(土) 14:54:27わかる気もするけど
Pythonをちょっとやったけど、クラス化、パッケージ化とか、ちゃんと理解していないんだよなあ
比較的に若い言語というのもあって、他の言語の良いところを取り入れて、すごく書きやすいし、保守しやすいしでいいんだけど、
Pythonで使える概念を全部使って書かれたものを、設計を理解して、他人が保守するとなると大変そうだよね
LL言語でもPerl派、Ruby派、Python派といるだろうし
使用する言語を感情論では決めるべきではないけど
Python派「Rubyを使うなら、コメントどころか基本設計詳細設計まであるbashのバッチでいいじゃん」という意見もあるだろうし
>>473の選択でよかったんじゃないかと思う
もちろん、LL言語でいくのもありだと思うし、後任者の労力的には大差ないと思うけどさ
0481名無しさん@お腹いっぱい。
2009/04/18(土) 14:58:540482名無しさん@お腹いっぱい。
2009/04/18(土) 23:05:09どんな言語だろうと大枠で理解できるよね。過不足なくコメントも付けてさ。
んで、\\\\ みたいなトリッキーな処理は、ちょっと詳しく説明をコメントで
書いてあげればいいはず。
これで理解できなければ後任者が無能、逆に上記のように作られてなくて、
C言語でいうところの、全部がグローバル変数だったり、main関数だけの
ような構造であれば前任者が無能。
ネット関連の超有名企業に勤めてるんだが、エラー処理もロクにない
クソスクリプトばっかりで笑ってしまうorz
0483名無しさん@お腹いっぱい。
2009/04/18(土) 23:15:01あと、「詳しく説明をコメントで書く」って言うけど、
書くなら当然英語で書くと言う意味で言ってるんだよね?
エラー処理をちゃんとやらなくても済んでしまうのがシェルスクリプトのいいところ。
0484名無しさん@お腹いっぱい。
2009/04/18(土) 23:47:59# 漏れは、局所化したいだけの理由でlocalが書けるbashスクリプトにしちゃうことあるけど。
英語でコメント書かないといけない理由は分からん。
エラー処理してなくてショボイ不具合が結構出るのも納得いかん。
0485名無しさん@お腹いっぱい。
2009/04/19(日) 00:42:21昔は、loop 系は sub-shell 起こすから loop 内部で宣言した
変数は loop 外から参照できないってのがあったんだが
0486名無しさん@お腹いっぱい。
2009/04/19(日) 00:54:53ならない高機能シェルもあるけどさ。
ループ外で変数が取得できないのは意外と不便w
0487名無しさん@お腹いっぱい。
2009/04/19(日) 01:29:35ベル研系の言語はどれもそうだな。
副作用禁止で退屈なコード書きましょうと教育された世代には
厳しいもんがあるよ
0488名無しさん@お腹いっぱい。
2009/04/19(日) 01:42:000489名無しさん@お腹いっぱい。
2009/04/19(日) 03:39:34awkやRATFORは当時凄くシンプルで仕様の美しい言語。
0490名無しさん@お腹いっぱい。
2009/04/19(日) 08:27:53> 英語でコメント書かないといけない理由は分からん。
当然社内に外国人担当者もいる。
書いたスクリプトが海外の支社に回ることもある。
コンソールなど日本語が通らない環境でもスクリプトを読みたい時がある。
シェルによってはコメントに日本語が入ったスクリプトをLANG=Cで実行すると発狂する
日本語だと、EUCかUTF-8かJISかSJIS(←これはないが)か悩む必要がある。
0491名無しさん@お腹いっぱい。
2009/04/19(日) 11:04:10コメント書くために時間かけられるよりは…
時間書けるのを避けるために嘘コメントが残るよりは…
というわけで、母国語のコメント推奨。
必要な時に翻訳すれば良い。
0492名無しさん@お腹いっぱい。
2009/04/19(日) 11:09:320493名無しさん@お腹いっぱい。
2009/04/19(日) 15:45:28\\\\の処理具体的にどういう話?
どんだけトリッキーなのか、簡単な処理でいいので解説してちょ
>>491
技術文書なんだから中学英語でいいじゃん
英語説明に不安なら同じ説明を違う言い方で二回書けばいいんじゃねえ?
それか、使い方の例を載せるとか
エロイ人は計詳細設計も英語onlyなのかな?
日本語でしっかり書いて、英語で簡単な説明を書くみたいな感じ?
>>491
母国語のコメント推奨とかいうヤツってマジで害悪だよ
母国語の説明に飢えているなら、readme_jp.txtで簡単な説明を書いてもらえいいんじゃない
0494名無しさん@お腹いっぱい。
2009/04/19(日) 16:03:59日本がいやなら出てけよ。
0495名無しさん@お腹いっぱい。
2009/04/19(日) 16:50:33cshで書いてしまったほうが圧倒的な汎用性を得られる。
0496名無しさん@お腹いっぱい。
2009/04/19(日) 16:56:24釣りとしても面白くない。
最近のLinuxには (t)cshがデフォではインストールされていない。
0497名無しさん@お腹いっぱい。
2009/04/19(日) 16:59:29さすがに論外なんじゃない?
それならLL言語で書いてもらったほうがいい。
Perlだとちょっとこわいけど。
0498名無しさん@お腹いっぱい。
2009/04/19(日) 17:13:56プログラマーの共通言語は英語。
0499名無しさん@お腹いっぱい。
2009/04/19(日) 17:25:261世紀ちょっと前にちょんまげを切ったんだから、そろそろ近代化しようぜ
0500名無しさん@お腹いっぱい。
2009/04/19(日) 17:49:34と表現したのを知らないの?
実際、そうだったわけだが。
今は、いくつなんだろうか。大学卒業したぐらい?
0501名無しさん@お腹いっぱい。
2009/04/19(日) 18:36:15それは民主主義の成熟度に対して言ったものなので
全然話が違いますがな。
0502名無しさん@お腹いっぱい。
2009/04/19(日) 18:43:050503名無しさん@お腹いっぱい。
2009/04/19(日) 19:03:28まぁその欧の中でも英国は大陸の神話とかに対し憧れとかあるらしいが。トールキンに
関する話によれば。
0504名無しさん@お腹いっぱい。
2009/04/19(日) 19:36:07明治になって、至ってまともな民主主義だったと言われているよ。
朝日だって最初は反戦だったけど、反戦だと売れないから戦争に賛成になったわけで。
本だって発禁されても、出版社は発禁本と逆に名乗って、商売して儲けたらしいし。
改憲派の中でも明治憲法が理想の人は結構多いと思うよ。
そりゃあ、西欧の民主主義と比べたら歴史の年数が違うから成熟したとは、言い難いし。
宗教や人種で30世紀近くさんざん揉めている国々との外交力の差は明らかだよね。
なんというシェルスクリプトスレw
明治憲法みたいに真面目に設計すればいいものはできるという話かw
後任者の保守運用が・・・
0505名無しさん@お腹いっぱい。
2009/04/19(日) 19:57:150506名無しさん@お腹いっぱい。
2009/04/19(日) 20:26:19奴隷制度現役だった国に言われたくはないわw
0507名無しさん@お腹いっぱい。
2009/04/19(日) 20:31:34法学板にでも行きなされ。うざいよ。
ところで、読む相手が日本人しかいないと分かってるスクリプトに
無理して英語でコメントを書くのは時間の無駄じゃないかな。
UTF-8で書いてあれば問題は起こらないわけだし。
0508501
2009/04/19(日) 21:01:45↓のような感じのPOPのLOGINログを抜き出したのが山のようにあります。
---
Apr 19 01:23:45 popsvr1 pop3d: [ID 232323 mail.info] LOGIN, user=hogehoge, ip=[192.168.1.2]
(popsvr1はホスト名、232323は固定値(再起動しない限り不変)です)
---
このログから「2009/04/19 01:23:45,hogehoge,192.168.1.2」のように
日時とユーザ名とIPアドレスを抜き出してCSVに変換したいのですが、
シェルスクリプトで高速に動かすうまい方法はないでしょうか?
# 年は今年(date +'%Y'で得られる年)とします。
とりあえずcutコマンド等をひたすら使った稚拙なスクリプトは作っては
みたものの、30万行ほどログを処理させると、Core2Duoのそこそこの
CPU環境でも20分ぐらいかかってしまいまつ。(´・ω・`)
何かうまい方法があったら教えてください。おながいします。
0509名無しさん@お腹いっぱい。
2009/04/19(日) 21:12:11とりあえず、kshで実行してみたら?
それでも遅いのなら、シェルスクリプトで実行すること自体が
問題なのだと思う。
0511名無しさん@お腹いっぱい。
2009/04/19(日) 21:26:41あえてシェルの内部コマンドだけで書いてみたよ。
↓
while IFS=' =,[]' read mon day time d1 d2 d3 d4 d5 d6 d7 user d8 ip
do
echo 2009/$mon/$day $time,$user,$ip
done
あと、Aprを 04に変換したりするのだけパイプで sed でやってね。
0512名無しさん@お腹いっぱい。
2009/04/19(日) 21:29:32そのスクリプトでトータル何行(未来の行数も含めて)のログを処理させたいの?
0513名無しさん@お腹いっぱい。
2009/04/19(日) 21:34:50そこまでできてるなら、echoの直前に
case $mon in Jan)mon=01;;Feb)mon=02;;Mar)mon=03;;Apr)mon=04;;..省略..;;esac
の行を入れれば sedも不要。全部シェルでできる。
0514501
2009/04/19(日) 21:43:29ありがとうございますた。参考にさせていただきまつ。m(__)m
>>512
今のところ30万行ぐらいなんですが、もしかしたら最大で
500〜600万行ぐらい処理するかもしれません。
0515名無しさん@お腹いっぱい。
2009/04/19(日) 23:05:25コメントに頼るレベルで、プログラムで飯喰おうってのが甘い気がする。
もちろん母国語的、得意な言語が有って、それで前任者のプログラム置き換えていけばいいと思うけどね。
前任者がシェルスクリプトで組んでても、修正出来ないじゃ、作り直すしか無いし。
汎用的なシェルスクリプトよりは、いろいろな環境の癖を知って臨機応変に組めたほうが重宝すると思う。
いろんな環境を体験する事かな。SunOS, Solaris, Linux(rhel系,フリー系), Windows(cygwin, interix)ぐらいかなあ。SunOSはもう流石に無いと思いたいwww
0516名無しさん@お腹いっぱい。
2009/04/19(日) 23:15:44つ http://pc12.2ch.net/test/read.cgi/unix/1012927963/
0517名無しさん@お腹いっぱい。
2009/04/20(月) 01:23:45うちのところにもこういう人います。
意外と仕事が雑なんですよね・・・
0518名無しさん@お腹いっぱい。
2009/04/20(月) 01:57:50Apr 19 01:23:45 popsvr1 pop3d: [ID 232323 mail.info] LOGIN, user=hogehoge, ip=[192.168.1.2]をただ300万行コピペしたファイルをうちの並のマシンで1分38秒出た
メモリも喰わないし、シェルスクリプトってかなりいいタイム出すんだね
$ time ( cat pop-300.txt | ksh 2ch-shell-20090419a-foo.sh >> pop-300.cvs ) &
[7] 27015
$
real 1m38.872s
user 0m26.174s
sys 1m12.485s
[7] Done time ( cat pop-300.txt | ksh 2ch-shell-20090419a-foo.sh >> pop-300.cvs )
$ wc pop-300.cvs
300000 600000 12900000 pop-300.cvs
$ tail pop-300.cvs
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
2009/04/19 01:23:45,hogehoge,[192.168.1.2]
0519518
2009/04/20(月) 02:23:18こんなに違うのか
$ time ( cat pop-300.txt | sh 2ch-shell-20090419a-foo.sh >> pop-300.cv2 ) &
real 5m45.010s
user 4m31.791s
sys 1m11.200s
$ time ( cat pop-300.txt | bash 2ch-shell-20090419a-foo.sh >> pop-300.cv3 ) &
real 5m47.776s
user 4m34.900s
sys 1m12.200s
0520名無しさん@お腹いっぱい。
2009/04/20(月) 02:31:55------------------------
echo aaa
echo ""
echo ""
echo ""
echo ""
echo ""
echo bbb
------------------------
以上のようにしているのですが、もっとエレガントな方法ってないですか?
イメージ的には
echo "" * 5
ってやると空行が五行文出力されるようなものです。
0521名無しさん@お腹いっぱい。
2009/04/20(月) 02:54:54for i in `seq -w 5`; do echo ""; done
echo "bbbb"
for i in "" "" "" "" ""; do echo $i; done
echo "cccc"
printf "\n"; printf "\n"; printf "\n"; printf "\n"; printf "\n";
echo "dddd"
echo; echo; echo; echo; echo;
echo "eeee"
# どれか?
# というか、普通にecho ""を縦に並べたほうがみやすいんじゃないの?
0522名無しさん@お腹いっぱい。
2009/04/20(月) 03:11:36自己レスだけど;(セミコロン)は、C言語としての文の終わりとしての意味合いの記号じゃないから、;は入れないほうが望ましいって本に書いてあったな
なにかあるってわけじゃないんだろうけど
printf "\n"; printf "\n"; printf "\n"; printf "\n"; printf "\n"
echo "dddd"
echo; echo; echo; echo; echo
echo "eeee"
0523名無しさん@お腹いっぱい。
2009/04/20(月) 07:06:131個のechoで、改行含めて見たままシングルクォートにするのがエレガント。
echo 'aaa
bbb'
以上
0524名無しさん@お腹いっぱい。
2009/04/20(月) 07:17:56echo -e "aaaaa\n\n\n\n\nbbbbb"
>>523
シングルクォートの意味はあるんですか?
あとでダブルクォートを入れやすくするため?
0525名無しさん@お腹いっぱい。
2009/04/20(月) 07:25:46不用意な展開を防ぐため。
基本はすべてシングルクォート。
$HOGE とか `com` とか、展開が必要な時のみダブルクォート、というのがルール。
0526名無しさん@お腹いっぱい。
2009/04/20(月) 07:44:04さんくす
もっといっぱい本を読んで、写経します
0527名無しさん@お腹いっぱい。
2009/04/20(月) 09:31:41kshの速さを実感して貰えて何より。
いまいちマイナーなのが不思議だったりする。
0528名無しさん@お腹いっぱい。
2009/04/20(月) 12:48:180529名無しさん@お腹いっぱい。
2009/04/20(月) 12:58:57昔はこぞってみんな使ってたんだぜ。
bashがなかった時代だけど。
0530名無しさん@お腹いっぱい。
2009/04/20(月) 13:16:27自分ルールを標準のごとく言ったりエレガントとか言うのはどうかと思う
520〜523までなら後から見たときや他人が書いたものを見たとき520が一番見やすい
echo の内容を | を通して渡す為に >>523 にしたというならともかく(この場合でも他に方法はいくらでもあるけど)
0531名無しさん@お腹いっぱい。
2009/04/20(月) 14:16:51マイナーという
0532名無しさん@お腹いっぱい。
2009/04/20(月) 14:17:410533名無しさん@お腹いっぱい。
2009/04/20(月) 14:35:10なぜかOpenBSDで使われているShellって感じですね
2000年まで、Korn shell は AT&T の権利保有するソフトウェアであった。その後AT&T独自
のライセンスの下でオープンソースとなり、2005年から Common Public License での配布
となった。Korn shell は AT&T Software Technology (AST) Open Source Software
Collection の一部として入手可能である。
と書いてあるけど、2000年以前は無料で使えなかったんでしょうか?
10年前ぐらい訳本には商用うんぬんと書いていないから15年前ぐらいからは入手的には困らなかったんだろうか
OpenBSD誕生が1996年みたいだけど、標準Shellは、なんだったのだろうか
最初からksh?
あとなんちゃってUNIXユーザーとしては、知名度だと
bash >>> sh >= zsh >= tcsh >> csh > ksh ぐらい違う
それ以外のマイナーなShellは、自分の中に存在しません
>>529
bash誕生が1987年、Linux誕生が1991年なんですけど、簡単にbashは入手しづらかったんでしょうか?
>>531
Linuxだと標準では入っていないけど、kshは入れるものなんでしょうか?
ビジネスでの普及度はどんな感じなんですか?
対話シェルはbashとか、他のなにかでshスクリプトの実行はkshって感じなんでしょうか?
それともshに対応しないkshスクリプトを書くの?
>>532
今でもひそかなファンが多いし、重宝されていると言えばいいのかな
0534名無しさん@お腹いっぱい。
2009/04/20(月) 14:40:33>それともshに対応しないkshスクリプトを書くの?
普通書かない。
shに対応しないkshスクリプトの代表例と言えば [[ ]] の記述。
sh的には if [ "$hoge" = fuga ]; then と書くところを、
kshでは if [[ "$hoge" == fuga ]]; then と書く。
でも、こんなの滅多に見ないだろ。それほど kshはマイナー。
0535名無しさん@お腹いっぱい。
2009/04/20(月) 15:02:26Linuxには入れちゃうよーん
0536名無しさん@お腹いっぱい。
2009/04/20(月) 15:27:090537名無しさん@お腹いっぱい。
2009/04/20(月) 16:31:480538名無しさん@お腹いっぱい。
2009/04/20(月) 16:35:48特に自社システムじゃなく受託開発なら
トラブル時に責任問題にもなる
0539名無しさん@お腹いっぱい。
2009/04/20(月) 16:39:400540名無しさん@お腹いっぱい。
2009/04/20(月) 16:41:470541名無しさん@お腹いっぱい。
2009/04/20(月) 16:43:27具体的には?
0542名無しさん@お腹いっぱい。
2009/04/20(月) 16:57:46それぞれのベンダが提供しているやつ
0543名無しさん@お腹いっぱい。
2009/04/20(月) 17:08:150544名無しさん@お腹いっぱい。
2009/04/20(月) 17:21:190545名無しさん@お腹いっぱい。
2009/04/20(月) 21:06:27プログラム 'ksh' は以下のパッケージで見つかりました:
* ksh
* mksh
* zsh
* pdksh
次の操作を試してください: sudo apt-get install <選択したパッケージ>
やはりここはpdksh?
0546名無しさん@お腹いっぱい。
2009/04/20(月) 21:46:52起動からの経過時間でなく、起動日時です。
出来ればシリアル値(1970からの経過秒)で取得できれば嬉しいです。
uptimeの結果から計算するのは起動からの経過時間によってフォーマットが
(daysやminが付いたり、付かなかったり)違うため出来れば避けたいです。
GNU、bash依存でもかまいません。
0547名無しさん@お腹いっぱい。
2009/04/20(月) 21:52:230548名無しさん@お腹いっぱい。
2009/04/20(月) 21:56:220549名無しさん@お腹いっぱい。
2009/04/20(月) 21:58:370550名無しさん@お腹いっぱい。
2009/04/20(月) 22:14:36GNU 依存でいいなら、
date -r /
(ルートディレクトリのタイムスタンプは起動時に touchされて
その後書き込みは普通は発生しないことを利用)
0551名無しさん@お腹いっぱい。
2009/04/20(月) 22:18:322009年 2月 6日 金曜日 21:12:47 JST
ずれまくりワロタ
0552名無しさん@お腹いっぱい。
2009/04/20(月) 22:24:36好きにすればいいじゃない
0553名無しさん@お腹いっぱい。
2009/04/20(月) 22:31:52OpenBSD on VMware on WindowsXPでやったら、Thu Jan 1 09:00:00 JST 1970になった
まあ、OpenBSD on VMwareだからしゃないやな
0554553
2009/04/20(月) 22:46:48Scientific on VMware,Fedora11 on VMwareだとちゃんと出るんだな
まあ、どうでもいい話でした
0555501
2009/04/21(火) 00:03:03ただしおいらの環境だと、>>511さんのプログラムのままでは
2009/04/19 01:23:45,user,ip=[192.168.1.2]
のような結果になってしまうので、whileのダミー引数を増やしました。
最終的にこんな感じにしますた。
(※全角スペースでインデントしています)
----
#!/usr/local/bin/ksh
YEAR=`date +'%Y'`
while IFS=' =,[]' read mon day time d1 d2 d3 d4 d5 d6 d7 d8 user d9 d10 ip d11
do
case $mon in
Jan)mon=01;; Feb)mon=02;; Mar)mon=03;; Apr)mon=04;;
May)mon=05;; Jun)mon=06;; Jul)mon=07;; Aug)mon=08;;
Sep)mon=09;; Oct)mon=10;; Nov)mon=11;; Dec)mon=12;;
esac
echo $YEAR/$mon/$day $time,$user,$ip
done
----
0556501
2009/04/21(火) 00:07:41スクリプトの実行速度なんですが、約10万行のログを処理したところ、
kshではなんと4秒で終わっちゃいました。
ちなみに/bin/shで動かしたら、27秒もかかっちゃいまして、
処理性能の違いに驚いた次第であります。
おまいら、ありがとうございますた。
0557名無しさん@お腹いっぱい。
2009/04/21(火) 01:03:04ちなみにOSは?
0558名無しさん@お腹いっぱい。
2009/04/21(火) 01:13:39報告おつ
比較をわかりやすく、30万行じゃないのねw
6.75倍はすごいね
0559501
2009/04/21(火) 01:26:31処理時間を計ったのはVMware上で動いているFreeBSD7.1ですが、
Solaris9(SPARC)でも動くのは確認しますた。
>>558
手元にあったのが10万行のログだったので、
とりあえずこれで試しますた。
深い意味はありませんw
0560名無しさん@お腹いっぱい。
2009/04/21(火) 01:31:08こんなのどうかな。
GNU依存だし、動かないパターン多そうだけど。
$ last | grep '^reboot' | head -1 | awk '{print $5" "$6" "$7" "$8}' | date -f - '+%s'
0561名無しさん@お腹いっぱい。
2009/04/21(火) 01:40:080562名無しさん@お腹いっぱい。
2009/04/21(火) 01:50:16wtmp って1月分しか残らないんだっけ?
そう言えば、/proc/uptime はサイズどれだけ有るんだっけ(溢れることはない?)?
0563名無しさん@お腹いっぱい。
2009/04/21(火) 03:07:540564名無しさん@お腹いっぱい。
2009/04/21(火) 03:55:340565名無しさん@お腹いっぱい。
2009/04/21(火) 07:16:33たとえば、
echo $((x > 0 ? x: -x))
とか。
0566名無しさん@お腹いっぱい。
2009/04/21(火) 07:38:41A && (B; true) || C
かと。
0567名無しさん@お腹いっぱい。
2009/04/21(火) 08:20:54アフォか。
それは普通の「2項」の演算子の組み合わせ。
しかも、bash限定でもない。
>>565 が正解。
0568名無しさん@お腹いっぱい。
2009/04/21(火) 09:59:52>>567は>566に輪をかけたアフォ。
「bashで」というお題は「bash以外では動作しない == bash限定」事を要求していない。
0569名無しさん@お腹いっぱい。
2009/04/21(火) 10:53:47はりきるだけだから
0570名無しさん@お腹いっぱい。
2009/04/21(火) 11:12:24ここでのベンチ(kshとbash)は、ライブラリが動的か静的かよりもはるかに大きい
差を生じているので、そんな点を指摘しても無意味。
さらにアフォな点は、バイナリは「スタティックリンク」の方が速い(有利)ということ。
>>564 は全く逆に覚えてるようだね。
0571名無しさん@お腹いっぱい。
2009/04/21(火) 12:34:230572名無しさん@お腹いっぱい。
2009/04/21(火) 12:40:45素で質問してるならぐぐれ。
釣りなら面白くない。
0573名無しさん@お腹いっぱい。
2009/04/21(火) 13:33:19以下のスクリプトでエラーが出ます。
num=1
for file in *.m4a; do
mv $file $num.m4r
num=`expr $num + 1`
done
エラーは
mv: target `1.m4r' is not a directory
というものです。
シェルというよりmvコマンドの使い方の問題なのかもしれませんが
自分には原因がわかりません
教えてください
0574名無しさん@お腹いっぱい。
2009/04/21(火) 13:42:53共有ライブラリは間接呼出しになる。
0575名無しさん@お腹いっぱい。
2009/04/21(火) 13:44:59スペース入りファイル名が分割されて、
mv hoge hage.m4a 123.m4r
みたいに実行されたのが原因。
シェル変数の展開時には原則すべてダブルクォートを付けること。
mv "$file" "$num.m4r"
0576名無しさん@お腹いっぱい。
2009/04/21(火) 13:45:06ファイル名に空白(やタブ等)が含まれているのだろう。
mv "$file" $num.m4r
0577名無しさん@お腹いっぱい。
2009/04/21(火) 14:04:48>>576
なるほど、そういうことだったんですか!
まさにその通りで、ファイル名にスペースが入っていました。
ありがとうございます!
0578名無しさん@お腹いっぱい。
2009/04/21(火) 21:57:17すごく適当ですが・・・・こんな感じで OS ごとに書くしかないかと。
case `uname -s` in
'Linux')
grep btime /proc/stat | cut -d ' ' -f 2
;;
'FreeBSD')
cut -d ' ' -f 8 /proc/1/status | cut -d ',' -f 1
;;
*)
;;
esac
0579名無しさん@お腹いっぱい。
2009/04/22(水) 05:32:25ダイナミックが遅いなら、みんなダイナミック使ってないwww
perlとかも普通はダイナミック。
0580名無しさん@お腹いっぱい。
2009/04/22(水) 06:10:01オマエ真性の勘違い野郎か。
スタティックリンクでも全部は読み込まない。
仮想記憶って知ってるか?
バイナリプログラムのうち、実際にCPUのプログラムカウンタが走った命令のアドレス
を含むメモリページのみが読み込まれる。実行されなかった部分は読み込まれない。
ダイナミックリンクのライブラリは、リロケーションの関係で、
PIC(ポジションインディペンデント)にコンパイルする必要があり、
PIC自体が通常のバイナリよりも数%遅い。
ライブラリのキャッシュについては確かにいうとおりだが、
これは他の要素に比べて影響は小さいので、
やはりダイナミックリンクの方が遅い。
ダイナミックリンクは遅いが、HDDの節約や、ライブラリのupdateの際に
リンクしてる個々のバイナリを再コンパイルしなくて良い便宜のために
使用されている。どうしても速度優先の場合は、
スタティックリンクを使うことがあるよ。
0581名無しさん@お腹いっぱい。
2009/04/22(水) 06:36:28ライブラリは複数の関数の集まりでできているが、
スタティックリンクの場合、それらの関数のうち、使用している関数だけが
コンパイル(ld)時にリンクされる。使っていない関数はそもそもリンクされない。
(使っていても条件によって呼び出されなかった関数は
仮想記憶によってメモリにはロードされないままになる可能性があるのは
>>580 がいう通り)
ダイナミックリンクの場合は、使っていない関数まで
実行時に塊で付いてきてしまう。
0582名無しさん@お腹いっぱい。
2009/04/22(水) 06:57:20それよりもバイトコンパイルやらコマンド組み込みやらの方が効果でかいはず。
0583名無しさん@お腹いっぱい。
2009/04/22(水) 07:57:48間違った知識ばらまいてないで、実験してみればいいのに。
$ cat hoge.c
#include <stdio.h>
int main(){printf("Hello¥n");return 0;}
$ gcc -o dynamic hoge.c
$ gcc -o static hoge.c -static
$ time ./dynamic
Hello
real 0m0.004s
user 0m0.000s
sys 0m0.001s
$ time ./static
Hello
real 0m0.002s
user 0m0.000s
sys 0m0.000s
スタティックリンクの方が速いね。
0584名無しさん@お腹いっぱい。
2009/04/22(水) 09:15:01ミリ秒オーダでしか違わないんじゃほとんどの場合は
そんなこと気にするよりまともなプログラム書いたほうが
いいなw
0585名無しさん@お腹いっぱい。
2009/04/22(水) 09:37:11dynamicもstaticも「ほとんど違わない」ので、それ以外の要素による違いの方が大きい
ということは元々 >>570 が指摘してる。(こっちが要点)
それ以外に、>>564 は「ダイナミックの方が速い」と間違ってることを言ってるるので、
それをついでに指摘しただけ。
で、>>579 で未だに「ダイナミックの方が速い」の主張を続けるから、
>>580 がそれを否定しているだけ。
別に>>580 が、シェルスクリプトのシェルをスタティックにしろと主張している
わけではない。
元の質問に戻って、>>508 の場合、外部コマンドの cutの呼び出しが多数ループ
されるので、それが遅かったのが原因と思われる。
>>511 はシェルの内部コマンドだけを使っているので、それで激劇に速くなったと。
いすれにしても、その話の流れを読まずに
>>564 で見当違いかつ間違った指摘をしている >>564 はアフォ。
0586名無しさん@お腹いっぱい。
2009/04/22(水) 10:22:55> ライブラリのキャッシュについては確かにいうとおりだが、
> これは他の要素に比べて影響は小さいので、
> やはりダイナミックリンクの方が遅い。
嘘八百のおバカさん
0587名無しさん@お腹いっぱい。
2009/04/22(水) 10:31:05主張する内容自体に問題くても、必死すぎるとキモいものだな...
まあ落ち着け。
0588名無しさん@お腹いっぱい。
2009/04/22(水) 10:35:53>>579 は perlの「ダイナミックロード」のライブラリ(モジュール)の話と
混同してるフシがあるな。(わざわざ的外れなperlを例に持ち出してきてるあたり)
>>579 にとって、「ダイナミック」とは、perlでしかイメージできてなくて、
普通にCをコンパイルする時のstatic linkとdynamic linkを違いを
全く理解できてない(存在自体知らない?)んだろう(笑)
0589名無しさん@お腹いっぱい。
2009/04/22(水) 10:49:32問題です。
Ubuntuでは、dashをビルドする際に、libcを使わずdietlibcに変更した上で、
スタティックリンクしています。これはなぜでしょうか。
ヒント:Ubuntuでは/bin/shとしてdashを使っています。
0590名無しさん@お腹いっぱい。
2009/04/22(水) 11:07:22スタティックリンクの方が速いからではない。
そもそも速くないし。
0591名無しさん@お腹いっぱい。
2009/04/22(水) 11:11:36>そもそも速くないし。
↑
は間違い。実際速い。
それ以外にstatic linkにする利点と、さらにdietlibcに変更する理由を質問してる。
>>590 では答えになっていない。
ハイ、答え直し >>590 >>584
↓
0592名無しさん@お腹いっぱい。
2009/04/22(水) 11:12:45ちゃんと自分の頭を使って自分の体を動かして自分の目で確認しろよ。
0593名無しさん@お腹いっぱい。
2009/04/22(水) 11:31:22NSS まわりとかで必要があれば勝手にダイナミックでリンクしちゃうから
わりとどーでもいい。
0594名無しさん@お腹いっぱい。
2009/04/22(水) 11:47:34争点をぼかすことになるから、ここでは dlopen()系の話は持ち込まない方が
話が簡単になるかと。どうせあほは >>579 1人だろうし。
0595名無しさん@お腹いっぱい。
2009/04/22(水) 12:33:36しかもdietlibcはLGPLでなくGPLなのでダイナミックリンクでも汚染する。
0596名無しさん@お腹いっぱい。
2009/04/22(水) 12:35:04すさまじい勘違いだなw
0597名無しさん@お腹いっぱい。
2009/04/22(水) 12:38:47このオーダーも特に速度が必要な場合は馬鹿に出来ないよ。
まぁ、dynamicかstaticかの違いより、根本的な設計の方がよっぽど大きいけど。
0598名無しさん@お腹いっぱい。
2009/04/22(水) 12:49:51ミリ秒オーダーの起動オーバヘッドが問題になるほど実行時間の
短いプログラムを何度も起動するのはそもそも設計が悪いよね
0599名無しさん@お腹いっぱい。
2009/04/22(水) 12:59:45オーバヘッドは「プログラム起動時」だけじゃないよ。
dynamicなライブラリ上の関数を呼び出すたびにオーバーヘッドがかかる。
さらに、関数自体がPICによって速度上不利なコードで書かれているから遅くなる。
staticライブラリなら、プログラム中に絶対アドレスを決めうちで持つから、
その分のオーバーヘッドがなく高速動作する。
0600名無しさん@お腹いっぱい。
2009/04/22(水) 13:10:18結論ありきというか
そうでないと世界が崩壊しちゃうんだろうね
0601名無しさん@お腹いっぱい。
2009/04/22(水) 13:18:31今まで「ダイナミックリンクの方が速い」と間違って覚えていて
散々恥を晒した気分はどうだい? >>600 = >>579
0602名無しさん@お腹いっぱい。
2009/04/22(水) 13:22:13自己紹介乙。
そうか、今までdynamicの方が速いと信じこんでいて、それが間違いだと知って
キミの世界が崩壊しちゃったのか、、よしよし
0603名無しさん@お腹いっぱい。
2009/04/22(水) 13:50:410604名無しさん@お腹いっぱい。
2009/04/22(水) 17:24:320605名無しさん@お腹いっぱい。
2009/04/22(水) 23:37:030606名無しさん@お腹いっぱい。
2009/04/22(水) 23:52:09ま、次から間違えないようにすれば良いじゃないか。
0607名無しさん@お腹いっぱい。
2009/04/23(木) 22:37:10という場合のsedをひとつにできますか?
0608名無しさん@お腹いっぱい。
2009/04/23(木) 22:43:22echo aaabbbccceee | sed 's/aaa//;s/ccc//'
0609名無しさん@お腹いっぱい。
2009/04/23(木) 22:55:44$ alias ひとつ=sed
$ echo aaabbbccceee | ひとつ 's/aaa//' | ひとつ 's/ccc//'
0610名無しさん@お腹いっぱい。
2009/04/23(木) 23:29:400611名無しさん@お腹いっぱい。
2009/04/24(金) 00:10:17個人的には、見やすさも考えてこんな風に書くこと多いかな。
sed -e 's/afo/moe/g' \
-e 's/unko/umai/g' \
-e 's/ahya/uhyo/g'
あと、文字列に / がいっぱい入るときは \/ じゃなくって、そもそも / を使わない。
s|/afo/desu/yo|/unko/tabe/tai/ne|
0612名無しさん@お腹いっぱい。
2009/04/24(金) 00:41:350613名無しさん@お腹いっぱい。
2009/04/24(金) 06:46:280614名無しさん@お腹いっぱい。
2009/04/24(金) 09:27:04カーソル戻さなくていい分楽なのでついやっちゃうんだよな...
0615名無しさん@お腹いっぱい。
2009/04/24(金) 11:10:54実行速度が大きく違う時がある
-e よりは sed | sed | sedの方が速いときもある
ケースバイケースでしょ
0616名無しさん@お腹いっぱい。
2009/04/24(金) 11:47:58インターネットで俺の悪口を言うのは止めてくれないか ><
0617名無しさん@お腹いっぱい。
2009/04/24(金) 12:46:500618名無しさん@お腹いっぱい。
2009/04/24(金) 19:58:34ただひとつの場合-eはなくてもいいのに複数の場合は必須なんですね?
0619名無しさん@お腹いっぱい。
2009/04/24(金) 20:08:32>>608 の形式なら -e は不要。
0620名無しさん@お腹いっぱい。
2009/04/24(金) 23:03:440621名無しさん@お腹いっぱい。
2009/04/25(土) 04:52:340622名無しさん@お腹いっぱい。
2009/04/25(土) 09:27:360623名無しさん@お腹いっぱい。
2009/04/25(土) 09:49:23sed 's/afo/moe/g;s/unko/umai/g;s/ahya/uhyo/g'
よりも、
sed | sed | sed の方が速いことはあり得ない。
×ケースバイケース
○ >>615 の負け惜しみ
0624名無しさん@お腹いっぱい。
2009/04/25(土) 10:29:360625名無しさん@お腹いっぱい。
2009/04/25(土) 12:07:39>>615 は一言で言い表すために -e って言っただけだろ。
-e でも>>623 でも同じこと。
まとめると、
>>611 (-e) または >>623 の方が速い。
間違っても、>>615 が言う sed | sed | sed の方が速くなるケースは無い。
0626名無しさん@お腹いっぱい。
2009/04/25(土) 16:57:49まあsed実行中もshellが居座ってるのもなんだかなあだけど。
0627名無しさん@お腹いっぱい。
2009/04/25(土) 17:41:53そのshell分、ちょっぴりメモリを食うだけでしょ
他になんかデメリットってあるんでしょうか?
0628名無しさん@お腹いっぱい。
2009/04/25(土) 18:30:210629名無しさん@お腹いっぱい。
2009/04/25(土) 18:32:170630名無しさん@お腹いっぱい。
2009/04/25(土) 18:46:52exec command
とやって、forkせずにシェルをコマンドに化けさせられる。
2つ以上のコマンドをパイプする場合は、execが使えない。
敢えて exec を付けても無意味。実験してみればわかる。
0631名無しさん@お腹いっぱい。
2009/04/25(土) 22:25:150632名無しさん@お腹いっぱい。
2009/04/26(日) 01:12:310633名無しさん@お腹いっぱい。
2009/04/26(日) 01:20:050634名無しさん@お腹いっぱい。
2009/04/26(日) 02:03:58そりゃFortran・COBOL・Lispが未だに現役なわけだし。
0635名無しさん@お腹いっぱい。
2009/04/26(日) 05:23:42今時オンデマンドでリアルタイムで処理しろよって感じだが。
0636名無しさん@お腹いっぱい。
2009/04/26(日) 06:47:10まぁ世の中、夜間のバッチ処理に向いてる(リアルタイムに向かない)
処理もある訳で、ホストもバッチ処理もそう簡単には無くならんでしょうな。
0637名無しさん@お腹いっぱい。
2009/04/26(日) 22:31:52bash 3.5, ksh 3.5, zsh 2, csh(tcsh) 1って感じだった
他のマイナーなShellは出てこず
kshの良い点としてvi-likeの編集機能を何名かがあげていたんですけど、そんなに便利なんでしょうか?
0638名無しさん@お腹いっぱい。
2009/04/26(日) 22:47:320639名無しさん@お腹いっぱい。
2009/04/27(月) 02:51:03vi `locate filename.sh`
クドイほどtips and 例文満載の文書ってないのかな
0640名無しさん@お腹いっぱい。
2009/04/27(月) 04:44:20弱い犬ほど良く吠えるから
発言が活発=利用者が多い
じゃないよ
cshやbash以外は普及してるかと言われればそうでもない
0641名無しさん@お腹いっぱい。
2009/04/27(月) 06:35:18/bin/shの実体が何かによって利用者の数は決まる気がする。
0642名無しさん@お腹いっぱい。
2009/04/27(月) 09:32:46vi +/PATTERN `egrep -l PATTERN *`
ってのは良くやるからシェルスクリプトにしてる。
0643名無しさん@お腹いっぱい。
2009/04/27(月) 23:29:030644名無しさん@お腹いっぱい。
2009/04/28(火) 00:07:22結局公開されたkshにはその機能がなくて一度も見ることなく終わったのだが、
どんなもんだったか証言できる人はいますか?
これが使えていたらTcl/Tkとかたぶんやってなかった。
0645名無しさん@お腹いっぱい。
2009/04/28(火) 01:11:38DeskTop Korn SHellな。
http://www.brendangregg.com/DtkshDemos/xpong
0646名無しさん@お腹いっぱい。
2009/04/28(火) 10:24:050647名無しさん@お腹いっぱい。
2009/04/28(火) 15:36:56トン。dtkshだったのか。いままで検索しても画面を拝めなかったので
もう見ることはないかと思ってたよ。おかげで
http://docs.sun.com/app/docs/doc/805-3917/6j3niaoaf?l=Ja&a=view
のプログラミングマニュアルでコードとか動作を初めて拝めた。
Solarisは使ってるけど/usr/dtとかまず使わないからまったく知らなかった。
もしかしてOpenSolarisにも入っているのだろうか・・・
Xツールキットの関数とオプションのまんまラッパーだったんだな。
今見るとベタで微笑ましい位。さすがにスクリプトででもXtは使いたいとは
もう思えないが、当時使えていたらハマッただろうなぁ。
0648名無しさん@お腹いっぱい。
2009/04/28(火) 18:39:57/tmp/old まであるディレクトリ構造で
単純に/tmpディレクトリにあるファイルリストをテキストで出したいのだけど
ディレクトリや隠しファイルの表示は入れたくない
どんなコマンドつかえばできる?
lsやfindでいろんなオプションつけてやってみたけど無理だった
たぶんすごく単純なところで引っ掛かってる気がするので、わかる方いたら教えてください
0649名無しさん@お腹いっぱい。
2009/04/28(火) 19:27:000650名無しさん@お腹いっぱい。
2009/04/28(火) 19:29:16隠しファイルの表示は入れたくない
0651名無しさん@お腹いっぱい。
2009/04/28(火) 19:30:52cd /tmp; for file in *; do [ -f "$file" ] && echo "$file"; done
0652名無しさん@お腹いっぱい。
2009/04/28(火) 19:38:57くだ質スレでほぼ解決してるからここ見に来るとは思わんけど。
0653名無しさん@お腹いっぱい。
2009/04/28(火) 19:42:22find内で.*を排除するのは無駄だろ。
せっかく内部コマンドだけでできるのに。
0654名無しさん@お腹いっぱい。
2009/04/28(火) 19:44:13あっちでやってるのは、find「内」じゃないだろ。
findの「外」のパイプに出してからあとからカットしてる。ノンエレガント。
0655名無しさん@お腹いっぱい。
2009/04/28(火) 19:47:52よりも、
シェル内部コマンドのみ
の方が速いわな。
0656名無しさん@お腹いっぱい。
2009/04/28(火) 19:49:47find方式だと、「hoge<改行>.hoge」みたいなファイル名があった場合、誤動作する。
>>651 方式なら無問題。
0657名無しさん@お腹いっぱい。
2009/04/28(火) 20:17:44外部コマンドなシェルだとパフォーマンス最悪
0658名無しさん@お腹いっぱい。
2009/04/28(火) 20:39:130659名無しさん@お腹いっぱい。
2009/04/28(火) 21:12:44$ touch foo\\bar
$ for file in *; do [ -f "$file" ] && echo "$file"; done
foar
0660名無しさん@お腹いっぱい。
2009/04/28(火) 21:12:510661名無しさん@お腹いっぱい。
2009/04/28(火) 21:14:33for f in *; do [ -f "$f" ] && printf '%s¥n' "$f"; done
0662名無しさん@お腹いっぱい。
2009/04/28(火) 21:30:00v7sh
echoも外出し。
0663名無しさん@お腹いっぱい。
2009/04/28(火) 21:33:48FreeBSD tcsh
% which [
/bin/[
0664名無しさん@お腹いっぱい。
2009/04/28(火) 21:48:08>>661 で for文使ってるのが見えねぇのかよw
>>662
v7は「現存」しない。
0665名無しさん@お腹いっぱい。
2009/04/28(火) 21:51:340666名無しさん@お腹いっぱい。
2009/04/28(火) 21:55:13やっぱり「現存」しないじゃん。
わざわざ作らなきゃいけないんだから。
0667名無しさん@お腹いっぱい。
2009/04/28(火) 21:57:57「testやechoが外部コマンドの場合もある」って主張してる人、
実際そんな古いシェルを「ログインシェル」または「スクリプトシェル」として
現役で使ってるの?
使ってないのに机上の空論してもしょうがないよ。
0668名無しさん@お腹いっぱい。
2009/04/28(火) 22:02:390669名無しさん@お腹いっぱい。
2009/04/28(火) 22:08:53for f in *; do (cd "$f") 2> /dev/null || echo "$f"; done
Permission deniedなディレクトリがあったら誤判定されるのは仕方ない。
0670名無しさん@お腹いっぱい。
2009/04/28(火) 22:14:47> 誤判定されるのは仕方ない。
> 誤判定されるのは仕方ない。
> 誤判定されるのは仕方ない。
0671名無しさん@お腹いっぱい。
2009/04/28(火) 22:16:41v7sh
cdも外出し。
0672名無しさん@お腹いっぱい。
2009/04/28(火) 22:29:15誤判定されない方法を考えてみた。
for f in *;do case `(cd "$f") 2>&1` in *'Not a directory')echo "$f";;esac; done
0673名無しさん@お腹いっぱい。
2009/04/28(火) 22:56:37> もしかしてOpenSolarisにも入っているのだろうか・・・
入ってない。TODOリストに入っているが、
ライセンス関係で新たに作らないといけない。
CDE/Motifべったりだから誰もやらないだろう。
>>666
わざわざエミュレータで動かしてます。
「現存」してないです。とあなたは言うでしょうけど。
0674名無しさん@お腹いっぱい。
2009/04/29(水) 01:06:420675名無しさん@お腹いっぱい。
2009/04/29(水) 02:37:45美しくないな。
なんてこと言う奴はrcを使えってことか
0676名無しさん@お腹いっぱい。
2009/04/29(水) 05:58:40> v7は「現存」しない。
うちでは fpga で作った pdp-11 互換 CPU 上で元気に動いてますけど
0677名無しさん@お腹いっぱい。
2009/04/29(水) 05:59:43寝言は寝てから言ってね
0678名無しさん@お腹いっぱい。
2009/04/29(水) 06:49:51それを「現存しない」と言う。よく覚えとけ。
0679名無しさん@お腹いっぱい。
2009/04/29(水) 06:55:31/usr/bin/cd コマンドが存在するし。
多分、親プロセスを chdir()するようなシステムコール? を呼んでる??
0680名無しさん@お腹いっぱい。
2009/04/29(水) 08:08:58それたしか、自分がcdするだけ、ってnopコマンドじゃなかった?
0681名無しさん@お腹いっぱい。
2009/04/29(水) 08:30:530682名無しさん@お腹いっぱい。
2009/04/29(水) 08:59:20/usr/bin/cd fooとやると変わらないだろ。
/usr/bin/cd foo && cd fooでフェイルセイフなcdだ。
0683名無しさん@お腹いっぱい。
2009/04/29(水) 09:09:49> /usr/bin/cd foo && cd fooでフェイルセイフなcdだ。
それ、フェイルな場合 /usr/bin/cd の段階でフェイルして、
エラーメッセージも出てしまうから、ちっともフェイルセーフじゃない。
単に cd foo とやったのと何ら変わりない。
0684名無しさん@お腹いっぱい。
2009/04/29(水) 09:28:49> 多分、親プロセスを chdir()するようなシステムコール? を呼んでる??
そんなシステムコールあるわけねーだろw
0685名無しさん@お腹いっぱい。
2009/04/29(水) 09:39:00子プロセスとカレントディレクトリを共有する仕様にしようと思ってる。
cdを外付けコマンドにしたシェルを実装するんだ。
0686名無しさん@お腹いっぱい。
2009/04/29(水) 09:40:040687名無しさん@お腹いっぱい。
2009/04/29(水) 09:43:410688名無しさん@お腹いっぱい。
2009/04/29(水) 09:47:47それ、cdのときだけSHARE_CWDをセットするんなら、cdだけ特別扱い変わらず?
0689名無しさん@お腹いっぱい。
2009/04/29(水) 09:54:110690名無しさん@お腹いっぱい。
2009/04/29(水) 11:02:21既存のシェルスクリプトの話をしろよ
0691名無しさん@お腹いっぱい。
2009/04/29(水) 15:12:02貝料理のことじゃないよ。誰も料理の話はしていないよ。
0692名無しさん@お腹いっぱい。
2009/04/29(水) 16:36:320693名無しさん@お腹いっぱい。
2009/04/29(水) 22:08:15日本語が不自由な人か?
ちゃんと、未だにPDP-11互換CPU上でV7が動いているんだから
「現存しない」とは言わないと思うぞ
実際にV7が動いてるわけだから
0694名無しさん@お腹いっぱい。
2009/04/29(水) 22:14:28testやechoが外部になってるシェルの議論なんてしても無駄。
0695名無しさん@お腹いっぱい。
2009/04/29(水) 22:20:02(shは伝説的変態だが)
実際使うとすぐ落ちるんじゃないか?
0696名無しさん@お腹いっぱい。
2009/04/29(水) 22:24:31現実に動作してるじゃん
それを使う機械の有無は別として
シーラカンスは現存してないものって言ってるのに等しい
0697名無しさん@お腹いっぱい。
2009/04/29(水) 22:26:47はあ?
普通に使ってますけど?
0698名無しさん@お腹いっぱい。
2009/04/29(水) 22:29:24情報交換なので、個人的な趣味で過去の機械を動かして満足してる人は
無理に話題に入ってこないでいただけるかな?
0699名無しさん@お腹いっぱい。
2009/04/29(水) 22:46:360700名無しさん@お腹いっぱい。
2009/04/29(水) 23:49:380701名無しさん@お腹いっぱい。
2009/04/30(木) 01:08:37いい加減にしてね(はーと)。
0702名無しさん@お腹いっぱい。
2009/04/30(木) 01:10:34じゃあ、ネタ振ってよ はーと
0703名無しさん@お腹いっぱい。
2009/04/30(木) 11:45:55> このスレは、実際にシェルスクリプトを使って仕事をしている人同士の情報交換
ダウト。
>>1には、お勉強・自慢・腕試しと明記されている。従って、趣味でシェルスクリプ
トを勉強している人もOKだろ。
0704名無しさん@お腹いっぱい。
2009/04/30(木) 18:33:490705名無しさん@お腹いっぱい。
2009/04/30(木) 18:40:44getoptは外出しの別物
0706名無しさん@お腹いっぱい。
2009/04/30(木) 18:42:07オプションの処理なんてたかが知れてるし
その他の面でもgetoptsのほうがいいの?
0707名無しさん@お腹いっぱい。
2009/04/30(木) 18:46:55getoptsならもちろん無問題だけど。
0708名無しさん@お腹いっぱい。
2009/05/02(土) 01:11:20以下のような形式のログ(MySQLのバイナリログみたいなもの)があるとします。
---------------------
09/04/01 12:00 aaa
09/04/01 13:10 aaa
bbb
09/04/01 13:20 ccc
09/04/01 14:40 aaa
ddd
eee
ccc
---------------------
このような形式のログから、例えば、13時台のログを抜き出すにはどうしたらいいでしょうか?
上記のログでいうと、以下のような結果がほしいです。
---------------------
09/04/01 13:10 aaa
bbb
09/04/01 13:20 ccc
---------------------
awkとgrepを駆使すればできそうなのですが、いまいちわかりません。
よろしくご教示お願いします。
0709名無しさん@お腹いっぱい。
2009/05/02(土) 02:24:32aaa や bbb がスペースやTABで分割された複数の単語(bbb = xxx xxx ...)になることが無いなら
awk 'NF>2{if($2~/^13:[0-5][0-9]$/)f=1;else f=0}f==1' "ログファイル"
複数の単語になるが bbb = xxx 00:00 xxx ... みたいに2番目の要素が時刻形式になることが絶対無いなら
awk '$2~/^[0-9][0-9]:[0-9][0-9]$/{if($2~/^13:[0-5][0-9]$/)f=1;else f=0}f==1' "ログファイル"
でいけそうな気がする。手元に環境ないんで試せてないけど
0710名無しさん@お腹いっぱい。
2009/05/02(土) 02:35:06cat 2ch-708-20090501.data | grep "[0-9]\{2\}/[0-9]\{2\}/[0-9]\{2\} 13:"
冗長的に書くとこんな感じ
cat 2ch-708-20090501.data | grep "[0-9][0-9]/[0-9][0-9]/[0-9][0-9] 13:"
man grepを読んで、cat data | grep うんたらで正規表現を試すといいと思うよ
0711名無しさん@お腹いっぱい。
2009/05/02(土) 04:37:380712名無しさん@お腹いっぱい。
2009/05/02(土) 06:34:290713名無しさん@お腹いっぱい。
2009/05/02(土) 09:33:07これはどう?
sed -n '/^[0-9]/h; x; /13:[0-5][0-9]/{x;p}' datafile
0714名無しさん@お腹いっぱい。
2009/05/02(土) 09:44:160715名無しさん@お腹いっぱい。
2009/05/02(土) 10:01:29どうせならシェルでやれ。内部コマンドだけがいいぞ。
#!/bin/sh
f=0
while IFS= read line
do
case $line in *' 13:'??' '*) f=1;; 0*) f=0;; esac
case $f in 1) echo "$line";; esac
done
0716名無しさん@お腹いっぱい。
2009/05/02(土) 14:07:550717名無しさん@お腹いっぱい。
2009/05/02(土) 15:35:400718名無しさん@お腹いっぱい。
2009/05/02(土) 15:45:29元の質問読んでる?
この場合は処理が行内で完結せず、
状態をどこかに記憶しなければならないのでフラグは必須なんだが。
>>713 の sedでは、状態をホールドスペースに記憶して、
ホールドスペースある同じ文字列を毎回正規表現で比較し直すという、
フラグよりダサイことをやってる。
0719名無しさん@お腹いっぱい。
2009/05/02(土) 15:57:25whileループが2重になってしまうし、
条件判断や echo が複数箇所で必要になって余計わかりにくい。
>>715 のフラグ方式の方がいいな。
#!/bin/sh
while IFS= read line
do
case $line in
*' 13:'??' '*)
echo "$line"
while IFS= read line
do
case $line in *' 13:'??' '*);; 0*) break;; esac
echo "$line"
done;;
esac
done
0720名無しさん@お腹いっぱい。
2009/05/03(日) 13:26:32>>718 はありえない。毎回正規表現で比較するコストなんてたいしたことない
0721名無しさん@お腹いっぱい。
2009/05/03(日) 17:43:17質問者はawkとgrepを駆使するつもりだったようなので
>どうせならシェルでやれ。内部コマンドだけがいいぞ。
と強制する必要はないんじゃない?理由もイミフだし。
内部コマンドで済ます事に拘ることで >>715 とワザワザ長ったらしくしながら
大きなアドバンテージがある訳でもなく、もし、aaa とかが "13:xx " や "xxx xxx xxx 13:xx xxx ..." とか有り得るなら
>>709 では問題にならないのに >>715(や>>719も) では上手くいかない事を説明してないし
0722721
2009/05/03(日) 17:47:09○ もし、aaa とか bbb とかが、 "13:xx " や "xxx xxx xxx 13:xx xxx ..." という値を取りうるなら
0723名無しさん@お腹いっぱい。
2009/05/03(日) 21:03:55昨晩、実行されたのですが・・・エラーになりました。何が悪いのでしょうか?
shell
----- ここから -----
#!/bin/sh
find ./public_html/hoge/dat/ -type f -atime +1 -exec rm {} \;
----- ここまで -----
エラーメッセージ
/virtual/hoge/public_html/hoge.sh: line 2:
: command not found
find: missing argument to `-exec'
0724名無しさん@お腹いっぱい。
2009/05/03(日) 21:26:12ぱっと見、怖いスクリプト書いてるな…
一般的な助言しとくと
・カレントディレクトリは明示的に指定しる。
・cron実行時のPATH環境はどうなってる?
(要はfindとrmコマンドは、フルパスでなくても実行可能?)
・このスクリプトに実行権与えてる?
0725名無しさん@お腹いっぱい。
2009/05/03(日) 21:57:18ご指摘ありがとうございます。カレントは「具象化」します。
実行エラーの原因がわかりました。
改行コードが「CRLF」でした _| ̄|○ il||l
「LF」のみして正しく動作しました。
0726名無しさん@お腹いっぱい。
2009/05/03(日) 22:45:14おおげさな「助言」が全く関係ないオチだったね。
エスパー失格。
0727名無しさん@お腹いっぱい。
2009/05/03(日) 23:10:48おまえ何様のつもり?
>>724の指摘内容は、cronでスクリプトが動かないときに
真っ先に疑うべき内容で、別に大げさな助言でもなかろうに。
善意で答えている人に対して失礼すぎ。
0728名無しさん@お腹いっぱい。
2009/05/03(日) 23:37:25指摘は当たらないと意味がない。
もっと >>723 の質問をよく見ろよ。問題の鍵はここにあるんだよ。
>>723 の 「find: missing argument to `-exec'」のエラーメッセージ。
これが大きな鍵だ。
試しに、
find . -exec echo {} ?^M
って実行してみると良い。^Mは、Ctrl-[V] + [M] の CR な。
find: missing argument to `-exec'
って出るだろ。
あと、>>723 の「: command not found」
これは、#!/bin/sh^M になってる時出るメッセージだ。
以上を知ってれば的確な答えはすぐに出せたはず。
0729名無しさん@お腹いっぱい。
2009/05/04(月) 00:28:45たとえば、
find . -type f -name \*php
と
find . -name \*php -type f
は、実行速度に違いとかありますでしょうか?
0730名無しさん@お腹いっぱい。
2009/05/04(月) 01:01:09選択性の高いものを先に書いたほうが早い。
例えば比率的に「ファイル数:ディレクトリ数=9:1」で「*phpの数:*php以外の数=1:9」なら -name \*php を先に書いたほうが、90%の確率で -type f を評価する必要がなくなるので、逆に書くよりは高速になる可能性が高くなる。
要は、対象になるディレクトリの中身がどうなる傾向にあるかに拠る。
ただ、-type f単体の評価のほうが-nameより高速であろうから、単純に比率だけからでは一概には言えない。実際に計測して統計とるのが最善。
0731名無しさん@お腹いっぱい。
2009/05/04(月) 01:01:140732名無しさん@お腹いっぱい。
2009/05/04(月) 06:14:41>>730は釣り。
0733名無しさん@お腹いっぱい。
2009/05/04(月) 09:02:34処理するつくりになってると思い込んでいるんだろう
そういう仮定(本人は仮定とは思ってない)が書かれないから、他人には
全く理解不能になってしまう。
0734名無しさん@お腹いっぱい。
2009/05/04(月) 11:06:23従って指定順に処理されると考えるのが普通。
>>733はエスパーしたいなら、エスパースレにいけ。放置された質問たまってるぞ。
0735名無しさん@お腹いっぱい。
2009/05/04(月) 13:24:43http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html
find は与えられたファイル名以下のディレクトリツリーを検索し、同じく与えられた評価式を左から右に向かって優先順位の高いものから評価する (演算子のセクションを見よ)。
評価式の結果が確定すると (and の左項が偽だったり、 or の左項が真だった場合など) 評価は終了し、引き続き次のファイル名が評価される。
0736名無しさん@お腹いっぱい。
2009/05/04(月) 14:18:220737名無しさん@お腹いっぱい。
2009/05/04(月) 14:45:250738名無しさん@お腹いっぱい。
2009/05/04(月) 19:50:010739名無しさん@お腹いっぱい。
2009/05/05(火) 00:38:14違ったらごめんw
0740名無しさん@お腹いっぱい。
2009/05/05(火) 06:57:49(変わらないケースもまれにある)
0741名無しさん@お腹いっぱい。
2009/05/05(火) 22:31:34どちらの言ってることが正しいか自分の環境でテストしてみたんだけど、
1回目のfindでは7秒かかってたのが、2回目以降では、0.5秒で検索できた。
これって、OSがfindの結果をキャッシュしてるってことかなぁ、、、
テストするために、そのキャッシュをクリアする方法ってある?
ご存知の方は教えてくださいm(_ _)m
0742名無しさん@お腹いっぱい。
2009/05/05(火) 22:36:20それ、find自体は関係なくて、OSのファイルシステム(またはブロックデバイス)の
キャッシュが効いてるのが原因。
キャッシュの影響をなくすひとつの方法は、
umountできるディレクトリなら、
findの直前に一旦umountして、mountして、その直後に1回だけfindを実行する。
次のfindの前にまたumount/mountする。ちょっと面倒だけど。
0743名無しさん@お腹いっぱい。
2009/05/05(火) 22:36:22time sh first.sh; time sh second.sh;time sh first.sh; time sh second.sh;time sh first.sh; time sh second.sh;
おれは、こうしゃうけどね
でも、キャッシュはしていないと思うけどね
0744名無しさん@お腹いっぱい。
2009/05/05(火) 22:37:160746名無しさん@お腹いっぱい。
2009/05/06(水) 13:37:32で、テスト結果は?
0747>>741
2009/05/06(水) 23:56:33改行多すぎてはれないので、二回にわけてはるね。
■前提条件
~$ uname -r
5.4-RELEASE-p6
~$ find . -type f | wc -l
30374
~$ find . -type d | wc -l
1130
~$ find . -type l | wc -l
445
~$ find . -type f -name \*php | wc -l
137
■テストの手順
(1) time find . -type f -name \*php
(2) shutdown -p nowした後、マシン起動
(3) time find . -name \*php -type f
(4) shutdown -p nowした後、マシン起動
(5) time find . -name \*php -type f
(6) shutdown -p nowした後、マシン起動
(7) time find . -type f -name \*php
0748>>741
2009/05/06(水) 23:57:41■結果
(1)
real 0m7.697s
user 0m0.181s
sys 0m0.261s
(3)
real 0m7.205s
user 0m0.207s
sys 0m0.238s
(5)
real 0m7.229s
user 0m0.187s
sys 0m0.258s
(7)
real 0m8.164s
user 0m0.199s
sys 0m0.243s
find . -type f -name \*phpより、find . -name \*php -type fのようがはやい。
■結論
オプションの並びをかえると、実行速度はかわる
0749名無しさん@お腹いっぱい。
2009/05/07(木) 01:03:510750名無しさん@お腹いっぱい。
2009/05/07(木) 03:47:590751名無しさん@お腹いっぱい。
2009/05/07(木) 04:25:05> /dev/nullしろよ。
それじゃreal timeが表示の時間測ってることになるだろ。
0752名無しさん@お腹いっぱい。
2009/05/07(木) 06:10:32stat(2)は減らない。
1回のstat(2)で、ファイル名とファイルタイプは同時に得られるから。
0753名無しさん@お腹いっぱい。
2009/05/07(木) 10:03:02GNU の ls や stat を使うように書かれたシェルスクリプトを実行するために、
alias ls='gls'
alias stat='gstat'
を設定した状態で実行したいんですが、シェルでセットしてもシェルスクリプト中では有効になりません。
0754名無しさん@お腹いっぱい。
2009/05/07(木) 10:29:17stat(2)でファイル名得られるってどういうOSですかあ?
0755名無しさん@お腹いっぱい。
2009/05/07(木) 10:55:10readdir()等でファイル名一覧が得られたあと、
-type f のオプションがあるかどうかにかかわらず、
findとしてはそのディレクトリのすべてのファイルについて
一旦 stat(2)を実行する。
(でないと、サブディレクトリかどうかとかの判断ができないから)
で、-type fオプションとかがあると、すでに実行済みの stat(2)の結果を
利用するから、stat(2)の実行回数は増えない。
0756名無しさん@お腹いっぱい。
2009/05/07(木) 11:10:07PATHの一番優先順位のところに自作のディレクトリでもつくって、通して、ls,statというファイル名をつくって
$ cat ls
#/bin/sh
gls $@
$ cat stat
#/bin/sh
gstat $@
みたいなことするんじゃないの?
即席なんでこういうのは、ダサ過ぎなのかもしれないけど
0757名無しさん@お腹いっぱい。
2009/05/07(木) 11:45:08> (でないと、サブディレクトリかどうかとかの判断ができないから)
ディレクトリの判定には、いきなりchdirしてみると言う方法も考えられるので却下。
0758名無しさん@お腹いっぱい。
2009/05/07(木) 11:47:34実際のfindではいきなりchdirはしないから却下
0759名無しさん@お腹いっぱい。
2009/05/07(木) 11:48:26bashがスクリプト中でalias使えるか知らないが、
#!/bin/bash
alias ls='gls'
alias stat='gstat'
. そのシェルスクリプト
0760名無しさん@お腹いっぱい。
2009/05/07(木) 11:49:17そのような実装のfindが無いことを証明出来るなら採用。
0761名無しさん@お腹いっぱい。
2009/05/07(木) 11:51:39いきなりchdirすると、それがディレクトリへのシンボリックリンクだった場合に困る。
(-followオプションを付けていないのにsymlinkをたどっては行けないから)
だからいきなりchdirする実装はあり得ない。
0762名無しさん@お腹いっぱい。
2009/05/07(木) 12:29:240763名無しさん@お腹いっぱい。
2009/05/07(木) 12:35:530764名無しさん@お腹いっぱい。
2009/05/07(木) 16:42:560765名無しさん@お腹いっぱい。
2009/05/07(木) 18:24:100766名無しさん@お腹いっぱい。
2009/05/07(木) 18:24:380767名無しさん@お腹いっぱい。
2009/05/07(木) 18:53:47ttp://www.youtube.com/watch?v=h2mnwAJJDxY
ttp://www.youtube.com/watch?v=bfEVoJhxPPE
0768名無しさん@お腹いっぱい。
2009/05/07(木) 23:15:48readdir()すると、
ファイル名とi-node番号だけじゃなくて、
struct direntの中でファイルタイプも返すUNIXがある。
e.g. FreeBSD
0769名無しさん@お腹いっぱい。
2009/05/07(木) 23:20:140770名無しさん@お腹いっぱい。
2009/05/08(金) 04:01:23お前ら、レベル高いな、、、
ぜんぜん、この話題ついていけねぇ、、、orz
どうやったら、そんな高いレベルになるのか教えてくれ。
何かお勧めの本とか。
0771名無しさん@お腹いっぱい。
2009/05/08(金) 06:55:30その場合はreaddir()だけでファイル名もファイルタイプも得られるから、
findの-nameや-type fの有無にかかわらず、結局stat(2)の回数は増えない、でFA?
0772名無しさん@お腹いっぱい。
2009/05/08(金) 07:38:55GNU findは#ifdefで、
ファイルタイプ返すreaddirに対応している。
0773名無しさん@お腹いっぱい。
2009/05/08(金) 13:50:32OJTって知っている?
ひたすら仕事をすればいいんだよ。
0774名無しさん@お腹いっぱい。
2009/05/08(金) 17:42:350775名無しさん@お腹いっぱい。
2009/05/09(土) 08:38:090776名無しさん@お腹いっぱい。
2009/05/10(日) 18:00:18doneは皆さん何と読んでいますでしょうか?
人によって、ダーン、ドーン、ドネ、ディーオーエヌイーなどと呼んでいるのですが、
専門家の方はどう読むのでしょうか?
0777名無しさん@お腹いっぱい。
2009/05/10(日) 18:07:04「ドーン」じゃ人名
0778名無しさん@お腹いっぱい。
2009/05/10(日) 18:23:180779名無しさん@お腹いっぱい。
2009/05/10(日) 18:52:14小学生乙。
0780名無しさん@お腹いっぱい。
2009/05/10(日) 19:04:30http://pc12.2ch.net/test/read.cgi/unix/1001358861/
0781名無しさん@お腹いっぱい。
2009/05/10(日) 19:09:450782名無しさん@お腹いっぱい。
2009/05/10(日) 19:25:120783名無しさん@お腹いっぱい。
2009/05/10(日) 19:53:43ボーンじゃなくてブールネが正しいって聞いたことがあるんだが。
0784名無しさん@お腹いっぱい。
2009/05/10(日) 20:22:03だーんって読んだら笑われるぞ
英語じゃないんだから
>>776
ドーンが正解です
ドンでもいいですよ
0785名無しさん@お腹いっぱい。
2009/05/10(日) 21:36:26denyもデニーですよね。
0786名無しさん@お腹いっぱい。
2009/05/11(月) 13:33:520787名無しさん@お腹いっぱい。
2009/05/11(月) 16:18:470788名無しさん@お腹いっぱい。
2009/05/12(火) 08:11:17i did it
done
アメリカ行って聞いて故意w
0789名無しさん@お腹いっぱい。
2009/05/12(火) 08:11:58>ドーンが正解です
>ドンでもいいですよ
それなら
dawn
だなwぷけら
0790名無しさん@お腹いっぱい。
2009/05/14(木) 02:26:34これに関連して、全てのマニュアルの英単語の数を計算し、多い順にソートしたいのですが、
いい方法はありますでしょうか?
(#使われている頻度が多い英単語から覚えれば、効率的かなと。。)
0791名無しさん@お腹いっぱい。
2009/05/14(木) 02:36:44lsのマニュアルだけなら、これでできるよ。
--------------------------------
~$ man ls | col -b > words.txt
~$ for word in `cat words.txt`; do echo $word; done > words2.txt
~$ sort words2.txt | uniq -c | sort -n -k 1 -r | head
138 the
69 is
40 a
39 to
38 of
38 file
36 The
34 and
33 in
25 are
--------------------------------
全てのマニュアルってことになるとどうするんだろ。
0792名無しさん@お腹いっぱい。
2009/05/14(木) 04:32:48zcat /usr/local/man/man{1..9}/*.gz | nroff | col -b > /tmp/manuals.txt
以下同じ。
0793名無しさん@お腹いっぱい。
2009/05/14(木) 05:04:44ハリポタでもなんでもいいけど、興味の有る映画とかの本のほうが勉強に成ると思う。
0794名無しさん@お腹いっぱい。
2009/05/14(木) 06:18:10> ハリポタでもなんでもいいけど、興味の有る映画とかの本のほうが勉強に成ると思う。
ノベライズ(小説)は、難しいと聞くなあ
あと読んで(input)、誰かに書いて(output)ってしにくそう
コンピュータ(例えば、Linux)分野寄りの話なら、最初は大変だけど、メーリングリストに投げるなり、フォーラムに投稿するなり
できるし、書いた英文が不適切でも、コマンドと標準出力、エラーログを添付すれば、意味は通じるからね
コンピュータ寄りだけど英語の勉強になるし、楽しいよ
リスニングに関しては、海外ドラマDVDを家にいるときは字幕なしで流しっぱなしにしているのがいい感じ
単語がわからなくても、表情や動作で意味が伝わってくるからね
映画は連続ドラマに比べて、映画の性質上、無駄なくシーンがポンポン変わるからちょっときつい感じ
>>790
聞いてみるもんだね、簡単にできるんだね
0795名無しさん@お腹いっぱい。
2009/05/14(木) 06:32:55ノベライズは小説化だよ。
0796名無しさん@お腹いっぱい。
2009/05/14(木) 06:34:11シェルスクリプトのスレなんだからシェルスクリプトで答えればいいんだよ。
英語の勉強法なら別の板なりスレなりに誘導すればいいだけじゃないか。
0797名無しさん@お腹いっぱい。
2009/05/14(木) 06:49:22中間ファイル作るの無駄過ぎ。一発でできる。
man ls | col -b | tr ' ' '¥n' | tr '¥t' '¥n' | sort| uniq -c | sort -nr
0798名無しさん@お腹いっぱい。
2009/05/14(木) 06:53:30/var/wwwの、PHPの過去1日分の変更点だけのバックアップを取りたいのですが
-------------------------------
#!/bin/sh
dest=/var/www_bk/`date +%F`
mkdir $dest
chmod 777 $dest
find /var/www -mtime -1 -name "*.php" -exec cp -arp {} $dest \;
-------------------------------
これだと、フォルダの構造もなく、同一ファイルも重なってしまうためうまくありません。
(せいぜい-bつけるぐらい)
-------------------------------
#!/bin/sh
dest=/var/www_bk/`date +%F`
mkdir $dest
chmod 777 $dest
find /var/www -mtime -1 -name "*.php" -exec cp -arp {} $dest{} \;
-------------------------------
これだと「そんなフォルダねーよ」と蹴られてしまいます。
フォルダの階層ごとコピーがしたいですが、何か方法はありますでしょうか?
0800名無しさん@お腹いっぱい。
2009/05/14(木) 11:14:51Cron
-------
rsync -auvz --delete /var/www /media/disk-1/www-backup
-------
世代バックアップってできましたっけ?
0802名無しさん@お腹いっぱい。
2009/05/14(木) 11:34:430803名無しさん@お腹いっぱい。
2009/05/14(木) 11:40:09trを2個も重ねるの無駄過ぎ。一発でできる。
man ls | col -b | tr ' ¥t' '¥n¥n' | sort | uniq -c | sort -nr
0804名無しさん@お腹いっぱい。
2009/05/14(木) 12:03:06tar cf - `find ... -print` | (cd $dest; tar xpf -)
みたいなのはどうだろうか?findの結果が多い場合は`...`やめて-Tで
ファイル渡しで。
0805名無しさん@お腹いっぱい。
2009/05/14(木) 12:19:08ヒントだけ書くけど、
-exec cp -arp {} $dest{} ?
の前に、
mkdir -p `dirname $dest{}`
を実行すればいい。
find の -execに直接書くのはややこしいので、
ここだけ別のスクリプトにして、-execから呼び出した方がいいかも。
あと、cp -a オプションは、-pも-rも含んでるので、
cp -arp なんてやっても cp -a と同じだよ。
0807名無しさん@お腹いっぱい。
2009/05/14(木) 13:33:32find /var/www -mtime -1 -name "*.php" | cpio -pumd $dest
0808名無しさん@お腹いっぱい。
2009/05/14(木) 13:37:32ファイル名が改行などの特殊文字含む可能性がある場合はGNU cpioで
find /var/www -mtime -1 -name "*.php" -print0 | cpio -0 -pumd $dest
むう・・dirnameが走らない・・・
find /var/www -mtime -1 -name "*.php" -exec mkdir -p `dirname $dest{}` \;
なんか根本から間違ってる気がした
・・・でも
-----------
>>808
#!/bin/sh
dest=/var/www_bk/`date +%F`
mkdir $dest
#find /var/www -mtime -1 -name "*.php" -exec mkdir -p `dirname $dest{}` \;
#find /var/www -mtime -1 -name "*.php" -exec cp -a {} $dest{} \;
find /var/www -mtime -1 -name "*.php" -print0 | cpio -0 -pumd $dest
#tar cf - `find ... -print` | (cd $dest; tar xpf -)
chmod -R 777 $dest
-------
これで確かにいけました
なぜアーカイブが存在しないのにcpioが動くのか・・・
よ・・よくわからねーが、そのうち質問者は考えるのをやめた
0810名無しさん@お腹いっぱい。
2009/05/14(木) 14:00:12> コピーパスモードでは、 cpio はファイルをあるディレクトリから別のディレ
> クトリにコピーします。実際に は、アーカイブファイルを用いて、コピーア
> ウトモードとコピーインモードを 組み合わせて実行するような形になります。
> cpioは、コピーするファイルリストを標準入力から受けとります。これらの
> ファイルのコピー先のディレクトリについては、オプション以外の引数で与え
> られ ます。
ありがとうございました!
0812名無しさん@お腹いっぱい。
2009/05/14(木) 16:25:34http://pc11.2ch.net/test/read.cgi/linux/1238764663/
シェルスクリプト総合@LINUX Part5
0813名無しさん@お腹いっぱい。
2009/05/15(金) 18:34:05このシェルをTELNeTに関連付けるにはどうしたらいいですか?
毎回シェルのKEYINが必要なのですか?
0814名無しさん@お腹いっぱい。
2009/05/15(金) 18:49:38宣伝したいならvectorにでも行って登録しなさい。
0815名無しさん@お腹いっぱい。
2009/05/15(金) 19:08:260816名無しさん@お腹いっぱい。
2009/05/15(金) 19:11:57どうにもならんな
0817名無しさん@お腹いっぱい。
2009/05/15(金) 19:38:17How can I associate this shell with TELNeT ?
Do I need to KEYIN for shell every time ?
0818名無しさん@お腹いっぱい。
2009/05/15(金) 19:42:26このシェルはどうすればTelnetを関連付けることができますか?
私は毎回KEYINシェルのためには必要ですか?
0819名無しさん@お腹いっぱい。
2009/05/15(金) 20:10:360820名無しさん@お腹いっぱい。
2009/05/15(金) 20:19:440821名無しさん@お腹いっぱい。
2009/05/15(金) 22:14:520822名無しさん@お腹いっぱい。
2009/05/16(土) 03:55:450823名無しさん@お腹いっぱい。
2009/05/16(土) 08:21:230824名無しさん@お腹いっぱい。
2009/05/22(金) 17:38:26array=( word1 )
echo ${array[0]}
これを実行すると、Thisって表示される。
array[0]にThis is a penを格納したいんだけど、どうすればいいですか?
0825名無しさん@お腹いっぱい。
2009/05/22(金) 17:43:48array=( "$word1" )
0826名無しさん@お腹いっぱい。
2009/05/22(金) 17:47:220827名無しさん@お腹いっぱい。
2009/05/22(金) 18:00:47できました!
ありがとうございました。
0828名無しさん@お腹いっぱい。
2009/05/25(月) 20:19:1405 06 07 08 09
というような内容のファイルを
0 1 2 3 4
5 6 7 8 9
という内容に変換するにはどうやったらいい?
0829名無しさん@お腹いっぱい。
2009/05/25(月) 20:22:32tr -d 0
0830名無しさん@お腹いっぱい。
2009/05/25(月) 20:25:13$ cat hoge.txt
00 01 02 03 04
05 06 07 08 09
$ sed -e 's/0\([^0]\)/\1/g' hoge.txt
0 1 2 3 4
5 6 7 8 9
0831名無しさん@お腹いっぱい。
2009/05/25(月) 20:26:09最初の0が残らないぞ。
0832名無しさん@お腹いっぱい。
2009/05/25(月) 20:43:52それだと、102 とかが 12 になってしまう。
0833名無しさん@お腹いっぱい。
2009/05/25(月) 20:49:29ゼロサプレスをもう少しちゃんとやるとすると、こうか?
sed 's/¥<0*¥([^0]¥)/¥1/g'
0834名無しさん@お腹いっぱい。
2009/05/25(月) 20:50:46それ、今度は 00 が 00 のままになる。
0835名無しさん@お腹いっぱい。
2009/05/25(月) 20:58:1900
だけの行があると
00
のままになるよ。
ハイ、やり直し。
0836名無しさん@お腹いっぱい。
2009/05/25(月) 21:02:20sed 's/¥<0*¥([^0]¥)/¥1/g;s/¥<00*¥>/0/g'
0837名無しさん@お腹いっぱい。
2009/05/25(月) 21:05:22対応できてませんけどw
0838名無しさん@お腹いっぱい。
2009/05/25(月) 21:13:12元ファイル:
04 03 02 01 00
結果:
4 3 2 1 00
0839名無しさん@お腹いっぱい。
2009/05/25(月) 21:17:400840名無しさん@お腹いっぱい。
2009/05/25(月) 21:22:45それを実行してるFreeBSDのバージョンは?
0841名無しさん@お腹いっぱい。
2009/05/25(月) 21:57:51質問した本人は言い辛いと思うので(ていうかもう見てないか)言っておくが、
書いても君には答えられない。
そもそも書く意味がほとんど無いから書いてない。
0842名無しさん@お腹いっぱい。
2009/05/26(火) 01:14:33間違ってはいたけど建設的なのは一人だけ、まぁ全てが自演かもしれんけど
こんなんでどうだろう?
sed -e 's/0*\([0-9]*[0-9]\)/\1/g' hoge.txt
0843名無しさん@お腹いっぱい。
2009/05/26(火) 02:38:050844名無しさん@お腹いっぱい。
2009/05/26(火) 06:10:050845名無しさん@お腹いっぱい。
2009/05/26(火) 07:38:19もとの質問の「仕様」が不明確だから何とも言えないけど、
A00B みたいなのが A0B に変換されてしまうのはいいんだよな??
0846名無しさん@お腹いっぱい。
2009/05/26(火) 12:26:350847名無しさん@お腹いっぱい。
2009/05/26(火) 13:06:05sed 's/\b0*\([0-9]\)/\1/g'
0848名無しさん@お腹いっぱい。
2009/05/26(火) 14:14:490849名無しさん@お腹いっぱい。
2009/05/26(火) 17:51:35ところで、文章が書き込まれているテキストファイルを1行に1文字づつに変換するには
どのコマンドを使用するべきだと思います?
0850名無しさん@お腹いっぱい。
2009/05/26(火) 18:00:32fold -1
0851名無しさん@お腹いっぱい。
2009/05/26(火) 18:25:19ファイルに出力したくなかったので助かりました、ありがとうございます
0852名無しさん@お腹いっぱい。
2009/05/26(火) 22:09:36ls コマンドが次のように定義されています。
ls ()
{
/bin/ls ${1+"$@"}
}
わざわざ ${1+"$@"} にしている理由は何でしょうか?
/bin/ls "$@" にした時との差異がわかりません。
0853名無しさん@お腹いっぱい。
2009/05/26(火) 22:38:27command "$@"はcommand ""と同じだった。それを避けるための記法。
0854名無しさん@お腹いっぱい。
2009/05/26(火) 22:38:35AAAA(タブ)BBBB(タブ)CCCC
DDDD(タブ)EEEE(タブ)FFFF
このファイルを1行ずつ読み込んでタブ区切りで分割し
配列に取り込みたいのですがどうやればいいんでしょうか?
自分が考えたのが次のようなやり方だったんですが
どうもうまく行きません。
while read LINE;do
DATA1=`echo $LINE | cut -f 1`
DATA2=`echo $LINE | cut -f 2`
done
データにはスペースが入ることもあるのでどうしてもタブで分割させたいんですが、
いいやり方ってないでしょうか?
0855名無しさん@お腹いっぱい。
2009/05/26(火) 22:51:26echo "$LINE"
というオチか
ダブルクォートが無いと、echoした時、せっかくのタブがスペースになってしまう。
0858名無しさん@お腹いっぱい。
2009/05/27(水) 02:02:240859名無しさん@お腹いっぱい。
2009/05/27(水) 05:49:52かっこよくないなぁ
0860名無しさん@お腹いっぱい。
2009/05/27(水) 06:44:54では、10行未満のときにうまくいかないことに気がついた。
head foo | tail -n +3
でも、かっこわるいなぁ
0861名無しさん@お腹いっぱい。
2009/05/27(水) 06:48:34sed -n 3,10p
0862名無しさん@お腹いっぱい。
2009/05/28(木) 02:16:45http://pc12.2ch.net/test/read.cgi/unix/1085730992/
sed
0863名無しさん@お腹いっぱい。
2009/05/28(木) 03:16:010864名無しさん@お腹いっぱい。
2009/05/29(金) 17:19:16日本語のエラーメッセージ見て久々に吹いたw
こんな事になったのはいつからだ?
少し前は、どうしても空の書庫を作ろうとしませんとかだったような気がするが
0865名無しさん@お腹いっぱい。
2009/05/29(金) 17:31:420866名無しさん@お腹いっぱい。
2009/05/29(金) 17:34:230867名無しさん@お腹いっぱい。
2009/05/30(土) 04:43:290868名無しさん@お腹いっぱい。
2009/05/30(土) 11:09:28なってたほうがいいアプリには個別対応してる。
0869名無しさん@お腹いっぱい。
2009/05/30(土) 11:10:420870名無しさん@お腹いっぱい。
2009/05/31(日) 00:49:43もとの質問の「仕様」が不明確?どこが?
例として10個もデータ載せてて0-9とスペース(タブ?)しか使って無いんだから
1001 とかの考慮は必要だろうけど、A00B なんて何勝手に仕様追加してるの?
もしそういうのもあるなら質問者も10個のデータ内、1つ位はそんなデータを載せるだろうよ
汎用性を考えるのは重要だけど元々無い仕様を勝手に追加して、
それに対応する方法を自分で書くならまだしも、人が書いた事を否定するだけって、何の意味があるの?
0871名無しさん@お腹いっぱい。
2009/05/31(日) 09:08:48実際のデータが例示されたものだけならどちらでも動くが、仕様は二通り考えられる。
今回の質問はそれほど不明確では無かったが、不明確な質問しといて後から
条件追加するアフォが多すぎるので防衛反応だろう。
0872名無しさん@お腹いっぱい。
2009/06/01(月) 12:15:24例えば特定の環境変数を指定した引数の値にセットして
makeを呼び出せるようなことが出来るとありがたい
bash風なシェルだとすると、次のようなイメージ
alias mak pattern='SOME_ENV_VARIABLE=$(pattern) make'
あるいは、代替案があればご教示頂けると幸いです
0873名無しさん@お腹いっぱい。
2009/06/01(月) 12:54:540874名無しさん@お腹いっぱい。
2009/06/01(月) 12:56:060875名無しさん@お腹いっぱい。
2009/06/01(月) 13:04:19local x="$1";
shift;
HOGE="$x" make "$@"
}
0876名無しさん@お腹いっぱい。
2009/06/01(月) 13:20:29ありがとうございます。快適になりました。
0877名無しさん@お腹いっぱい。
2009/06/02(火) 02:01:37例えば、以下の様に実行した command の exit status を実行元のシェルで取得したいのです。
(sleep 3; command >/dev/null 2>&1) &
0878名無しさん@お腹いっぱい。
2009/06/02(火) 02:07:33>>1
> manや参考リンクを見ましょう。
0879名無しさん@お腹いっぱい。
2009/06/02(火) 06:38:35できないならできないって答えてやれよ
0880名無しさん@お腹いっぱい。
2009/06/02(火) 07:14:370881名無しさん@お腹いっぱい。
2009/06/02(火) 07:23:01シェル依存。
バックグラウンドコマンドがすでに終了していると、
wait %1 ではステータスが取れないシェルがある。
0882名無しさん@お腹いっぱい。
2009/06/02(火) 08:25:010883名無しさん@お腹いっぱい。
2009/06/02(火) 08:29:38いや、一般論としては「できない」が正解。
「できない」とすでに答えてる。
0884名無しさん@お腹いっぱい。
2009/06/02(火) 10:01:270885名無しさん@お腹いっぱい。
2009/06/03(水) 02:21:440886名無しさん@お腹いっぱい。
2009/06/03(水) 08:20:180887名無しさん@お腹いっぱい。
2009/06/03(水) 09:11:32(sleep 3; command >/dev/null 2>&1; echo $? > status) &
で保存できるだろ。
0888名無しさん@お腹いっぱい。
2009/06/03(水) 10:27:420889名無しさん@お腹いっぱい。
2009/06/03(水) 11:03:05そんなのを回避する方法は、お前以外の人間はいくらでも思いつく。
0890名無しさん@お腹いっぱい。
2009/06/03(水) 12:08:48>>877は、実行してしまったシェルスクリプトを後からどう
にかしたいらしいので、>>887みたいに、実行前にタイムマ
シンで戻ってシェルスクリプトを編集するのは不可じゃない
の?
>>887みたいに$?を使っていいなら、>>877はそもそも質問し
ていないと思うけど。
0891名無しさん@お腹いっぱい。
2009/06/03(水) 13:44:26質問を普通に読むことができれば、そういう考えには至らない。
0892名無しさん@お腹いっぱい。
2009/06/03(水) 13:57:420893名無しさん@お腹いっぱい。
2009/06/03(水) 14:05:09なんだ単なるネタか。余りにつまらないんでレスしちまったぜ。
これほど、つまらないネタを見るのは始めてだ。
0894名無しさん@お腹いっぱい。
2009/06/03(水) 14:35:20もしそういう問題ならシステムコールトレースでも仕掛けておけば
いいんじゃねーの?w
0895名無しさん@お腹いっぱい。
2009/06/03(水) 15:24:06echoの直前にセミコロンが抜けていますね。
ほかの方の回答は興味がないので無視させていただきました。
0896名無しさん@お腹いっぱい。
2009/06/03(水) 15:41:550897名無しさん@お腹いっぱい。
2009/06/03(水) 18:47:090898名無しさん@お腹いっぱい。
2009/06/03(水) 20:24:59>直前 >直前 >直前
0899名無しさん@お腹いっぱい。
2009/06/03(水) 22:11:340900名無しさん@お腹いっぱい。
2009/06/03(水) 22:17:08>>1
>正規表現の話題はスレ違い(正規表現スレへ)
0901名無しさん@お腹いっぱい。
2009/06/03(水) 22:21:06うす!
0902名無しさん@お腹いっぱい。
2009/06/04(木) 01:24:43なにそれ?
0903名無しさん@お腹いっぱい。
2009/06/06(土) 09:22:29solari8 Cシェル環境において以下のシェルスクリプトでテキストに含まれる[]が表示できなくて困っています。
echo `cat fileA`
fileAの中身は下記です。
1234[aa]
このまま表示したいのですが、実行すると「echo:一致しません」と表示されます。
fileAの中身を"1234[aa]"でも1234\[aa\]にしても変わりません。
echo文は変えられないので何とかfileAの中身を工夫して1234[aa]と表示できる方法をどなたかご教示いただけないでしょうか?
0904名無しさん@お腹いっぱい。
2009/06/06(土) 10:47:36そんな方法は無い。不可能。絶対に無理。
0905名無しさん@お腹いっぱい。
2009/06/06(土) 11:55:02はどうなの?
0906名無しさん@お腹いっぱい。
2009/06/06(土) 12:52:52>echo文は変えられないので
0907名無しさん@お腹いっぱい。
2009/06/06(土) 13:49:29シェルを変えろ。話はそれからだ。
0908名無しさん@お腹いっぱい。
2009/06/06(土) 14:02:490909名無しさん@お腹いっぱい。
2009/06/06(土) 14:04:46alias echo 'cat'
0910名無しさん@お腹いっぱい。
2009/06/06(土) 14:21:02マジレスするとechoより前に set noglob すればOK
ただし、そのスクリプト自体変更できないと言うなら不可能。
0911名無しさん@お腹いっぱい。
2009/06/06(土) 16:03:34皆様ありがとうございます。
スクリプト自体を変更できないのです。^^;
残念ながらあきらめるしかないのですね。
お手数ですが、不可能な理由をご教示願えないでしょうか?
0912名無しさん@お腹いっぱい。
2009/06/06(土) 16:04:050913名無しさん@お腹いっぱい。
2009/06/06(土) 18:53:000914名無しさん@お腹いっぱい。
2009/06/06(土) 23:31:540915名無しさん@お腹いっぱい。
2009/06/08(月) 22:21:18a
b
c
d
e
f
g
と表示する方法ありますか?
0916名無しさん@お腹いっぱい。
2009/06/08(月) 22:27:37>>850
0917名無しさん@お腹いっぱい。
2009/06/10(水) 02:11:490918名無しさん@お腹いっぱい。
2009/06/10(水) 14:51:510919名無しさん@お腹いっぱい。
2009/06/10(水) 15:08:27たとえechoが内部コマンドじゃなかったとして、
echoをcatにすり替えることができたとしても、
>>903 の
> echo `cat fileA`
は、
cat `cat fileA`
になるだけ。これでは何の解決にもなっていない。
0920名無しさん@お腹いっぱい。
2009/06/11(木) 00:03:40cat fileA
じゃなくて
echo `cat fileA`
としてるのか問い詰めたい
0921名無しさん@お腹いっぱい。
2009/06/11(木) 00:10:30echo `cat fileA`
は明らかに異なるが。どうして同一だと考えられるのだろう。
問い詰めたい。問い詰めたい。問い詰めたい。問い詰めたい。
0922名無しさん@お腹いっぱい。
2009/06/11(木) 00:58:46これってうちのtcsh 6.15.00だと再現しないんだけど純正csh限定なの?
0923名無しさん@お腹いっぱい。
2009/06/11(木) 09:57:4420070713-2となっているが元がどういうのかはよくわからない。
どういう仕組みでそうなるんだろうか。solarisのcshに独自の何かがある?
0924名無しさん@お腹いっぱい。
2009/06/11(木) 17:12:08>The original sources were retrieved from the OpenBSD CVS repository
>(anoncvs@anoncvs.openbsd.org:/cvs). The upstream tarball can be
>recreated using `debian/rules get-orig-source'.
オリジナルとの差分
http://patch-tracking.debian.net/package/csh/
0925名無しさん@お腹いっぱい。
2009/06/11(木) 23:17:47「cshの話題は厳禁」
明記よろ
0926名無しさん@お腹いっぱい。
2009/06/11(木) 23:33:07そもそもシェルスクリプトにこだわる理由も無さそうだが。
0927名無しさん@お腹いっぱい。
2009/06/12(金) 16:41:03sed -e 's/$iどうたら/こうたら/' とか。
0928名無しさん@お腹いっぱい。
2009/06/12(金) 18:11:14恥ずかしいほど基本。
''は変数置換しない。""はする。
0929名無しさん@お腹いっぱい。
2009/06/16(火) 00:02:05なぜcshの話題はだめなのかを誘導しないと「どうしてcshの話題はだめなのですか?」ってのが繁殖するよ
0930名無しさん@お腹いっぱい。
2009/06/16(火) 04:23:380931名無しさん@お腹いっぱい。
2009/06/16(火) 09:07:560932名無しさん@お腹いっぱい。
2009/06/16(火) 10:01:060933名無しさん@お腹いっぱい。
2009/06/16(火) 18:05:060934名無しさん@お腹いっぱい。
2009/06/16(火) 18:16:090935名無しさん@お腹いっぱい。
2009/06/17(水) 02:41:250936名無しさん@お腹いっぱい。
2009/06/17(水) 11:50:490937名無しさん@お腹いっぱい。
2009/06/17(水) 11:54:43シェルスクリプト書くのに何を使うかは
まったく別の話。
0938名無しさん@お腹いっぱい。
2009/06/17(水) 11:56:050939名無しさん@お腹いっぱい。
2009/06/19(金) 01:33:310940名無しさん@お腹いっぱい。
2009/06/19(金) 02:33:32bashが肥大化しててワラタw
0941名無しさん@お腹いっぱい。
2009/06/19(金) 03:09:310942名無しさん@お腹いっぱい。
2009/06/19(金) 06:10:470943名無しさん@お腹いっぱい。
2009/06/19(金) 07:29:20リーナスはSystemV贔屓だが、GNUはあんまり良く思ってないだろう。
emacsとかGNOMEとかGPL3とか悪口言いまくりだし。
0944名無しさん@お腹いっぱい。
2009/06/19(金) 18:11:24Debian信者の俺が言うのもなんだけど
0945名無しさん@お腹いっぱい。
2009/06/19(金) 18:15:54バグについて詳しく
0946名無しさん@お腹いっぱい。
2009/06/19(金) 18:20:080947名無しさん@お腹いっぱい。
2009/06/19(金) 18:33:14それを抜きにしても ja_JP.eucJP で使うのが基本。
UTF-8は問題が多い。
0948名無しさん@お腹いっぱい。
2009/06/19(金) 19:00:530949名無しさん@お腹いっぱい。
2009/06/19(金) 20:38:55えっと、LANG=C ならもろバグります。(解決になりません)
LANG=ja_JP.eucJPの時はバグらないと。(ただしファイル名もEUC-JPで作られる)
0950名無しさん@お腹いっぱい。
2009/06/19(金) 20:39:540951名無しさん@お腹いっぱい。
2009/06/19(金) 21:44:10http://znz.s1.xrea.com/t/?date=20090608
0952名無しさん@お腹いっぱい。
2009/06/19(金) 21:48:470953名無しさん@お腹いっぱい。
2009/06/19(金) 22:07:02http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=532302
0954名無しさん@お腹いっぱい。
2009/06/19(金) 22:17:37シェル変数に代入してもバグるね。
$ echo $LANG
ja_JP.UTF-8
$ bash -c 'a="あいうえお"; echo "$a"'
あいうえお
$ dash -c 'a="あいうえお"; echo "$a"'
?????
0955名無しさん@お腹いっぱい。
2009/06/19(金) 22:31:40あいうえお
はて?
0956名無しさん@お腹いっぱい。
2009/06/19(金) 22:45:36ja_JP.UTF-8
$ dash -c 'printf "????n"'
あ
$ dash -c 'a=`printf "????n"`; echo "$a"'
?
$ bash -c 'a=`printf "????n"`; echo "$a"'
あ
0957名無しさん@お腹いっぱい。
2009/06/19(金) 22:47:42ja_JP.UTF-8
$ dash -c 'printf "¥343¥201¥202¥n"'
あ
$ dash -c 'a=`printf "¥343¥201¥202¥n"`; echo "$a"'
?
$ bash -c 'a=`printf "¥343¥201¥202¥n"`; echo "$a"'
あ
0958名無しさん@お腹いっぱい。
2009/06/19(金) 22:53:53あ
無問題、てかおまいの書き込みはbackslashじゃなくてyenになってんぞ?
0959名無しさん@お腹いっぱい。
2009/06/19(金) 23:46:220960名無しさん@お腹いっぱい。
2009/06/20(土) 00:07:120961名無しさん@お腹いっぱい。
2009/06/20(土) 11:07:33ホント犬廚ってレベル低いなwww
0962名無しさん@お腹いっぱい。
2009/06/20(土) 11:31:450963名無しさん@お腹いっぱい。
2009/06/20(土) 11:43:03そういう問題じゃない。ちゃんと読み直せ。
0964名無しさん@お腹いっぱい。
2009/06/20(土) 11:49:070965名無しさん@お腹いっぱい。
2009/06/21(日) 11:15:50http://pc11.2ch.net/test/read.cgi/linux/1241948212/
【dashが】Debian GNU/Linux スレッド Ver.60【バグ持ち】
0966名無しさん@お腹いっぱい。
2009/06/22(月) 03:13:53# cat test.sh
TEST1=45:0:0:0
TEST2=aaa.bbb.ccc
echo "TEST1%%:* = ${TEST1%%:*}"
echo "TEST2##.* = ${TEST2##*.}"
# sh test.sh
TEST1%%:* = 45
TEST2##.* = ccc
どうしてこうなるのかが、わからないんです orz
キーワードが悪いのか、ググっても解決できない・・・
0967名無しさん@お腹いっぱい。
2009/06/22(月) 05:31:15$ man sh
${parameter%word}
Remove Smallest Suffix Pattern. The word is expanded to produce
a pattern. The parameter expansion then results in parameter,
with the smallest portion of the suffix matched by the pattern
deleted.
${parameter%%word}
Remove Largest Suffix Pattern. The word is expanded to produce a
pattern. The parameter expansion then results in parameter, with
the largest portion of the suffix matched by the pattern deleted.
${parameter#word}
Remove Smallest Prefix Pattern. The word is expanded to produce
a pattern. The parameter expansion then results in parameter,
with the smallest portion of the prefix matched by the pattern
deleted.
${parameter##word}
Remove Largest Prefix Pattern. The word is expanded to produce a
pattern. The parameter expansion then results in parameter, with
the largest portion of the prefix matched by the pattern deleted.
0968名無しさん@お腹いっぱい。
2009/06/22(月) 05:49:40ありがとう
自分の愚かさを理解しました
初心に戻ります・・・
ありがとう!
0969名無しさん@お腹いっぱい。
2009/06/23(火) 00:07:39dir=${1=/tmp}
こんな感じでスマートに書けるかと思ったらできなかったんですがどうなんでしょう?
0970名無しさん@お腹いっぱい。
2009/06/23(火) 00:37:180971名無しさん@お腹いっぱい。
2009/06/23(火) 06:40:26dir=${1-/tmp}
ちなみに、bash以外の開発でも↑の書き方で桶。
0972名無しさん@お腹いっぱい。
2009/06/23(火) 08:21:35自分なら
dir=${1:-/tmp}
0973名無しさん@お腹いっぱい。
2009/06/23(火) 08:28:19それだと、
shellscript ''
みたいに空文字列を敢えて引数にした時まで、
/tmp に変換されてしまう。
敢えて空文字列指定はしたいので。
0974名無しさん@お腹いっぱい。
2009/06/24(水) 01:58:04>>972
そもそも書式間違ってたようですね
ありがとうございます!
0975名無しさん@お腹いっぱい。
2009/06/29(月) 21:56:04hoge0:0 = "TRUE"
hoge0:1 = "TRUE"
hoge0:2 = "TRUE"
・
・
hoge0:9 = "TRUE"
上記の様な記述がされたテキストのhoge0:0以外の"TRUE"の
部分だけを"FALSE"へ置換したいのですが、sed等の置換で
置換可能でしょうか?
全ての"TRUE"を"FALSE"に変更するのであれば
簡単に出来ますが、「置換条件にあった複数行の数文字目以降だけを置換」
みたいな事って出来るんでしょうか?
0976名無しさん@お腹いっぱい。
2009/06/29(月) 21:59:54sed '/hoge0:0/!s/TRUE/FALSE/'
0977名無しさん@お腹いっぱい。
2009/06/29(月) 23:01:28ありがとうございます。
これで何とかなりそうです。
0978名無しさん@お腹いっぱい。
2009/06/30(火) 03:41:23これって何?どうやったら直るの?
0979名無しさん@お腹いっぱい。
2009/06/30(火) 04:26:51termcap について語るスレ
0980名無しさん@お腹いっぱい。
2009/06/30(火) 07:37:470981名無しさん@お腹いっぱい。
2009/06/30(火) 12:14:39$ reset
0982名無しさん@お腹いっぱい。
2009/06/30(火) 14:58:21そろそろ産め。
0983名無しさん@お腹いっぱい。
2009/07/01(水) 01:52:42その一コマンドでbashが三日分死ぬ
0984名無しさん@お腹いっぱい。
2009/07/01(水) 06:14:500985名無しさん@お腹いっぱい。
2009/07/01(水) 08:13:060986名無しさん@お腹いっぱい。
2009/07/01(水) 09:58:32http://pc12.2ch.net/test/read.cgi/unix/1246408968/
0987名無しさん@お腹いっぱい。
2009/07/01(水) 14:39:200988名無しさん@お腹いっぱい。
2009/07/01(水) 15:04:35Solarisにはない。
0989名無しさん@お腹いっぱい。
2009/07/01(水) 18:12:260990名無しさん@お腹いっぱい。
2009/07/01(水) 18:22:130991名無しさん@お腹いっぱい。
2009/07/01(水) 22:11:280992名無しさん@お腹いっぱい。
2009/07/01(水) 23:52:52/usr/ucb/resetってなかったっけ?
$ tput reset
すれば済むことだけど。
0993名無しさん@お腹いっぱい。
2009/07/02(木) 06:38:47ダウト。
tput resetでは、画面のエスケープシーケンスがリセットされるだけで、
sttyの設定(^Mとか)はリセットされない。
>$ tput reset
>すれば済むことだけど。
済まない。
0994名無しさん@お腹いっぱい。
2009/07/02(木) 07:35:370995名無しさん@お腹いっぱい。
2009/07/02(木) 21:28:530996名無しさん@お腹いっぱい。
2009/07/03(金) 10:30:40最近はvncが多いのか?
0997名無しさん@お腹いっぱい。
2009/07/03(金) 15:00:24VNCは暗号化されないからSSHは捨てられないよな。
VNC+SSHだってるかうし。
0998名無しさん@お腹いっぱい。
2009/07/03(金) 20:36:02無い事にしてしまいたいニダ
0999名無しさん@お腹いっぱい。
2009/07/03(金) 20:52:561000名無しさん@お腹いっぱい。
2009/07/03(金) 20:56:0510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。