シェルスクリプト総合 その6
レス数が1000を超えています。これ以上書き込みはできません。
0001うはwwwww
2006/03/26(日) 00:56:22スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
0002おkwwwwwwwwwwwww
2006/03/26(日) 00:57:10シェルスクリプト総合 その5
http://pc8.2ch.net/test/read.cgi/unix/1137801629/
シェルスクリプト総合 その4
http://pc8.2ch.net/test/read.cgi/unix/1131026501/
シェルスクリプト総合 その3
http://pc8.2ch.net/test/read.cgi/unix/1124889646/
シェルスクリプト総合 その2
http://pc8.2ch.net/test/read.cgi/unix/1113664637/
シェルスクリプト総合 その1
http://pc8.2ch.net/test/read.cgi/unix/1101820646/
□関連スレ:
sed
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
正規表現
http://pc8.2ch.net/test/read.cgi/unix/1039165754/
おまえら! shell は何を使っているんですか?
http://pc8.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc8.2ch.net/test/read.cgi/unix/1102921590/
□他板の関連スレ:
【sed】シェルスクリプト総合@LINUX【awk】
http://pc8.2ch.net/test/read.cgi/linux/1121994321/
【Shell】どのシェル使ってる?【Script】
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
0003ちょwwwwww
2006/03/26(日) 00:58:49「誰にでも」シリーズ
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/
□参考リンク:
UNIXの部屋 (沢山のコマンドの簡単な紹介など)
http://x68000.q-e-d.net/~68user/unix/
POSIX: Shell & Utilities (標準規格)
http://www.opengroup.org/onlinepubs/009695399/utilities/contents.html
0004ワッフルワッフル
2006/03/26(日) 01:00:22FreeBSD 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,xargs
(スペースなどを含むファイル名を正しく処理するため、
findは -print0、xargsは -0オプションを常に付けることを推奨
ただし、Solarisでは未対応。どうするんだろ?)
ディレクトリ系: basename,dirname
出力系: echo,printf
対話コマンド制御系: expect
http/ftpの処理自動化: wget,curl
0005名無しさん@お腹いっぱい。
2006/03/26(日) 01:00:52(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/
0006名無しさん@お腹いっぱい。
2006/03/26(日) 01:02:35(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) 詳解 シェルスクリプト アーノルド ロビンス (著), ほか
http://www.amazon.co.jp/o/ASIN/4873112672/
0007名無しさん@お腹いっぱい。
2006/03/26(日) 01:03:050008名無しさん@お腹いっぱい。
2006/03/26(日) 01:16:47//
>三三三 // ∧_∧ //
( ´>`)y=-※==(・Д・※==================⊃
( ○ ( )
| || // /
(_)_) (_(_)
0009名無しさん@お腹いっぱい。
2006/03/26(日) 01:39:52乙。
0010名無しさん@お腹いっぱい。
2006/03/26(日) 10:34:220011名無しさん@お腹いっぱい。
2006/03/26(日) 14:57:070012名無しさん@お腹いっぱい。
2006/03/27(月) 14:50:04お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0013名無しさん@お腹いっぱい。
2006/03/27(月) 16:21:08perlスクリプトだったので持ってきて、いろいろ試してみた。
手元にあった bashスクリプトの1行目を #!/bin/sh に書き換えて
checkbashismsにかけてみたけど・・・
・・・なんかチェック甘いね。
ほとんど何も引っかからない。
引っかかったのは ${HOGE//hage/boke} くらい。
引っかけて欲しかった、↓は、
for ((i = 0; i < 10; i++)) { echo $i; }
通ってしまった。
これってbash依存じゃないの?
0014名無しさん@お腹いっぱい。
2006/03/27(月) 16:37:07@bashism_regexs にあるのしかひっかけないみたいね。
パッケージ作る際にありがちなのだけひっかかれば十分、
っていう考えなんじゃないの?
0015名無しさん@お腹いっぱい。
2006/03/27(月) 17:14:55bashのソースを改造して、構文解析でbash依存の構文が出現したら
メッセージを出すようにすれば簡単に作れると思うんだけど。
0016名無しさん@お腹いっぱい。
2006/03/27(月) 23:24:20お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0017HelpME
2006/03/28(火) 14:20:36tcshで困ってます。
----------------------------------------
#!/bin/sh
MYPATH=`pwd`
---------------------------------------
はOKなのに
------------------------------------------
#!/bin/tcsh
MYPATH=`pwd`
------------------------------------------
はNGなのは何故なんでしょう。
shとtcshでは変数に値を入れる文法って
違うのでしょうか?
0018名無しさん@お腹いっぱい。
2006/03/28(火) 14:25:260019名無しさん@お腹いっぱい。
2006/03/28(火) 15:10:52>>1 嫁。
>・csh/tcshのシェルスクリプトは推奨されません。
> (理由は「csh-whynot」でググれ)
0020名無しさん@お腹いっぱい。
2006/03/28(火) 15:16:380021名無しさん@お腹いっぱい。
2006/03/28(火) 15:27:06お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0022名無しさん@お腹いっぱい。
2006/03/28(火) 15:30:350024名無しさん@お腹いっぱい。
2006/03/28(火) 20:19:40ばかもん。答えるなよ。皆んな知ってても敢えて答えなかったのに。
0025名無しさん@お腹いっぱい。
2006/03/28(火) 21:00:470026名無しさん@お腹いっぱい。
2006/03/28(火) 21:33:14シェルとUNIXとで実行結果が異なる場合、
どういった原因が考えられますか?
0027名無しさん@お腹いっぱい。
2006/03/28(火) 21:51:02キミの日本語インタープリターが壊れている。
0028名無しさん@お腹いっぱい。
2006/03/28(火) 22:05:10それは多分UNIXが間違ってるんだろうね。
ちゃんと手を洗ってからインストールした?
ウイルス入っちゃってるかもよ。
0029名無しさん@お腹いっぱい。
2006/03/28(火) 22:33:07たった2回なのでforやwhileにするのは大げさなので、
#!/bin/sh
あるコマンド
!!
というシェルを書きましたが、エラーになります。
UNIXだと
$ あるコマンド
$ !!
で実行できます。なぜこうなるのでしょう?
0030名無しさん@お腹いっぱい。
2006/03/28(火) 22:44:420031名無しさん@お腹いっぱい。
2006/03/28(火) 22:49:02あんたは「シェル」を書いたんじゃなくて「シェルスクリプト」を書いた。
「UNIXだと」じゃなくて「シェルプロンプトだと」だ。
おそらくあんたの使っているシェルは/bin/bashか/bin/ksh。これらは/bin/shと違って !! で直前のコマンドを実行できる。
絶対確実というわけではないけど、どのシェルを使っているかは、
echo $SHELL
を実行してごらん。
0032名無しさん@お腹いっぱい。
2006/03/28(火) 22:54:44$ echo $SHELL
/bin/sh
と出ましたが。
0033名無しさん@お腹いっぱい。
2006/03/28(火) 23:04:09kshで!!が使えるとは、初耳です。
0034名無しさん@お腹いっぱい。
2006/03/28(火) 23:22:230035名無しさん@お腹いっぱい。
2006/03/28(火) 23:27:11003631
2006/03/28(火) 23:36:41すまん、間違えた。
>>32
うーむ、今動いてるシェルが何かを確実に見極める方法は知らない。
bashを使っているという前提で次の事を試してみて。
Tabキーを連続して2回押すとどう表示されるか?
echo $BASH の出力は?
ps の出力は?
0037名無しさん@お腹いっぱい。
2006/03/28(火) 23:37:16あるコマンド
と素直に二行書けばいいじゃん
0038Masa ◆Masa.mmzoo
2006/03/28(火) 23:45:03sync
sync
0039名無しさん@お腹いっぱい。
2006/03/29(水) 00:13:31起動する時に-funroll-loopsオプションをつけると
自動的に展開される
0040名無しさん@お腹いっぱい。
2006/03/29(水) 00:57:52!-5
!32
!!
0041名無しさん@お腹いっぱい。
2006/03/29(水) 00:59:140042名無しさん@お腹いっぱい。
2006/03/29(水) 02:24:03aaa.txtという名前の2000バイト固定長ファイルの500〜502バイト目が
'xyz'のときだけ、そのレコードをbbb.txtにコピーするためには
どのようなスクリプトを作ればよろしいのでしょうか?
よろしくお願いします。
0043名無しさん@お腹いっぱい。
2006/03/29(水) 02:49:01固定長なのはレコード長なのじゃないのか?
#!/bin/sh
infile=aaa.txt; outfile=bbb.txt; tmpfile=/tmp/foo.$$
echo 'xyz\c' > $tmpfile.1
dd bs=1 skip=500 count=3 < $infile > $tmpfile.2
if cmp $tmpfile.1 $tmpfile.2; then
cp $tmpfile.2 $outfile
fi
rm $tmpfile.1 $tmpfile.2
0044名無しさん@お腹いっぱい。
2006/03/29(水) 05:30:09とかでいけそうな気もする
0045名無しさん@お腹いっぱい。
2006/03/29(水) 06:46:49お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0046名無しさん@お腹いっぱい。
2006/03/29(水) 10:03:332回だけ手軽に繰り返したい、という質問なら、
#!/bin/sh
a='あるコマンド'
$a
$a
コマンドラインで !! が実行できるのに、
シェルスクリプト中では実行できないのは何故かという質問なら、
それは、「インタラクティブかどうか」でシェル自身が動作を変えているから。
!! が使える bashや zshであっても、
シェルスクリプト中では !!はただの !!という文字列になる。
0047名無しさん@お腹いっぱい。
2006/03/29(水) 11:10:390048名無しさん@お腹いっぱい。
2006/03/29(水) 11:43:34repeat 2 あるコマンド
0049名無しさん@お腹いっぱい。
2006/03/29(水) 12:13:07それだと「構文」になっちゃうから、「手軽」にならない。
しかも、(t)cshの文法はタブー。
「構文」使ってもいいなら↓
for i in 1 2; do あるコマンド; done
0050名無しさん@お腹いっぱい。
2006/03/29(水) 12:16:05#!/bin/csh
あるコマンド
!!
で桶。
なんたる糞Cシェル。
副作用として、
echo 'Hello !!'
が、シングルクォートで囲んでいるのに !!が展開されてしまう。
なんたる糞Cシェル。
0051名無しさん@お腹いっぱい。
2006/03/29(水) 12:36:44解ってるなら
不利益になるコマンドは使わなければ良いんだろ
0052名無しさん@お腹いっぱい。
2006/03/29(水) 15:02:37お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0053名無しさん@お腹いっぱい。
2006/03/29(水) 15:13:43飽きた
0054名無しさん@お腹いっぱい。
2006/03/29(水) 16:01:480055名無しさん@お腹いっぱい。
2006/03/29(水) 16:08:200056名無しさん@お腹いっぱい。
2006/03/29(水) 16:08:34んなもんやることによって違うに決まってるでしょ
0057名無しさん@お腹いっぱい。
2006/03/29(水) 16:09:09もちろん sed。(sedで書けるものはなるべくsedで)
0058名無しさん@お腹いっぱい。
2006/03/29(水) 16:41:08バイナリサイズは sed < awk で4倍も差があったので、基本は sed で、
sed ではすっきりしないAVアホですっきりしたい時は awk って事にします。
0059名無しさん@お腹いっぱい。
2006/03/29(水) 17:44:30バイナリサイズの時間への影響なんて誤差の範囲だし、
メモリに載ってるかどうかで逆転する。つまり気にする意味がない。
速度が気になるなら57を鵜飲みにせず自分で2通り書いてはかってみれ。
0060名無しさん@お腹いっぱい。
2006/03/29(水) 18:24:45と、
awk '{ gsub(/hoge/, "hage"); print }'
とで比較すると、
sedの方が約2倍速いなぁ。
>>59
「バイナリサイズの時間への影響はメモリに載ってるかどうかで逆転する」
というのは同意だが、それはsed/awkの起動時のオーバーヘッドであって、
起動中の文字列処理速度とは別の話。
sedでもできる処理をawkにやらせると、やっぱりawkの方が遅くなるよ。
0061名無しさん@お腹いっぱい。
2006/03/29(水) 18:27:210062名無しさん@お腹いっぱい。
2006/03/29(水) 18:28:21sedは↓
http://pc8.2ch.net/test/read.cgi/unix/1085730992/l50
awkはスレがないけど、必要なら誰か立てて。
0063名無しさん@お腹いっぱい。
2006/03/29(水) 18:32:49http://pc8.2ch.net/test/read.cgi/tech/1023556171/
でも比較の話は中立な所でするほうが良いような。
0064名無しさん@お腹いっぱい。
2006/03/29(水) 19:19:34お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0065名無しさん@お腹いっぱい。
2006/03/30(木) 00:53:43なにいってんだハゲ
帰れ
0066名無しさん@お腹いっぱい。
2006/03/30(木) 01:53:10お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0067名無しさん@お腹いっぱい。
2006/03/30(木) 02:29:52これスクリプトで書き込んでいるんじゃないのか?w
0068名無しさん@お腹いっぱい。
2006/03/30(木) 08:42:51>find / -print > find.txt
>ls -l find.txt
-rw-r--r-- 1 root whell 27679632 Mar 30 07:39 find.txt
>time awk -F / '{print $1"/"$2"/"$3}' < find.txt >> /dev/null
17.871u 0.569s 0:18.57 99.2% 148+277k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*/[^/]*/*[^/]*\).*|\1|p' < find.txt >> /dev/null
770.721u 4.670s 13:00.62 99.3% 35+235k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt >>/dev/null
1616.450u 8.887s 27:16.78 99.3% 35+235k 0+0io 0pf+0w
sedに問題がありそうですが、そこはsedスレに行きましょう。
0069名無しさん@お腹いっぱい。
2006/03/30(木) 10:00:03sed -ne 's|^\([^/]*/[^/]*/*[^/]*\).*|\1|p'
↑じゃなくて、
↓じゃないの?
sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p'
(上だとアスタリスクが1個余分だから、無駄な処理が行なわれている)
下の方でawkと比較すると、
やはりsedの方が速かったよ。
0070名無しさん@お腹いっぱい。
2006/03/30(木) 10:03:15お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0071名無しさん@お腹いっぱい。
2006/03/30(木) 11:33:43うーん。クロック4倍で。
>time awk -F / '{print $1"/"$2"/"$3}' < find.txt >> /dev/null
4.194u 0.070s 0:04.27 99.7% 147+275k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt >> /dev/null
378.530u 0.515s 6:19.73 99.8% 35+235k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p' < find.txt >> /dev/null
156.079u 0.249s 2:36.65 99.7% 35+235k 0+0io 0pf+0w
やっぱりうちではsedが遅い。ちなみに結果が異なるというのは、
>awk -F / '{print $1"/"$2"/"$3}' < find.txt | head -3
//
/.snap/
/dev/
>sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt | head -3
//
/.snap/
/dev/
>sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p' < find.txt |head -3
/dev/network
/dev/geom.ctl
/dev/devctl
こんな感じ。awkの結果が必要なものだとすると、sedはプロンプトが返ってこないのに
心配になるくらいうちでは遅い。
Windows Meを入れて売ってた頃のメーカーPCってのがだめなのかなぁ。
0072名無しさん@お腹いっぱい。
2006/03/30(木) 11:39:58内部で-3を-n3に書き換えてるのか。
0073名無しさん@お腹いっぱい。
2006/03/30(木) 11:46:20出力が違うことについては、
sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p'
じゃなくて、
sed -e 's|^\([^/]*/[^/]*/[^/]*\).*|\1|'
の方がいいかも。
0074名無しさん@お腹いっぱい。
2006/03/30(木) 11:47:44head -3 のほうが一般的だよ。
head -n3 だと動かないバージョン(OS)があるはず。
0075名無しさん@お腹いっぱい。
2006/03/30(木) 12:41:17>time sed -e 's|^\([^/]*/[^/]*/[^/]*\).*|\1|' < find.txt >> /dev/null
156.072u 0.218s 2:36.66 99.7% 35+235k 0+0io 0pf+0w
となりました。しかし
>sed -e 's|^\([^/]*/[^/]*/[^/]*\).*|\1|' < find.txt > sed.txt
>awk -F / '{print $1"/"$2"/"$3}' < find.txt > awk.txt
>diff -q sed.txt awk.txt
Files sed.txt and awk.txt differ
と、結果が違うようです。
> sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt > sed.txt
>diff -q sed.txt awk.txt
こっちは同じになってるらしい。圧倒的に遅いけど。
0076名無しさん@お腹いっぱい。
2006/03/30(木) 14:00:48お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0077名無しさん@お腹いっぱい。
2006/03/30(木) 14:09:15てのは流行ってるの?
なんでああ言う書式なんだろWinブラウザだと何か特殊に見えるの?
0078名無しさん@お腹いっぱい。
2006/03/30(木) 15:11:14ウィルスでは?
0079名無しさん@お腹いっぱい。
2006/03/30(木) 15:50:040080名無しさん@お腹いっぱい。
2006/03/30(木) 15:54:210081名無しさん@お腹いっぱい。
2006/03/31(金) 00:48:49確かに -n3 より -3 の方が一般的だと思うけど、
GNU textutils 2.1 の man には -LINES は
推奨されないオプションで -n LINES か
--lines=LINES を使えと書いてあるね。
0082名無しさん@お腹いっぱい。
2006/03/31(金) 02:34:08迫害される時期にあるのね。head だけじゃなくて sort のオプ
ションも同様な状況。
それがいいことか悪いことかは分からないが…
俺は相変わらず head でも sort でも古い形式を使ってる。
0083名無しさん@お腹いっぱい。
2006/03/31(金) 06:52:30int
main(int argc, char *argv[])
{
:
obsolete(argv);
while ((ch = getopt(argc, argv, "n:c:")) != -1)
:
static void
obsolete(char *argv[])
{
:
/* Return if "--" or not "-[0-9]*". */
:
2バイト大きいメモリを確保して"-n"と"-[0-9]*の"-"を取った文字列同士をくっつける処理
:
}
0084名無しさん@お腹いっぱい。
2006/03/31(金) 08:42:16使ってていいんじゃない?
0085名無しさん@お腹いっぱい。
2006/03/31(金) 09:02:45未だに改善される気配すらないよね。
dd if=/dev/zero of=tmpfile bs=1024k count=1024
じゃなくて、
dd -i /dev/zero -o tmpfile -b 1024k -c 1024
の方が、今から設計するなら然るべきと思うんだが。
特に、ファイル名(デバイス名)の左側に = がくっついてるから、
シェルでワイルドカードの展開とかができない。
headのオプションに拘るより、こういうのを改善するべきだ。
0086名無しさん@お腹いっぱい。
2006/03/31(金) 09:17:150087名無しさん@お腹いっぱい。
2006/03/31(金) 10:04:31Copy and Convert で cc になる予定が cc はすでにコンパイラで使われて
いたので dd にした。ちなみに dd は JCL の data definition の省略形
なんで, シャレで JCL の構文に合わせてみた(反省はしていない)。
ってのを, どっかで読んだ。
Unix に合わせるんだったら別のコマンドにするべきじゃねぇの?
0088名無しさん@お腹いっぱい。
2006/03/31(金) 11:16:38不便なオプション形式が推奨されるのって、なんか間違ってる気がする。
dd じゃなくて head の話ね。
0089名無しさん@お腹いっぱい。
2006/03/31(金) 11:32:03なぁ
お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0090名無しさん@お腹いっぱい。
2006/03/31(金) 11:33:28お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0091名無しさん@お腹いっぱい。
2006/03/31(金) 16:51:270092名無しさん@お腹いっぱい。
2006/03/31(金) 17:42:570093名無しさん@お腹いっぱい。
2006/03/31(金) 19:09:340094名無しさん@お腹いっぱい。
2006/03/31(金) 19:23:05findは変態だが、tarは別に変態じゃないぞ。
tar ztvf hoge.tar.gz
の代わりに、
tar -z -t -v -f hoge.tar.gz
とも打てるわけだし。
0095名無しさん@お腹いっぱい。
2006/03/31(金) 19:31:370096名無しさん@お腹いっぱい。
2006/03/31(金) 20:12:170097名無しさん@お腹いっぱい。
2006/03/31(金) 20:43:3685のどこに犬依存の記述があるんだい???
0098名無しさん@お腹いっぱい。
2006/03/31(金) 22:24:42「Linuxのddではdd -i /dev/zero -o tmpfile -b 1024k -c 1024という記述ができる」
と勘違いしたようだ。
しかも、>>85 が、「Linuxのddの書式をUNIXのddでも使えるようにしろ」と
主張しているものと勘違いしたようだ。
0099名無しさん@お腹いっぱい。
2006/03/31(金) 23:40:3385は「こんなのも使えるようになりゃいいな」って話じゃなくて、
headやsortのオプションがGNU getoptに合わないので色々
迫害されてるねえって話題の中で、「ddも改善されるべきだ」
という意見を出している。今の話の流れだと、改善されるべきだ=
旧来のオプションは消えちまえだからな。
>98
妄想たくましすぎw
0100名無しさん@お腹いっぱい。
2006/03/32(土) 01:06:240101名無しさん@お腹いっぱい。
2006/03/32(土) 01:36:590102名無しさん@お腹いっぱい。
2006/03/32(土) 01:40:484.3BSD の時代から getopt はありますよ。
0103名無しさん@お腹いっぱい。
2006/03/32(土) 03:58:500104名無しさん@お腹いっぱい。
2006/03/32(土) 03:59:480105前スレのクラッカー
2006/03/32(土) 04:06:04それとクラッキング与太話はするつもりは無いよ僕、リスクが上昇してしまうからね、
まああの時はカナダ、ドイツ、インド、アメリカ、中国、韓国、イスラエル、ルーマニア、イタリア、オーストラリア、アイルランド、アフリカ、チェチェン、バチカン、アイスランド
とこんな感じで超・多段串を刺してクラッキングしたねw
まぁ君らみたいな低脳には到底不可能な芸当だよw
僕を崇めろw
0106名無しさん@お腹いっぱい。
2006/03/32(土) 04:27:25頭悪いなお前
ぷぷぷ
0107名無しさん@お腹いっぱい。
2006/03/32(土) 09:17:13お前国語能力ないな。
>>85 は、headのオプションを、-3形式の、互換性のあるものから、
-n3の、新しいけど互換性のない形式にするなら、
ddだって変えてしまってもいいことになるが、
実際にはその気配はない。
だからこういった基本コマンドのオプションは安易に変えるべきではない。
(head -3の方が良い)
と、反語的に主張しているんだよ。
0108名無しさん@お腹いっぱい。
2006/03/32(土) 09:28:01いや違うだろ。>>85 はそんなこと言ってないだろ
0110名無しさん@お腹いっぱい。
2006/03/32(土) 10:25:420111前スレのクラッカー
2006/03/32(土) 10:26:54おい 屑共
0112名無しさん@お腹いっぱい。
2006/03/32(土) 10:44:21ストレートな表現ばかりに慣れ過ぎて、
ちょっと捻った文章の読解能力が低下して、
>>96 >>99 >>108 >>110 みたいな香具師が登場することになるわな。
0113名無しさん@お腹いっぱい。
2006/03/32(土) 10:47:37>まあ、manとか技術文書ばかり読んでると、
>ストレートな表現ばかりに慣れ過ぎて、
>ちょっと捻った文章の読解能力が低下して、
>>>96 >>99 >>108 >>110 みたいな香具師が登場することになるわ
>な。
ぎゃはは
ばっかじゃねーのこいつ
0114名無しさん@お腹いっぱい。
2006/03/32(土) 11:15:260115名無しさん@お腹いっぱい。
2006/03/32(土) 11:58:23褒め殺しをするとか、そういうサインを入れとか無いと駄目ですよって学校で習わなかった?
ひねった文章ってのは、ひねったことが読者に分かって初めて意味があるんだがなあ。
まあ、煽り文句は煽った本人のコンプレックスの現れという定理に基づくと、
「国語能力低いな」と煽った107=85は…(ry
0116名無しさん@お腹いっぱい。
2006/03/32(土) 12:53:27それを言うなら「定理」じゃなくて「法則」だなw
「国語能力低いな」
0117名無しさん@お腹いっぱい。
2006/03/32(土) 13:09:35たとえば、↓「エスパーきぼんぬ」のレスを貰う八ヶ条。
http://pc8.2ch.net/test/read.cgi/unix/1142379262/4
は、反語的表現として良くできていて面白いと思う。
しかし、ここに「などと言えるのではなかろうか」みたいな文章が入っていると、
せっかくの反語的表現が白けてしまって面白くなくなる。
(以前は補足みたいなのが付いてたけど、削除されたようだし、
そもそも補足が必要な国語能力低い香具師は居ないと言う前提で桶だろ)
0118名無しさん@お腹いっぱい。
2006/03/32(土) 16:29:54命題がサインになっている。国語力低いな。
0119名無しさん@お腹いっぱい。
2006/03/32(土) 16:42:52>>85 の文章は「ddも改善されるべきだ」とも取れるのはその通りだとしても、
そこから、>>96 の「犬は帰れ。」のところで理論の飛躍があると思う。
どうして犬だと思ったのか、もっとちゃんとした説明が欲しいな。
0120115
2006/03/32(土) 16:44:37ああ、法則のほうがあってるね。わりいな。
>117
ああいう褒め殺しの典型みたいな文章をもってきて、
なにがいいたいのやら。85でももうちょっと技法を使って
他人に反語的表現だと理解してもらえる文章にしないと、
それができないならせめて補足を入れないと駄目だぞ。
0121名無しさん@お腹いっぱい。
2006/03/32(土) 16:57:20横レススマソ。「法則」の方が合ってる(程度問題)じゃなく、
「定理」だと間違い。
定理なら証明して導かないといけない。
0122名無しさん@お腹いっぱい。
2006/03/32(土) 17:07:40つべこべ言わずにコード書け
0123名無しさん@お腹いっぱい。
2006/03/32(土) 17:12:07何でもかんでも犬にこじつけて排除しようとするから、
スレが荒れるなぁ・・
0124名無しさん@お腹いっぱい。
2006/03/32(土) 17:36:54今の話題は反語的表現。
0125前スレのクラッカー
2006/03/32(土) 17:54:42なぁ屑共 お前らに話がある
大切な話だ
0126名無しさん@お腹いっぱい。
2006/03/32(土) 18:13:04来て良さそうなカキコはあったのにね。
>>103,104,111,125 みたいな、自動カキコのシェルを書いてる人本人なのかなぁ。
0127名無しさん@お腹いっぱい。
2006/03/32(土) 18:14:430128前スレのクラッカー
2006/03/32(土) 18:15:45ところでお前らに大切な話があるよ屑共。
0129名無しさん@お腹いっぱい。
2006/03/32(土) 18:26:460130名無しさん@お腹いっぱい。
2006/03/32(土) 18:52:360131前スレのクラッカー
2006/03/32(土) 19:07:440132前スレのクラッカー
2006/03/32(土) 19:10:22・・・なんてったって遅いからだよ。
シェルスクリプトに限らず俺はインタプリタ型言語が大ッッッッッ嫌いでね。
悪いが当分の間このスレに居座り、荒らし行為をさせて貰うよ。
因みに俺の好きな言語はアセンブラ。
0133名無しさん@お腹いっぱい。
2006/03/32(土) 19:14:28> 俺の好きな言語はアセンブラ。
wwwww ワロス
0134名無しさん@お腹いっぱい。
2006/03/32(土) 19:25:19俺には大切な話なんかないぞ。屑は帰れ。
0135前スレのクラッカー
2006/03/32(土) 19:43:19どちらかと言うとお前らの方が屑だと思うぞ。
0136名無しさん@お腹いっぱい。
2006/03/32(土) 20:02:550137前スレのクラッカー
2006/03/32(土) 20:07:57同意。
お前も含まれるがな。
0138名無しさん@お腹いっぱい。
2006/03/32(土) 20:22:480139名無しさん@お腹いっぱい。
2006/03/32(土) 20:24:050140名無しさん@お腹いっぱい。
2006/03/32(土) 20:26:160141名無しさん@お腹いっぱい。
2006/03/32(土) 20:29:51お大事に。
0142名無しさん@お腹いっぱい。
2006/03/32(土) 20:33:09速度以外の点でメリットがあるからシェルスクリプトを使うわけで。
0143前スレのクラッカー
2006/03/32(土) 20:35:59よく分からないけど俺の世代にはアセンブラ言語と言う人間が大多数存在しているから、
間違いじゃないぞ。
あぁ〜自称プログラマーの使えないクズでしたか。すまんすまん。
>>139
お前のせいだ
>>140
意味が分からんよ全く、屑のホザくことは
>>141
実際遅いんだから、事実だろ?
俺が何年PCやプログラムに触れていると思っているんだ?
舐めるなよ。
0144名無しさん@お腹いっぱい。
2006/03/32(土) 20:36:35コンパイルしてもたいして速くならなかったりするよ。
0145名無しさん@お腹いっぱい。
2006/03/32(土) 20:40:56えーと、歳いくつ?
世代全員そんな馬鹿だとは思えないから、たぶん君と君の友達だけだよ。
google で検索
アセンブラ言語 の検索結果 約 43,400 件
アセンブリ言語 の検索結果 約 168,000 件
43400/(43400+168000) ≒ 0.2
∴ 人類の下位 20% に属するバカ
なるほど。
φ(..)メモメモ...
0146名無しさん@お腹いっぱい。
2006/03/32(土) 20:41:37アセンブリー言語のことを慣習的に「アセンブラ」と呼ぶのは一般的だが、
「アセンブラ言語」という言い方は初めて聞いたな。
「言語」がくっつくと確かにおかしく感じる。
0147名無しさん@お腹いっぱい。
2006/03/32(土) 20:42:570148名無しさん@お腹いっぱい。
2006/03/32(土) 20:44:05コンパイル型言語(というかC言語)でも、インタプリタ以上に遅いコードはざら。
sscanf 一発な簡単な文字列処理でも、strxxxでコピーしてコピーしてとごちゃごちゃやってたり
0149名無しさん@お腹いっぱい。
2006/03/32(土) 20:46:35一部の特例を出してきても、一般例の反論にはならないのはわかってますか?
0150前スレのクラッカー
2006/03/32(土) 20:47:43無駄な労力ご苦労様。
>>146
で?
俺は一般的にはアセンブラ言語だと思っているよ。
>>147
お前は下位0.01%に含まれる屑人間だと思うよ。
>>148
レベルが低いのはお前だよ。
良い会社じゃないか、定石通りの綺麗なコードを書くんだろうなあ
>>149
黙ってろ低脳
0151名無しさん@お腹いっぱい。
2006/03/32(土) 20:51:08高速にならないが、高級言語を使ってアルゴリズムのレベルで最適化
すると、指数的オーダで改善することが多いから、高級言語の方が
いいよん。
まあタイトループの最内部をアセンブラで高速化するのは時には意味
があるけど、かなり特殊な用途だね。
0152名無しさん@お腹いっぱい。
2006/03/32(土) 20:53:37「一般的には××だ」と主張する根拠が「俺はそう思っている」からだと。
ククク。
0153名無しさん@お腹いっぱい。
2006/03/32(土) 20:57:31「タイトループ」? ってもしかしてアノ業界のプログラマ?
0154前スレのクラッカー
2006/03/32(土) 21:02:15お前BASICからプログラム始めたクチだろ。
アセンブラをよく知らない屑がよく吐く屁理屈だ。
まあお前もアセンブラを深く学べば俺に同調するようになる。
>>152
それは俺が常にルールに従っているからこその自信だ。
あと
>ククク。
気色が悪いから止めてくれないか?屑野郎。
>>153
ほう、タイトスカートフェチか。
ピンクモンキーは大人しくセンズリかいて寝てろよ。
0155名無しさん@お腹いっぱい。
2006/03/32(土) 21:06:30そこで、このループのみ、インラインアセンブラを仕込む方法を
教えてください。もちろん、Bourne Shell互換で。
OS依存なしで、お願いします。
0156前スレのクラッカー
2006/03/32(土) 21:07:51すっこんでろヒヨッコが
0157名無しさん@お腹いっぱい。
2006/03/32(土) 21:09:40あ、書き忘れました。OS依存だけでなく、CPU依存もなしでお願いします。
0158前スレのクラッカー
2006/03/32(土) 21:11:25お前に書いてやるコードなどない
0159前スレのクラッカー
2006/03/32(土) 21:18:260160名無しさん@お腹いっぱい。
2006/03/32(土) 21:22:060161前スレのクラッカー
2006/03/32(土) 21:24:53悪いな、お前の彼女なら俺の隣で寝てるよ
0162名無しさん@お腹いっぱい。
2006/03/32(土) 21:33:49スクリプト内で動的にコード生成してコンパイルなどして実行すればー。
0163名無しさん@お腹いっぱい。
2006/03/32(土) 21:37:43なに?シェルスクリプトでインラインアセンブラが使えない?
ジョジョ、それはコンパイル言語と同じにやろうとするからだよ
逆に考えるんだ
「インラインアセンブラからシェルスクリプトを呼べばいい」と
0164前スレのクラッカー
2006/03/32(土) 21:40:35何このレベルの低さ
自分のスキルの無さを露呈しちゃってるよ
0165名無しさん@お腹いっぱい。
2006/03/32(土) 21:56:31実行する方法はありませんか?
あ、テンポラリファイルに cat > tmpfile して、
chmod +x tmpfile する方法以外でお願いします。
0166名無しさん@お腹いっぱい。
2006/03/32(土) 21:59:23>>126 が図星だったってことか。
0167名無しさん@お腹いっぱい。
2006/03/32(土) 22:23:070168名無しさん@お腹いっぱい。
2006/04/02(日) 00:01:42ところで、前スレのクラッカーってなんだ?
0169名無しさん@お腹いっぱい。
2006/04/02(日) 00:14:51お馬鹿さん。
0170名無しさん@お腹いっぱい。
2006/04/02(日) 02:53:52死ねよデブ
0171前スレのクラッカー
2006/04/02(日) 10:12:42今日は何をして過ごそうかなあ。
0172前スレのクラッカー
2006/04/02(日) 12:14:26還暦間近でストレス溜まってたんだ、許してくれ
0173名無しさん@お腹いっぱい。
2006/04/02(日) 13:38:24エロサイトから wget -r http://ero.example.com という形で
ファイルをDLしてきました。このファイルには
エロ画像、エロ画像のlzh、サムネイル、html、css等が含まれています。
目的のエロ画像はero.example.com/members/女の子名/img/ 下にあります。
複数の 女の子名/img を一つのディレクトリに ln -s すれば閲覧が楽になるので
今まではシェルスクリプトを作ってlnをしていたのですが、
、今回 女の子名/img の中にサムネイルファイル t_001.jpg, t_002.jpg ... 等が混ざっており、
単純にln -sしただけではサムネイルと画像本体が混ざってしまい、大変不便な思いをしています。
ブラウザで閲覧する事もあるため、できればサムネイルファイルを消さずに
目的の画像だけを集めたディレクトリを作成したいのですが何かよい方法はないでしょうか。
1. ls -r の結果から、サムネイル以外の全ファイルを一つ一つ ln -s する方法、
2. ディレクトリごとcpしてしまってサムネイルをrmしてしまう方法
を考えたのですが、もっとスマートな方法があればお教えください。
なお、使用している画像ビューワはhtml等のフィルタリングはできますので
本番ファイルとhtmlやcssファイル等が混ざるのは問題ありません。
0174名無しさん@お腹いっぱい。
2006/04/02(日) 14:47:46kshを使ってるんですが、どなたか「[」のPATHを知らないでしょうか?
$[ -z ];echo $?
とすると「空文字」判定で「0」が出力されます。
しかし、シェルスクリプトの中に同じ命令を書くと、
「testの引数が足りない」というエラーになります。
そこで、「[」のPATHを指定してないからだとwhichを実行したのですが、
「PATHの中にはない」というエラーになります。
お手数ですけどどなたかご教示ください。
0175名無しさん@お腹いっぱい。
2006/04/02(日) 14:56:39ありがとうございました
0176名無しさん@お腹いっぱい。
2006/04/02(日) 14:57:45OSにもよるけど、今時のkshやshでは [ は内部コマンドになってるよ。
/bin/test とか外部コマンドはあるけど。
[ -z ] で何がしたいの?
変数が定義されてるかどうかなら [ -z "$x" ]
0177名無しさん@お腹いっぱい。
2006/04/02(日) 15:03:42ありがとうございます。
やりたいことは
[ -z `grep $id $listfile`]
で「$idがリストファイルにある」「ない」で条件分岐をしたいのです。
grepでなければthen以下を実行するという感じです。
0178名無しさん@お腹いっぱい。
2006/04/02(日) 15:29:03コマンドの終了状態は $? という変数で見る
grep -q hoge file 2> /dev/null
if [ $? -eq 0 ]; then
......
else
......
fi
が素直じゃない。
0179名無しさん@お腹いっぱい。
2006/04/02(日) 15:29:52そういうときって・・・
grep hoge file > /dev/null 2>&1
if (($?==0)) ; then
moge
fi
みたいに書かない?
俺だけ?
0180名無しさん@お腹いっぱい。
2006/04/02(日) 15:36:140181名無しさん@お腹いっぱい。
2006/04/02(日) 15:37:41どうしても [ -z ] 方式でやりたいなら、
[ -z `grep $id $listfile` ] じゃなくて、
[ -z "`grep $id $listfile`" ] みたいに、
ダフルクォートを付けろ。
こうすれば、grepの結果がなくても "" の空文字列が残るので、
testがエラーにならない。
それより、testを使わずに、
if ! grep $id $listfile; then
で行けるよ。(!を使うのはksh依存だけど)
Bourne Shなら
if grep $id $listfile; then :; else
とやるのが普通。
0182名無しさん@お腹いっぱい。
2006/04/02(日) 15:42:44この場合はわざわざ $? を呼び出す必要が無いな。
if grep ...
then
...
else
...
fi
else がいらないならこれでも可。
grep ... || {
...
}
0183名無しさん@お腹いっぱい。
2006/04/02(日) 15:43:30すんません。ありがとうございます。
常に独習でやっていたので知ってる方法しか考えてませんでした。
定石みたいなのがちゃんとあるもんなのですね。
くだ質になって申し訳なかったですけど勉強になりました。
0184名無しさん@お腹いっぱい。
2006/04/02(日) 15:51:59(( )) の算術式は、kshやbashでは使えるけど、
Bourne Shellでは使えないから、わざわざ使うことはないな。
0185名無しさん@お腹いっぱい。
2006/04/02(日) 17:55:06以下のシェル文法の違いを説明せよ。(30点)
(1) [ $i = 3 ]
(2) [ $i == 3 ]
(3) [ $i -eq 3 ]
(4) [[ $i = 3 ]]
(5) [[ $i == 3 ]]
(6) [[ $i -eq 3 ]]
(7) [[ i -eq 3 ]]
(8) (($i == 3))
(9) ((i == 3))
(10) test $i -eq 3
0186名無しさん@お腹いっぱい。
2006/04/02(日) 17:59:31だからJISをふまえた文書だと全て「アセンブラ言語」になってる。
0187前スレのクラッカー
2006/04/02(日) 18:11:53今さら擁護はよしてくれ。
どうせ俺を叩いてたのは、世間知らずのガキ共だったのだろうから・・・
0188名無しさん@お腹いっぱい。
2006/04/02(日) 19:22:34>>185 の問でシェル変数 i の中身が i='1+2' である
場合はどうなるか説明せよ。(30点)
0189名無しさん@お腹いっぱい。
2006/04/02(日) 19:52:14Solarisでの実行例
$ (1) [ $i = 3 ]
syntax error: `[' unexpected
$ (2) [ $i == 3 ]
syntax error: `[' unexpected
$ (3) [ $i -eq 3 ]
syntax error: `[' unexpected
$ (4) [[ $i = 3 ]]
syntax error: `[[' unexpected
$ (5) [[ $i == 3 ]]
syntax error: `[[' unexpected
$ (6) [[ $i -eq 3 ]]
syntax error: `[[' unexpected
$ (7) [[ i -eq 3 ]]
syntax error: `[[' unexpected
$ (8) (($i == 3))
syntax error: `(' unexpected
$ (9) ((i == 3))
syntax error: `(' unexpected
$ (10) test $i -eq 3
syntax error: `test' unexpected
0190名無しさん@お腹いっぱい。
2006/04/02(日) 19:59:03"assembler language" の検索結果 約 270,000 件
"assembly language" の検索結果 約 6,690,000
海外だと君は下位4%以下の阿呆だ。良かったね。0.1%に入らなくて。
>>186
へー、そうなのか。勉強になった。
変な言葉を使う割合が世界全体と比べて日本が5倍も多いのは
JIS のせいなのね。JIS もたいがいだなあ。まあこの件に限らんが。
セションとかね。
大学ではアセンブリ言語って習ったけどね。
"アセンブラ言語 site:u-tokyo.ac.jp" 38件
"アセンブリ言語 site:u-tokyo.ac.jp" 245件
38/(38+245) = 13.4%
東大は日本の平均よりは若干マシのようだな。
0191名無しさん@お腹いっぱい。
2006/04/02(日) 20:41:17はいはい。 ワロス ワロス。
で、本当の回答は?
0192名無しさん@お腹いっぱい。
2006/04/02(日) 21:02:34十人十色と言いましょうか、みなそれぞれ個性を持っております。
一言では語りつくせません。
>>188
一つも真となるものはありません。
0193名無しさん@お腹いっぱい。
2006/04/02(日) 21:24:07>一つも真となるものはありません。
違います。真となるものがあります。
0194名無しさん@お腹いっぱい。
2006/04/02(日) 21:26:42(1)(3)(10)以外は bash依存。よって論じる価値なし。
(3)と(10)は同義で、数値としての比較。
よって、仮に i=03でも真になる。
(1)は文字列としての比較。
よって、i=03の場合は偽になる。
0195名無しさん@お腹いっぱい。
2006/04/02(日) 22:10:31どうしても真になるものがあるとは思えないのですが...
0196名無しさん@お腹いっぱい。
2006/04/02(日) 22:16:46真になるところはbash依存だから、覚えなくていいよ。
0197173
2006/04/02(日) 23:38:010198名無しさん@お腹いっぱい。
2006/04/02(日) 23:46:18いやそれで間違ってないんじゃないでしょうか^^;;;
0199名無しさん@お腹いっぱい。
2006/04/03(月) 04:17:380200名無しさん@お腹いっぱい。
2006/04/03(月) 05:20:530201名無しさん@お腹いっぱい。
2006/04/03(月) 08:50:290202名無しさん@お腹いっぱい。
2006/04/03(月) 09:38:12とか、エスパーしてみるテスト。
0203名無しさん@お腹いっぱい。
2006/04/03(月) 13:52:510204名無しさん@お腹いっぱい。
2006/04/03(月) 19:11:36どうすればいいでしょうか。argv[0]を shにして zshを起動しても、
shと同じにはなりません。setoptあたりかと思いましたが、
シグナルに関するオプションは見つかりませんでした。
やっぱり、zshをBourne Shellとして使うのは無理ってことでしょうか?
ちなみに、bashだと問題ありません。
0205名無しさん@お腹いっぱい。
2006/04/04(火) 00:35:140206名無しさん@お腹いっぱい。
2006/04/04(火) 12:10:53コピー元のファイルの相対パスを保ったままコピーするには
どうすればいいでしょうか?
具体的には、
cp -p hoge.txt aaa/fuga.txt bbb/ccc/boke.txt /dokoka/sonohen
を実行すると、hoge.txt fuga.txt boke.txtが、
/dokoka/sonohenの直下にコピーされてしまいますが、
hoge.txtは /dokoka/sonohen/hoge.txtでいいですが、
aaa/fuga.txtは /dokoka/sonohen/aaa/fuga.txtに、
bbb/ccc/boke.txtは /dokoka/sonohen/bbb/ccc/boke.txtに、
コピーしたいのです。
シェルでパス名を文字列処理すればできると思いますが、
できればもっと簡単にコマンド一発の方法を希望します。
あと、tar等を使うのは無しでお願いします。
0207名無しさん@お腹いっぱい。
2006/04/04(火) 12:17:570208名無しさん@お腹いっぱい。
2006/04/04(火) 12:19:06早とちり厨ハケン。質問欲嫁。
0209名無しさん@お腹いっぱい。
2006/04/04(火) 12:23:570210名無しさん@お腹いっぱい。
2006/04/04(火) 12:25:260211名無しさん@お腹いっぱい。
2006/04/04(火) 12:30:23かな?
0212名無しさん@お腹いっぱい。
2006/04/04(火) 12:33:18んなん、forで回せばいいだろ。
0213名無しさん@お腹いっぱい。
2006/04/04(火) 12:38:52tar -c hoge.txt aaa/fuga.txt bbb/ccc/boke.txt |(cd /dokoka/sonohen; tar xf -)
で済むんだけど、使わないのは宿題かなんか?
0214名無しさん@お腹いっぱい。
2006/04/04(火) 12:45:16GNU cpなら、
cp --parents hoge.txt aaa/fuga.txt bbb/ccc/boke.txt /dokoka/sonohen
だな。
>>211
GNU cpだと、-Pはシンボリックリンク保存オプションなので違うと思うが。
0215名無しさん@お腹いっぱい。
2006/04/04(火) 12:59:33tarが無しな理由は、コピー元ファイルがシンボリックリンクだった場合に、
実体ファイルに展開して欲しいからです。
>>214
ありがとうございます。でもGNU cpが無い場合はどうすればいいですか?
0216名無しさん@お腹いっぱい。
2006/04/04(火) 13:11:00symlinkだけの問題なら tarに hオプションを付ければいい。
でも cp --parentsが使える環境ならその方が簡単。
0217名無しさん@お腹いっぱい。
2006/04/04(火) 21:31:16シェルってゆうな。クズ。
0218名無しさん@お腹いっぱい。
2006/04/04(火) 21:37:47残念。この場合は「シェル」でもOK。
0219名無しさん@お腹いっぱい。
2006/04/04(火) 22:26:220220名無しさん@お腹いっぱい。
2006/04/04(火) 22:40:27シェルとシェルスクリプトの違いもわからんのか?
0221名無しさん@お腹いっぱい。
2006/04/04(火) 22:44:29>>206 の質問だと、シェルスクリプトにせずに
直接コマンド(シェルの構文を含む)を打つとも解釈できるから、
「シェル」でもOKと思われ。
それより、いちいち「シェルってゆうな」の反応の方が鵜剤。
0222名無しさん@お腹いっぱい。
2006/04/04(火) 22:55:16シェルスクリプトをシェルと言う馬鹿が絶えないのがそもそもの原因であって、
それを指摘するほうにいちいちつっかかるほうが間違い。
0223名無しさん@お腹いっぱい。
2006/04/04(火) 23:06:480224名無しさん@お腹いっぱい。
2006/04/04(火) 23:13:44そこでお聞きしたいのですが、皆さんが最初に書いたシェルは何ですか?
やっぱり、echo hello worldとかでしょうか?
0225名無しさん@お腹いっぱい。
2006/04/04(火) 23:19:43まず、その仕事とやらを紹介してみたまえ。
0226名無しさん@お腹いっぱい。
2006/04/04(火) 23:21:290227名無しさん@お腹いっぱい。
2006/04/05(水) 01:37:57正解!
0228名無しさん@お腹いっぱい。
2006/04/05(水) 07:04:12つまんねーんだよ
死ねデブ
0229前.ス.レ.の.ク.ラ.ッ.カ.ー
2006/04/05(水) 15:26:02俺の方がよっぽどスキルある。
0230名無しさん@お腹いっぱい。
2006/04/05(水) 15:39:25UNIXはじめました
と春になると焼き肉屋に案内が出ますが
どっちがブちがいがありますか?
0231名無しさん@お腹いっぱい。
2006/04/05(水) 16:14:33ネットワーク管理で使うUNIXはパターンが限られているので、
よく使うUNIXを、コメントとともにメモ帳などで保存しておけば良い。
で、これを適宜、TELNETにコピペしてUNIXを打つ。
変にシェルを作っても、そのシェルの名前を忘れそうだし、
シェル自体がブラックボックスになって、結局使わなくなってしまうのがオチだよ。
0232名無しさん@お腹いっぱい。
2006/04/05(水) 16:26:39じゃシェルはぶたなくても良いのね
UNIXを6回くらいぶつのをまとめて
スクリプトにしたいんだけど使うときは
UNIXをぶつで良いの?
0233名無しさん@お腹いっぱい。
2006/04/05(水) 17:10:040234名無しさん@お腹いっぱい。
2006/04/05(水) 18:12:380235名無しさん@お腹いっぱい。
2006/04/05(水) 18:38:29シェルの中で shを実行すれば UNIXが出せる。
UNIXを終る時は exitを打てば、シェルに戻る。
0236名無しさん@お腹いっぱい。
2006/04/05(水) 22:29:44シェ
シェル
シェス
シェスク
シェルスクリ
スクリプト
プト
どれが正しいですか?
0237名無しさん@お腹いっぱい。
2006/04/05(水) 22:36:520238名無しさん@お腹いっぱい。
2006/04/05(水) 22:49:54ェルスクリプ
0239名無しさん@お腹いっぱい。
2006/04/05(水) 22:51:37「スクリプト」と略すのはありだと思うよ。
そういう場合でも、「シェル」と略すのはまずいと思われ。
ただ、スクリプトだけだと、perl とか ruby のスクリプトも
含まれるから、あくまで文脈からシェルスクリプトだと分かる場合
のみ。
0240名無しさん@お腹いっぱい。
2006/04/05(水) 23:10:51クリ
0241名無しさん@お腹いっぱい。
2006/04/06(木) 00:04:20ただ発言者の人格や知性が疑われることはあるだろうが、それもまたよし。
0242名無しさん@お腹いっぱい。
2006/04/06(木) 00:17:51UNIXとシェルの使い方が少しラフだ
0243名無しさん@お腹いっぱい。
2006/04/06(木) 10:36:15それがkshなりperlやpythonで記述されてるかどうかなんてふつう気にする?
>>236
シエル
0244名無しさん@お腹いっぱい。
2006/04/06(木) 11:12:060245名無しさん@お腹いっぱい。
2006/04/06(木) 11:27:20先輩のことかーっ!!
0246名無しさん@お腹いっぱい。
2006/04/06(木) 11:47:25シェルを作られる方がガマンできる
0247ななし
2006/04/06(木) 16:54:17[ $1 = -a ] とやるとうまくいきません。
何かいい方法はありませんか?
0248名無しさん@お腹いっぱい。
2006/04/06(木) 17:11:260249名無しさん@お腹いっぱい。
2006/04/06(木) 17:20:01現行のシェルだとそのままでうまくいく。
うまく行かないのはかなり古いBourne Shell。
ちなみにどのOSのshか教えて。
うまく行かないシェルの場合は、
[ X"$1" = X-a ]
とやって回避する。が、この回避方法はバッドノウハウなので、
もうobsoleteなはずなんだが、、
0250名無しさん@お腹いっぱい。
2006/04/06(木) 17:24:13なんで廃れたとか原始的とか古典的とか
爺さんの知恵袋とか
文脈に的確な日本語を当てないで
【obsolete】なんて形容詞や動詞として使うの?
0251名無しさん@お腹いっぱい。
2006/04/06(木) 17:33:48イマドキのシェルだと、>>249 の回避方法を使わなくても
そのままで桶なはずだが、それ以前の問題として、
$1を " " で囲んだ方がいい。
[ "$1" = -a ] ね。
でないと、$1が -aだった場合じゃなくて、
$1がスペースだった場合とかにエラーになる。
0252名無しさん@お腹いっぱい。
2006/04/06(木) 23:40:45.sh
0253名無しさん@お腹いっぱい。
2006/04/07(金) 00:01:00重箱の隅をつついいてひとり悦に入る非生産的な奴だね君
0254名無しさん@お腹いっぱい。
2006/04/08(土) 00:33:08>cp -p hoge.txt aaa/fuga.txt bbb/ccc/boke.txt /dokoka/sonohen
>を実行すると、hoge.txt fuga.txt boke.txtが、
>bbb/ccc/boke.txtは /dokoka/sonohen/bbb/ccc/boke.txtに、
>コピーしたいのです。
find hoge.txt aaa/fuga.txt bbb/ccc/boke.txt -print -depth | cpio -pdmuv /dokoka/sonohen
でできる。
コピー元がリンクなら、コピー後もリンクのまんまだよ。
0255名無しさん@お腹いっぱい。
2006/04/08(土) 07:52:08欲嫁。>>206 に「tar等を使うのは無しで」とある。
tar等には cpioも含まれると思われる。
それに、コピー後もsymlinkのままでは困るという質問だよ。
(ファイル本体をコピーして欲しいというのが質問の意図)
で、>>214 の cp --parents ですでに解決済み。
0256名無しさん@お腹いっぱい。
2006/04/09(日) 18:49:03権限関係の理由で sudo と expect を使って
パスワード認証を行ってから cat する方法を取りたいと考えています。
cat だけなら問題ないのですが、
# cat A > hoge1.txt
# ./cat.exp ID PASS A > hoge2.txt
上記のようにした場合、
hoge2.txt の方が10〜300バイトほど量が増えてしまいます。
おそらくcat.expの中で無駄な出力が出てしまっているためかと
思うのですが、改善方法を教えていただけないでしょうか?
expectのマニュアルを見ましたが解決しません
ttp://kansai.anesth.or.jp/gijutu/expect/howto-expect.html
--cat.exp--------------------------------------
#!/usr/bin/expect
set username [lindex $argv 0]
set password [lindex $argv 1]
set file [lindex $argv 2]
log_user 0
spawn sudo -u $username /bin/cat $file
expect "assword:"
send "$password\r"
expect eof
log_user 1
exit
0257名無しさん@お腹いっぱい。
2006/04/09(日) 19:20:40expectだと改行コードがCR+LFで記録されてしまうからじゃないの?
0258256
2006/04/09(日) 22:49:06レスありがとうございます、
関連情報を調べてみようと、改行コード expect あたりでぐぐったのですが
特に見つかりませんでした。
直す方法はあるでしょうか?
0259名無しさん@お腹いっぱい。
2006/04/09(日) 22:53:090260256
2006/04/09(日) 23:30:18できるだけ出力後に処理ってのは勘弁を・・・orz
0261名無しさん@お腹いっぱい。
2006/04/10(月) 00:12:460262名無しさん@お腹いっぱい。
2006/04/10(月) 03:15:58sudo がパスワード認証するんだから、
#!/bin/sh
sudo -u ahouser cat "$@"
でいいじゃん。
パスワードをコマンドラインから入れたら、ps で「もろばれ」なのはわかってんの? それでも、やりたいんだったら、sudo -S っていう手があるけどさ。正気ならそんなことしない。
どうしても、その狂気を避けられないのは「権限関係の設計が悪い」からです。僕
だったら、wrapper作るか、.ssh 作ってssh 経由でcatさせるね。
0263名無しさん@お腹いっぱい。
2006/04/10(月) 10:22:34移動先のディレクトリでも、シンボリックリンクが正しく元のファイルを
指すようにするには、どういうシェルを書けばいいでしょうか?
シンボリックリンクが絶対パスなら無問題ですが、
シンボリックリンクは、../.. とかを含む相対パスであり、
かつ、移動先でも相対パスでリンクする必要があります。
例えば、
/aaa/bbbディレクトリの下に
hoge -> ../hage
というシンボリックリンクがあったとすると、
これを/aaa/ccc/dddディレクトリの下に移動させた場合、
今度は、
hoge -> ../../hage
を指すようにリンクを修正して移動したいのです。
0264名無しさん@お腹いっぱい。
2006/04/10(月) 13:03:090265名無しさん@お腹いっぱい。
2006/04/10(月) 13:20:31それでは解決にならんよw
0266名無しさん@お腹いっぱい。
2006/04/10(月) 20:14:200267名無しさん@お腹いっぱい。
2006/04/11(火) 03:19:210268名無しさん@お腹いっぱい。
2006/04/11(火) 12:04:20Macでこれが失敗した。
/bin/test -z = -a -o -f /etc/passwd
POSIXでも引数がたくさんある場合の評価の順序はunspecified。
0269名無しさん@お腹いっぱい。
2006/04/12(水) 01:38:08下記の方法でスクリプトを書いてみたのですが、
改行のみの行が処理対象とすることができません。
#==ファイルの中身===
$ cat hoge.dat
111
222
333
444
#==スクリプトの中身===
#!/usr/local/bin/bash
IFS='
'
for line in `cat hoge.dat`
do
echo $line
done
#==実行結果 ここまで===
111
222
333
444
なぜ、222と333の間の改行のみの行がわたってこないのでしょうか?
0270名無しさん@お腹いっぱい。
2006/04/12(水) 01:40:252ちゃんめるって、インデントが向こうになるんですか?
[半角空白][半角空白][半角空白][半角空白]echo $line
ってかいたのに
echo $line
になってる。
0271>>269
2006/04/12(水) 01:54:27ループの部分を以下のように変更したら、うまくいきました。
while read LINE
do
echo $LINE
done < hoge.dat
0272名無しさん@お腹いっぱい。
2006/04/12(水) 01:59:36ようなIFSでも、並んだ空白文字であればいくつでも無視するでしょ? それと一緒。
0273名無しさん@お腹いっぱい。
2006/04/12(水) 03:34:32定番だが、$LINE は "$LINE" にしておいた方が幸せだ。
0274名無しさん@お腹いっぱい。
2006/04/12(水) 10:32:510275名無しさん@お腹いっぱい。
2006/04/12(水) 11:48:34実行オプションがあるのに、オプション"--"を許容できないのが設計ミスのような。
0276名無しさん@お腹いっぱい。
2006/04/12(水) 11:54:41それはbashだけの問題ではない。zshやashとかでも同じ問題がある。
Solarisのshだと-nの問題はないが、代わりに、
$LINEの中身が \c とかだとやはり問題になる。
元はechoコマンドの設計ミスだが、今さらもう変えられないのが現実。
で、echoの代わりにprintfを使えというのが今の結論だが、
シェルによってはprintfが組み込みじゃないので、
使うのはためらわれる。
0277名無しさん@お腹いっぱい。
2006/04/12(水) 16:25:07今までUNIXとかぜんぜんやったことなくて何がなんだかで途方にくれてます。
そもそも質問自体どうやっていいかわけがわかってないんですが、どなたかヒントだけでもいただけませんでしょうか。
登録するリストは別にあって、だいたい800ぐらいなんです。
メールアカウントを個々に登録することは
# useradd.sh NEWUSERACCOUNT@***.***.***.jp PASSWORD
Creating user.NEWUSERACCOUNT on default
add NEWUSERACCOUNT
ってな感じで登録してるんですが・・・・。
これだけで何が言いたいかわかるでしょうか。
そもそもこのスレでいいかどうかもわかりませんが、本当に申し訳ないですがわかる方いましたらよろしくお願いいたします。
0278名無しさん@お腹いっぱい。
2006/04/12(水) 16:41:25えっと、useradd.sh というスクリプトは、お前の会社とかで作成された
スクリプトだな。(一般のuseraddコマンドとは無関係)
で、
useradd.sh メールアドレス パスワード
という書式で実行すればいいんだな。
だとすると、その800アカウント分くらいあるという、
別ファイルのリストの書式を晒せ。
そのリストを読んで、useradd.shを呼び出しながらループする
シェルスクリプトを書けば桶。
0279名無しさん@お腹いっぱい。
2006/04/12(水) 16:43:40while read x
do useradd.sh $x
done < 登録するリスト
0280名無しさん@お腹いっぱい。
2006/04/12(水) 16:45:34そのリストは、
user1@example.com パスワード1
user2@example.com パスワード2
:
という書式だとエスパーしてみる。
すると、
while read addr pass
do
useradd.sh "$addr" "$pass"
done < リストのファイル名
でOKだよ。
もし、リスト中に余分な文字列があるなら、それを取り除く処理が必要。
0281名無しさん@お腹いっぱい。
2006/04/12(水) 16:53:01もしそういう書式なら
エディタで行頭に "useradd.sh " を追加して
そのままシェルスクリプトとして実行しちゃうのが楽。
0282名無しさん@お腹いっぱい。
2006/04/12(水) 17:06:41xargs -n2 useradd.sh < 登録するリスト
0283名無しさん@お腹いっぱい。
2006/04/12(水) 17:10:08リストをエディットして直接実行する場合、
パスワード部分の文字列が、
z3xd89;rm -rf /;Eakez
とかになっていると面白いことになりそう。
0284277
2006/04/12(水) 18:15:08リスト自体は
user1 password1
user2 password2
・ ・
・ ・
・ ・
といった感じですが、@以下も追加しちゃえばよさそうですかね。
とりあえずがんばってやってみます。
こんな初心者に教えていただきありがとうございます。
また何か困ったらお願いしたいと思いますが、できるだけ自分でできるようがんばります。
0285名無しさん@お腹いっぱい。
2006/04/12(水) 18:20:21だったら、>>280 の回答が近い。
while read addr pass
do
useradd.sh "$addr"@example.com "$pass"
done < リストのファイル名
とすればいい。リストのエディットは不要。
0286名無しさん@お腹いっぱい。
2006/04/12(水) 18:21:59おれが透視したところによると
そういう行は存在しないので無問題。
0287名無しさん@お腹いっぱい。
2006/04/12(水) 20:11:07python -c 'print __import__("sys").stdin.read()' |
ruby -e 'while gets(); print $_ end' |
sh -c 'while read x;do echo $x;done' |
awk '{print}' |
perl -pe '' |
sed '' |
cat
全部読み込むまでパイプしない奴は誰でしょう。(10点)
0288名無しさん@お腹いっぱい。
2006/04/12(水) 20:17:04答え、python。
つーか、答がpythonになるなら、それはpythonのバッファリングの問題であって、
シェルスクリプトスレとしてはスレ違い。
0289名無しさん@お腹いっぱい。
2006/04/12(水) 20:23:36毎度お約束だが、echo $x は echo "$x" にしておいた方が幸せだ。
0290名無しさん@お腹いっぱい。
2006/04/12(水) 20:26:58早い正解!よくわかったね、スレ違い恐縮です
0291名無しさん@お腹いっぱい。
2006/04/12(水) 20:33:32いろんなコマンドで catモドキを作るというのも面白そうかも。
とりあえず、
tr a a とか、
nkf -Jj とか。
0292名無しさん@お腹いっぱい。
2006/04/12(水) 20:41:20grep ''
dd 2> /dev/null
(ddはメッセージを捨てる必要あり)
0293名無しさん@お腹いっぱい。
2006/04/12(水) 21:00:41uuencode hoge | uudecode -p
こういう組み合わせはいくらでもあるので以後禁じ手で。
0294名無しさん@お腹いっぱい。
2006/04/12(水) 21:03:33ダウト! nkf -Jj は変換されてしまう。
俺からもひとつ、
tail +1
0295名無しさん@お腹いっぱい。
2006/04/12(水) 21:16:010296名無しさん@お腹いっぱい。
2006/04/12(水) 22:01:310297名無しさん@お腹いっぱい。
2006/04/12(水) 23:19:45bash -c 'echo "`</dev/stdin`"'
0298名無しさん@お腹いっぱい。
2006/04/12(水) 23:47:340299名無しさん@お腹いっぱい。
2006/04/12(水) 23:56:25「2chは匿名だからこんなに殺伐としているんだ」
みたいな意見は嘘だと分かるよな。
fjは実名であんなに殺伐とできたのだから。
0300名無しさん@お腹いっぱい。
2006/04/13(木) 00:39:57やっぱり一般のプロバイダが参入してきて
fjも匿名が当たり前になってからじゃない?
0301名無しさん@お腹いっぱい。
2006/04/13(木) 00:42:23は違和感ある。
nifty→今の2ch
fj→スラド
でしょ。
0302名無しさん@お腹いっぱい。
2006/04/13(木) 00:56:08helloだとインがないからプログラムらしく見えなかったのか
catもどきだとその処理系の癖が見えて詳しくなった気分
0303名無しさん@お腹いっぱい。
2006/04/13(木) 01:15:58tee
0304256
2006/04/13(木) 10:56:14うわ、言われてみれば・・・・・。
こうしたほうがsudoの場合でもセキュリティ十分に確保できると
思ってやってたんですが、psで簡単にばれちゃうとは本末転倒ですね。orz
0305名無しさん@お腹いっぱい。
2006/04/13(木) 16:43:52パソコン通信の連中が入ってきてからは、ゴミ記事と馬鹿が増えたっけ
げいいんが変換できないのはおかしい、とか
0306名無しさん@お腹いっぱい。
2006/04/13(木) 19:25:56といったところ?
0307名無しさん@お腹いっぱい。
2006/04/13(木) 21:11:24comm - /dev/null
0308名無しさん@お腹いっぱい。
2006/04/13(木) 22:07:280309名無しさん@お腹いっぱい。
2006/04/14(金) 00:26:170310名無しさん@お腹いっぱい。
2006/04/14(金) 05:05:22>ダウト! nkf -Jj は変換されてしまう。
nkf -t だよ。作者が言うんだから間違いない。
perl -ple 0
0311名無しさん@お腹いっぱい。
2006/04/14(金) 07:27:38おなじ殺伐でも馴れ合いで緩和されるところがあると思う。
0312名無しさん@お腹いっぱい。
2006/04/14(金) 07:57:48馴れ合いはハンドルネームなどで個人が特定可能な場合に生じるものだと
思うが。
2ch以前の掲示板文化は大体それで、常連同士の馴れ合いの場と化していた。
2chであっても、コテが集まるスレッドは概ね馴れ合いの場になるよな。
fjがあまり馴れ合い的でなかったとすれば、個人が特定可能かどうかという
問題ではなく、あの独特のスノビズムにあったのでは?と思う。
馴れ合いより議論の緊張感と個人主義を好み、知的であることを尊ぶ。
fjの有名人達にそういうキャラの人が多く集まっていて、それがfjの
空気を生んでいたと言うべきではないかと。
0313名無しさん@お腹いっぱい。
2006/04/14(金) 08:31:44裏でははらわたが煮えくり返っていそうで冷静を装う文章とか
どうでもいいところにいちいち丁寧に突っ込むのとかは
確かにスノッブといえばそうだな。
0314名無しさん@お腹いっぱい。
2006/04/14(金) 09:11:07そう言ってもいい気もするがな
0315名無しさん@お腹いっぱい。
2006/04/14(金) 11:38:200316名無しさん@お腹いっぱい。
2006/04/14(金) 11:44:200317名無しさん@お腹いっぱい。
2006/04/14(金) 12:23:16オレなんか未だに「レス」に抵抗あるもん
0318名無しさん@お腹いっぱい。
2006/04/14(金) 12:25:030319名無しさん@お腹いっぱい。
2006/04/14(金) 13:55:27やるとなるとマルチになっちゃう。
0320名無しさん@お腹いっぱい。
2006/04/14(金) 14:16:410321名無しさん@お腹いっぱい。
2006/04/14(金) 17:27:08「マジフォロ希盆」とか
「横フォロスマソ」とかいう言葉を普及させてくれ。
0322名無しさん@お腹いっぱい。
2006/04/15(土) 07:50:220323名無しさん@お腹いっぱい。
2006/04/16(日) 19:52:12フォローに相当するのならレス(ポンス)で許せるが
単発の投稿をレスというのは違和感がぬぐいきれない :-(
0324名無しさん@お腹いっぱい。
2006/04/16(日) 22:06:100325277
2006/04/17(月) 10:02:03先日お聞きしたメールアカウント登録の件、無事終了できました。
パスがどうのとか権限がどうのとかいう部分からわかんない状態でしたので
そもそも私みたいなもんがやることじゃなかったかもしれませんが、
勉強できてよかったです。
返答してくださった皆さん本当にありがとうございました。
0326名無しさん@お腹いっぱい。
2006/04/21(金) 10:31:55goto文以外で。
0327名無しさん@お腹いっぱい。
2006/04/21(金) 11:22:51使えないよ。tcshとか最近の拡張されたのは知らんけど
0328名無しさん@お腹いっぱい。
2006/04/21(金) 12:00:04(t)cshは関数だけじゃなくていろんな意味で糞だから、
決して(t)cshスクリプトを書こうなんて思っちゃいけない。
0329名無しさん@お腹いっぱい。
2006/04/21(金) 12:10:150330名無しさん@お腹いっぱい。
2006/04/21(金) 12:17:00と老害が申しております。
0331名無しさん@お腹いっぱい。
2006/04/21(金) 13:50:37し。UTF-8対応でないところは無視すれば良い。
0332名無しさん@お腹いっぱい。
2006/04/21(金) 15:48:48対応しているが。
0333名無しさん@お腹いっぱい。
2006/04/22(土) 01:18:13ただ、shのスクリプトをまともに書けなくするbashは消されるべき。
0334名無しさん@お腹いっぱい。
2006/04/22(土) 10:45:01同じことがzshにも言えるわけで・・
というか、shの範囲内だけで記述するなら、
zshよりもbashの方が互換性高いよ。
zshはsignalまわりがどうやってもsh互換にできない。
0335名無しさん@お腹いっぱい。
2006/04/22(土) 14:22:20bash 使ってる奴は、その辺、無自覚な奴が多い。
ってことでは?
bash の場合、昔からそうだったってわけじゃなくて、
Linux の標準シェルになったのが不幸の始まりって気がする。
zsh もユーザが増えてきたから、最近は bash とそう事情は変わらんかも。
0336名無しさん@お腹いっぱい。
2006/04/22(土) 15:30:30シングルユーザーモードで使いにくい、というのないか?
bashだと、現実にシングルユーザーモードでも使われてる。
まあ、そういう場合はsh(ash)を使えばいいんだけど。
0337名無しさん@お腹いっぱい。
2006/04/22(土) 17:56:30今シングルユーザモードで使えないシェルってあるの?
0338名無しさん@お腹いっぱい。
2006/04/22(土) 18:34:27使えない。(実体が/usr以下にあるから)
使えるのは/sbin/shのみ。
0339名無しさん@お腹いっぱい。
2006/04/22(土) 19:55:38% svcs -d svc:/milestone/single-user | grep filesystem
online 15:53:25 svc:/system/filesystem/minimal:default
% svcs -d svc:/system/filesystem/minimal
STATE STIME FMRI
online 15:53:25 svc:/system/filesystem/usr:default
online 15:53:25 svc:/system/device/local:default
0340名無しさん@お腹いっぱい。
2006/04/22(土) 22:55:04Linux板のシェルスクリプトスレに行ってくれよ。
0341名無しさん@お腹いっぱい。
2006/04/22(土) 23:01:13誰もそんな話はしていないが。
0342名無しさん@お腹いっぱい。
2006/04/23(日) 01:45:54sh で、スクリプトを組もうとしています。
目的は、apache で、決まったユーザごとにBASIC認証をさせようとしていて、
新規のユーザが入るたびに、設定するのが面倒になったので、スクリプトを組み始めました。
取り合えずユーザ名とパスワードだけのテキストファイル(list_name)は、手動で作り
user1 passwd1
user2 passwd2
for文かwhile文で書けば終わると思っていたのですが
二次元配列?のところでうまくいきません。
ユーザ名もパスワードもバラバラに引数として利用したい。
for文だと、eval を使って、出来るんでしょうか?
while文で、shift 2 とかすればいいかなと思ったのですが、for文でのin に変わるものだわかりません。
なにかヒントだけでもよろしくお願いします。
0343名無しさん@お腹いっぱい。
2006/04/23(日) 02:02:21read の使い方を調べると幸せになれる。
while read user pass ; do
...
done < list_name
bash の read なら配列に代入する事もできるけど、
これで充分だよね?
0344名無しさん@お腹いっぱい。
2006/04/23(日) 02:09:510346名無しさん@お腹いっぱい。
2006/04/23(日) 09:01:38zshでも、readで配列に入れることができるが、(read -A)
するとzshも、もうたくさんですか?
0347名無しさん@お腹いっぱい。
2006/04/23(日) 15:29:150348名無しさん@お腹いっぱい。
2006/04/23(日) 15:41:27で、配列が使えるkshでは、bashとkshは同じ。
kshがPOSIX準拠だとすると、bash方式の配列が正しくて、
zsh方式の配列は独自文法ということになる。
配列に関してはzshの方が糞。bashは正しい。
0349名無しさん@お腹いっぱい。
2006/04/23(日) 15:49:45/bin/sh がzshのシステムなんて、無いだろ?
てことは、zshスクリプトは「わざと」書いてるんだろう。
「わざと」書く分には、/bin/shと互換性が無かろうが、そいつの責任であり
勝手じゃないのか?
0350名無しさん@お腹いっぱい。
2006/04/23(日) 16:29:58python -c 'print __import__("sys").stdin.read()' |
ruby -e 'while gets(); print $_ end' |
sh -c 'while read x;do echo $x;done' |
awk '{print}' |
perl -pe '' |
sed '' |
cat |
tr a a |
grep '' |
dd 2> /dev/null |
gzip -c | gzip -dc |
uuencode hoge | uudecode -p |
tail +1 |
vim -es -c "wq! /dev/stdout" /dev/stdin |
bash -c 'echo "`</dev/stdin`"' |
tee |
comm - /dev/null |
paste - |
cut -f 1- |
nkf -t |
perl -ple 0 |
危険!全部繋げて試したらカーネルパニクッた
0351名無しさん@お腹いっぱい。
2006/04/23(日) 16:30:10MacOSX 10.0
0352名無しさん@お腹いっぱい。
2006/04/23(日) 18:09:51乙。w
0353名無しさん@お腹いっぱい。
2006/04/23(日) 18:15:55(というかそもそも可能でしょうか?)
0354353
2006/04/23(日) 18:28:59多数見つけたのですが、
これではセキュリティ的にもろみえの状態なので避けたい、ということです。
ttp://ns1.php.gr.jp/pipermail/php-users/2003-December/019954.html
0355名無しさん@お腹いっぱい。
2006/04/23(日) 18:42:42expect `cat`
でいいんじゃない?
0357名無しさん@お腹いっぱい。
2006/04/23(日) 23:47:19>>355は何もわかっていないという意味です。
0358名無しさん@お腹いっぱい。
2006/04/24(月) 12:25:35できました。ありがとう。
シェルの基本文法で良かったのですね。
0359353
2006/04/24(月) 16:18:450360353
2006/04/24(月) 23:53:15若干すれ違い気味なせいでしょうか
0361名無しさん@お腹いっぱい。
2006/04/25(火) 02:20:38expectもtclも門外漢だが、
gets stdin line
or
set line [ gets stdin ]
とかじゃいかんのか?
0362名無しさん@お腹いっぱい。
2006/04/25(火) 09:13:53355 で解決しないの?
command substitution って知ってる?
0363353
2006/04/25(火) 10:21:30神サンクス!
gets stdin line でアメ語をぐぐったら例が結構見つかりました。
ただ
gets stdin old_pass
gets stdin new_pass
としている例があったんですが、2つ標準出力で渡すのはどうすればいいんでしょうか?
echo "old_pass" | echo "new_pass" | ./password.exp
とかやってみたけどもちろん無理ですた
gets stdin new_pass のみなら上手くいきました。
>>362
357氏のレスから意味のないレスだと思ってマスタ、
神レスだったのですね。
コマンド置換ってやつですね、調べてみましたが、基本的な使い方は
なんとなく理解したのですが、
この場合はいまいち使い方がわからんとです orz
0364名無しさん@お腹いっぱい。
2006/04/26(水) 00:33:20だったら expect 使う意味があまり無いと思うんだが。
0365名無しさん@お腹いっぱい。
2006/04/26(水) 01:25:570366名無しさん@お腹いっぱい。
2006/04/26(水) 01:31:170367名無しさん@お腹いっぱい。
2006/04/26(水) 04:18:44セキュリティ的にモロ見えイクナイってのが発端なのに、
>>355で解決するって本気で思ってんの?
0368名無しさん@お腹いっぱい。
2006/04/27(木) 21:08:48スクリプトを書いているんですが、
引数を渡さないかぎり入力待機状態にして次の行にいかない様に
するようなコマンドはありますでしょうか?
教えてくださいm(。_。;)m
0369名無しさん@お腹いっぱい。
2006/04/27(木) 21:53:37引数という用語がおかしいようだが、
キー入力待ちにしながらシェルスクリプトを1行ずつ実行させたいということか?
だったら、途中に、
read hoge
というコマンドをはさんどけ。
[Enter]を入力しないと次に進まなくなる。
0370名無しさん@お腹いっぱい。
2006/04/27(木) 23:09:09Cシェルは1706が引数の制限なようですがBシェルに関しては
ARG_MAXを限界値に引数に渡されるバイト数+環境との記述
をみたのだが同じ環境なら引数に渡されるバイト数は固定でないのか?
例えばls * | wc -l とかでやると(ファイル名+空白分)*ファイル数のバイト数は
ファイル数が多いほど少なくなるのですが・・・。
詳しい方教えてください。
0371名無しさん@お腹いっぱい。
2006/04/27(木) 23:15:140372名無しさん@お腹いっぱい。
2006/04/27(木) 23:20:43引数の個数じゃなくて、
全引数の文字列のバイト数+環境変数のバイト数(変数名も含む)
で決まってるはず。
手元の環境で試してみると、
合計128KBみたいだった。
0373名無しさん@お腹いっぱい。
2006/04/27(木) 23:35:01レスサンクス。
書き方がわるかったのかな。
全引数の文字列のバイト数+環境変数のバイト数(変数名も含む)
はオレも分かってはいるんだが
同じマシン、同じコマンドでやれば環境変数のバイト数は同じだよね?
つまり全引数のバイト数は固定だと思ってるのだが・・・。
ls * | wc -lを例えば%10dの10文字のファイル名が入ったフォルダで
実行した場合の限界ファイル数と200文字のファイル名が入った
フォルダでの限界ファイル数を取得したとき、文字数*ファイル数で出した数
がかなり違ってくるのでどうしてでしょうか?と聞きたい。
一応空白を考慮しても計算しているがそれでも違ってくる・・・。
0374名無しさん@お腹いっぱい。
2006/04/28(金) 01:56:550375名無しさん@お腹いっぱい。
2006/04/28(金) 09:37:540376名無しさん@お腹いっぱい。
2006/04/28(金) 19:03:33でls * | wc -lが引数が長すぎますとのエラーを返して
で%200dで作成した200文字のファイル名の場合5000ファイルで
ls * | wc -lが引数が長すぎますとのエラーを返した。
ここで空白を考慮してファイル名を31バイトと201バイトだと
考えると31*29800と201*5000では100Kぐらい差が出てくる。
全引数の文字列のバイト数だと考えるとなんでこんなに差が出るのと謎に思えたので教えてほしい
0377名無しさん@お腹いっぱい。
2006/05/01(月) 22:16:01「引数が長すぎます」は E2BIG (システムコールからのエラー)で出るらしい。Solarisでは
http://cvs.opensolaris.org/source/xref/on/usr/src/cmd/sh/service.c#315
その計算では argvの分が入ってないのでざっと計算すると、
31 byte x 29800 + sizeof(char *) x 29800 = 1043000
201 byte x 5000 + sizeof(char *) x 5000 = 1025000
これぐらいの差なら誤差程度では?
0378名無しさん@お腹いっぱい。
2006/05/04(木) 11:42:41対象ファイルの中で hoge という文字列が含まれている
ファイルを表示させたいのですが、簡単な方法はないでしょうか?
grep とリダイレクトあたりを使用することになると思うのですが。
0379名無しさん@お腹いっぱい。
2006/05/04(木) 12:47:59xargs grep -l hoge < ファイル
0380名無しさん@お腹いっぱい。
2006/05/04(木) 17:39:58応答待ち状態にタイムアウトを設定する、というのがあります
10秒たっても入力がないときには自動で抜けるようにする、というスクリプトです
trap ":" 2
(sleep 10; kill -2 $$) &
echo "Would you like to ... [y/n]? \c"
read ANSWER
if kill -0 $! 2>/dev/null; then
kill $!
fi
case "$ANSWER" in
y | yes ) FLAG=TRUE ;;
* ) FLAG=FALSE ;;
esac
trap 2
CentOSというLinuxのディストリで標準のbash使ってるんですが
サブシェルからの割り込みをうまく受け付けてくれないようで、自動で抜けてくれません
Solaris環境では意図したとおりに動きました
Linuxが悪いのか、bashが悪いのか、スクリプトが悪いだけなのかよくわかりませんが
うまく動かすにはどうすればいいでしょうか?
0381名無しさん@お腹いっぱい。
2006/05/04(木) 19:27:480382名無しさん@お腹いっぱい。
2006/05/04(木) 20:22:29こんな感じ? やっつけだけど。
#!/bin/sh
for f in `cat ファイル`
do
if [ `basename $f | grep hoge` ] ; then
echo $f
fi
done
0383名無しさん@お腹いっぱい。
2006/05/04(木) 21:07:41たしかに、ash使ってみたらうまくいきました
UNIX間で互換性をもたせるにはどうすればいいのかな、と考えてたのですが
とりあえずLinuxの標準がbashになってることを恨め、って感じでしょうか・・・
0384名無しさん@お腹いっぱい。
2006/05/04(木) 23:11:37それならkshに統一するとか?
Bourne shellよりわかりやすくスマートにかける場面も多いし。
いっちゃうとPerlでもいいとおもう。
0385名無しさん@お腹いっぱい。
2006/05/05(金) 02:48:10ここはシェルスクリプトのスレッド。あくまで。
0386名無しさん@お腹いっぱい。
2006/05/05(金) 12:53:54ここのpflogsumm_reportってシェルスクリプト参考にさせて
もらったんだけど、
直接たたくと上手く動作するものの
cronで動作させるとメール本文が空っぽ。
だれか想像できる原因教えてぷりーず
0387名無しさん@お腹いっぱい。
2006/05/05(金) 13:26:420388名無しさん@お腹いっぱい。
2006/05/05(金) 16:03:41そういう場合はshellの引数に-xをつければいいよー。
そこだと1行目を
#!/bin/bash -x
にするとか。
0389名無しさん@お腹いっぱい。
2006/05/05(金) 17:19:17crontab に必要なパスを記述していない可能性が高い。
たとえば >>387 とか。
0390名無しさん@お腹いっぱい。
2006/05/10(水) 22:03:55Unixの方がexpr substrに対応してなかった。
原因わかるまで1時間以上かかったぜ。
0391名無しさん@お腹いっぱい。
2006/05/10(水) 22:40:44エラーが出るだけましと思えば、、
0392名無しさん@お腹いっぱい。
2006/05/11(木) 01:45:33参考までに両方の expr のバージョンを教えてくれ。
0393名無しさん@お腹いっぱい。
2006/05/11(木) 06:38:10管理者の人に頼まれてLinuxで書いたからもうUnixの方は調べらんね。
実行できないって言われてmanでexpr調べたらsubstrはx86系のみ対応って書いてあった。んで、聞いたらたぶんx86系だといってたので原因わからず格闘。随分時間たっあとunameでシステムみたらSunの文字。ネットで調べたら他のCPUってオチ・・・。
0394名無しさん@お腹いっぱい。
2006/05/11(木) 15:11:04察するにお前の知識が足らんかっただけだろう
0395名無しさん@お腹いっぱい。
2006/05/11(木) 22:23:08Vine3.2(Pen4)で書いてSunOS(SPARC)で実行した。
3日前に初シェルスクリプト書いた位なので・・・知識はね
0396名無しさん@お腹いっぱい。
2006/05/12(金) 02:54:32GNU 拡張みたいだな。
0397名無しさん@お腹いっぱい。
2006/05/12(金) 10:02:570398名無しさん@お腹いっぱい。
2006/05/12(金) 10:42:01できない。
0399名無しさん@お腹いっぱい。
2006/05/12(金) 11:00:06必要なものだけ環境変数に export することにします。
同じ種類のシェルなら内部でなんかうまいことパイプとか
つくって引き継いでくれるのかな?
とか都合いいこと考えてました。
0400名無しさん@お腹いっぱい。
2006/05/13(土) 00:13:13http://shunit.sourceforge.net/
ドキュメントがまったく無いんだけど
0401名無しさん@お腹いっぱい。
2006/05/13(土) 06:48:50シェルスクリプトのテストツール?なのかこれ?
今ソースを眺めてるけど、なんか関数が
たくさん定義されてるな。
今は眠いから処理を追いかけられねーや。
0402名無しさん@お腹いっぱい。
2006/05/14(日) 04:13:005 だったら 0005
55 だったら 0055
555 だったら 0555
5555 だったらそのままの 5555
というように数字1〜4桁までのファイル名を0を使って4桁に揃えたいのですが
for 名前 in * ; do
桁数=${#名前}
[ $桁数 = 1 ] && mv $名前 000$名前
[ $桁数 = 2 ] && mv $名前 00$名前
[ $桁数 = 3 ] && mv $名前 0$名前
done
こんなのしか思い浮かびません。もっとスマートで汎用的な感じにできませんでしょうか?
0403ヽ(´ー`)ノ ◆.ogCuANUcE
2006/05/14(日) 05:05:53# -> 0005
printf %04d 55
# -> 0055
printf %04d 555
# -> 0555
printf %04d 5555
# -> 5555
printf %04d 55555
# -> 55555
0404名無しさん@お腹いっぱい。
2006/05/14(日) 09:15:040055
0405名無しさん@お腹いっぱい。
2006/05/14(日) 12:13:29case "$x" in
?) y=000$x ;;
??) y=00$x ;;
???) y=0$x ;;
????) y=$x ;;
*) y=$x ;;
esac
なんて方法もある。
普通なら>>403を使うけど、数値しか使えないのでこういう小細工も使うことがある。
0406名無しさん@お腹いっぱい。
2006/05/14(日) 13:36:09それ自体は悪くはないんだけど、
仕事でそういうのの塊のコードがあって泣きそうになったことある。
シェルスクリプトで日付計算とかね。アホかっちゅーの。
0407名無しさん@お腹いっぱい。
2006/05/14(日) 13:56:39とはいえ、「任意の日からN日後の日付」「任意の日どうしの間隔」
「任意の日の曜日」あたりを調べるのは確かに頭痛いな。
GNU date, env TZ=... dateを使うのが定番だろうけど、どっちもイマイチな気がする。
修正ユリウス日をうまく使ってすっぱりと実装できそうなんだが。
0408407
2006/05/14(日) 15:03:08bash厨は$(())に置き換えたいだろうが、自分のマシンで勝手にやってくれ。
to_mjd() {
if [ "$2" -lt 3 ]; then
yy=`expr "$1" - 1`; mm=`expr "$2" + 12`; dd=$3
else
yy="$1"; mm="$2"; dd=$3
fi
expr $yy \* 1461 / 4 + $yy / 400 - $yy / 100 + \( 3059 \* $mm - 6118 \) / 100 + $dd - 678912
}
dayofweek() {
# Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6
expr \( "$1" + 3 \) % 7
}
from_mjd() {
yy=`expr \( $mjd \* 100 - 1507820 \) / 36525`
m2=`expr $yy \* 1461 / 4`
mm=`expr \( \( $mjd - $m2 \) \* 10000 - 149561000 \) / 306001`
d2=`expr $mm \* 306001 / 10000`
dd=`expr $mjd - 14956 - $m2 - $d2`
if [ $mm -gt 13 ]; then
yy=`expr $yy + 1901`; mm=`expr $mm - 13`
else
yy=`expr $yy + 1900`; mm=`expr $mm - 1`
fi
echo "$yy $mm $dd"
}
mjd=`to_mjd 2004 1 1`
echo "mjd: $mjd"# => 53005
echo "dayofweek: `dayofweek $mjd`"# => 4 (Thu)
echo "gregorian: `from_mjd $mjd`"# => 2004 1 1
0409402
2006/05/14(日) 16:45:14printf便利ですね。
caseも勉強になりました
エロ画像の生理に使います。
0410名無しさん@お腹いっぱい。
2006/05/14(日) 18:21:33どうでもいいことだが mjd って何の略?
「マジで」としか変換できないバカに教えてくれ。
0411名無しさん@お腹いっぱい。
2006/05/14(日) 18:22:01だったらrenameの使い方も覚えとけ。
0412名無しさん@お腹いっぱい。
2006/05/14(日) 18:23:55Modified Julian Day
0413407
2006/05/14(日) 22:06:16行数制限にひっかかったので、いろいろやってるうちに消してしまった… スマヌ
0414名無しさん@お腹いっぱい。
2006/05/14(日) 22:32:07renameコマンドは、同名の別物コマンドが少なくとも2種類以上あって、
使い方も違うので、どのrenameのことを言ってるのか明示すること。
で、OSによって使えるかどうかわからないrenameは覚える必要なし。
0415名無しさん@お腹いっぱい。
2006/05/14(日) 22:34:57マジで?!
いや、ありがと。
0416名無しさん@お腹いっぱい。
2006/05/15(月) 16:39:35シェルスクリプトきぼんぬ!
0417名無しさん@お腹いっぱい。
2006/05/15(月) 17:09:260418名無しさん@お腹いっぱい。
2006/05/15(月) 17:16:140419名無しさん@お腹いっぱい。
2006/05/15(月) 18:48:14ps agx | grep named
つうか、rc か lanuchctl で生きているかどうか確認せずに殺すことが多い。
0420名無しさん@お腹いっぱい。
2006/05/15(月) 19:12:39ps -ef | grep [n]amed
ps ax | grep [/]named
とかしてほしいす。
# 商用Unixにも入ってるようなpgrepがOSXに無いのはオドロキ
0421名無しさん@お腹いっぱい。
2006/05/15(月) 19:32:10ps `cat /var/run/named.pid`
だろ。
pgrepはまだ歴史が浅井。
0422名無しさん@お腹いっぱい。
2006/05/15(月) 21:38:44そういうのってときどき見るけど
突然死してpidが再利用されてしまっている可能性は0とみなすの?
0423名無しさん@お腹いっぱい。
2006/05/15(月) 23:29:44一巡する前に気づかないのは別の意味で問題な気が。
0424名無しさん@お腹いっぱい。
2006/05/15(月) 23:41:00PDP時代ならこれだけの桁数まわすのに相当時間が
かかるからよかっただろうが、
今だからこそ再利用されてしまう可能性があるんじゃないか?
0425名無しさん@お腹いっぱい。
2006/05/15(月) 23:47:16FreeBSD ベースだからじゃね?
4.x は pgrep を ports で入れないといけなかった記憶がある。
0426名無しさん@お腹いっぱい。
2006/05/15(月) 23:50:200427416
2006/05/15(月) 23:56:14でさらにあふぉな質問でスマソなんですが、
プロセスが死んでる場合(PIDが存在しない)は
メール、みたいな分岐処理をするにはどうすればよかとですか?
0428名無しさん@お腹いっぱい。
2006/05/16(火) 00:57:56if "プロセスが死んでると判定するコマンド"
then "メール送信用のコマンド"
fi
0429416
2006/05/16(火) 09:12:54は何になるのでしょうか?
pgrep named
はあくまで生きているプロセスを調べるためのコマンドなので
これでは無いですよね?
0430名無しさん@お腹いっぱい。
2006/05/16(火) 11:44:04if kill -0 プロセスID 2>/dev/null; then
生きてる
else
死んでる
fi
0431名無しさん@お腹いっぱい。
2006/05/16(火) 12:04:29pgrepでもできる。死んでいる(存在しない)プロセスなら、
終了ステータスで偽を返す。
if pgrep named 2> /dev/null; then
:
else
echo 'namedが死んでるよ' | mail omae
fi
0432名無しさん@お腹いっぱい。
2006/05/17(水) 17:30:19リナックスザウルスの活用の幅を広げようと思ってます。
UNIXシェルスクリプトで、ライフゲームや、HIT&BROW(四桁数字当て)ゲームは
作ることができますか?
0433名無しさん@お腹いっぱい。
2006/05/17(水) 17:58:59ログインシェルをtcshにしていた人は強制zsh移行。
そこで、自宅からtcshをフロッピーに入れて ~/bin/tcshに突っ込みましたが、
chshでログインシェルが変更できません。あと、いろいろいじってるうちに
ログインできなくなってしまいました。内容が内容だけに、
管理者には相談できません。どうすればいいでしょうか?
0434名無しさん@お腹いっぱい。
2006/05/17(水) 18:10:060435名無しさん@お腹いっぱい。
2006/05/17(水) 18:53:24できなくは無いと思うが余計な苦労を強いられるだろう。
そういう挑戦に興味が無ければ、より高機能なもの(Perlなど)を薦める。
>>433
> 管理者が削除されてしまいました
ガクガクブルブル
0436名無しさん@お腹いっぱい。
2006/05/17(水) 20:07:13> >>433
> > 管理者が削除されてしまいました
ヒント:尊敬
0437名無しさん@お腹いっぱい。
2006/05/17(水) 23:10:52function と **/*.c だけでも、zsh にして良かったと思うよ。つうか、なんで、いままでtcshなんか使っていたんだろうと反省中。
0438名無しさん@お腹いっぱい。
2006/05/17(水) 23:24:44使うシェルってイメージがあるから損してるよな。かわいそう。
0439名無しさん@お腹いっぱい。
2006/05/18(木) 03:33:06フェラーリのイメージが成金趣味っぽくなるのと同じだよ。
0440精進
2006/05/18(木) 12:18:31ttp://news18.2ch.net/test/read.cgi/bizplus/1147877411/-100
「もっと顧客から課題を聞き出す力があればなあ」「専門知識を生かして積極的に提案して
もらえると助かるのだが」---。
営業担当者がITに関する商談で客先を訪問した際に、同行したSEに対してこんな不満や要望を
抱いている。顧客に対して「何をすればいいのでしょうか」と“御用聞き”に徹して提案しようと
しないSEや、顧客と積極的にコミュニケーションを図ろうとしないSEに対して、営業担当者は
もどかしい思いをしているのだ。
営業担当者がSEに抱く不満は、SEに対する期待の裏返しでもある。そんな不満や期待が込め
られた、営業担当者からSEに対するコメントをいくつかを紹介しよう。
「お客様の目の前で“それはできません”と即答しないでほしい」
「お客様を満足させていくという顧客指向を持ってほしい」
「指示・依頼を待つだけでなく、自分で考え積極的に提案してほしい」
0441名無しさん@お腹いっぱい。
2006/05/18(木) 14:50:12.* の部分だけ出力するのにスマートな方法ある?
とりあえず ruby で下のように書いてるけど、
長いしPOSIX標準じゃないしで、いまいち気に入らない。
ruby -e '$<.each { |line| line.sub(/foo (.*) bar/) { print $1 + "\n";} }'
0442名無しさん@お腹いっぱい。
2006/05/18(木) 14:57:300444名無しさん@お腹いっぱい。
2006/05/18(木) 17:32:21抜きん出たSEになるために必要なスキルだとは思うけど
SEに提案させて顧客交渉までさせたら営業いらなくなるよな
0445名無しさん@お腹いっぱい。
2006/05/18(木) 18:14:27避けた方が良くないかね。
0446名無しさん@お腹いっぱい。
2006/05/18(木) 19:57:460447名無しさん@お腹いっぱい。
2006/05/18(木) 20:29:170448名無しさん@お腹いっぱい。
2006/05/18(木) 23:44:12echo で、○行目に文字を追加するにはどうしたらいいでしょうか?
0449名無しさん@お腹いっぱい。
2006/05/19(金) 00:08:540450名無しさん@お腹いっぱい。
2006/05/19(金) 00:22:01あんな客は2度と相手にしないよ。
0451名無しさん@お腹いっぱい。
2006/05/19(金) 00:43:180452名無しさん@お腹いっぱい。
2006/05/19(金) 04:29:20泥をかぶるのは俺だけでいい!
仕事の愚痴はスレ違い。
0453名無しさん@お腹いっぱい。
2006/05/19(金) 10:03:510454名無しさん@お腹いっぱい。
2006/05/19(金) 10:37:56カーソルを移動させたいならこんな感じ。
adhocな方法 echo "^[[5;10H"
ちょっとましな方法 tput cup 5 10
文字の追加が具体的にどういう動作なのかわからない。
0455448
2006/05/19(金) 15:37:47echo hoge >> test.txt
この場合はtext.txtの最後の行にhogeが追加されるのですが
このような感じでhogeという文字を
指定の行に追加するにはどうしたらいいでしょうか?
0456名無しさん@お腹いっぱい。
2006/05/19(金) 16:07:48echoでは無理。
0458名無しさん@お腹いっぱい。
2006/05/19(金) 16:26:18echoでは無理といわれているのだから、問題を再定義しなさい。
0459448
2006/05/19(金) 16:29:520460名無しさん@お腹いっぱい。
2006/05/19(金) 19:34:34本当に出来たのか?ウソはだめだぞ。
0461名無しさん@お腹いっぱい。
2006/05/20(土) 01:05:58SE:「それはできません」
営業:「お客様の目の前で“それはできません”と即答しないでほしい」
0462名無しさん@お腹いっぱい。
2006/05/20(土) 01:53:40SE:「それはできません」
営業:「お客様の目の前で“それはできません”と即答しないでほしい」
0463名無しさん@お腹いっぱい。
2006/05/20(土) 04:29:08のですが教えていただけないでしょうか?
例:hoge を含む行とその下二行の削除
-----------------------
1
hoge
2
3
4
hoge
5
6
-----------------------
↓
-----------------------
1
4
-----------------------
0464名無しさん@お腹いっぱい。
2006/05/20(土) 05:07:10無理にシェルスクリプトにせず、awkやperlで書いたほうがよさそうな気がします
0465名無しさん@お腹いっぱい。
2006/05/20(土) 05:18:43これは
aaa=bbb
と等価になるのはなぜですか?
0466名無しさん@お腹いっぱい。
2006/05/20(土) 05:52:55sed で簡単に出来そう。
おれは一行ごとに処理するやり方しか知らないからわからん。
0467名無しさん@お腹いっぱい。
2006/05/20(土) 09:51:44sed -E -e '/hoge/{N
N
s/[^\n]//g
}' data
0468名無しさん@お腹いっぱい。
2006/05/20(土) 10:32:09先頭のコロンはよくわかんないけど
${aaa=bbb} はaaaが未定義の場合のみ代入
${aaa:=bbb} はaaaが未定義または空の場合のみ代入
:- :? :+ も同様に:の有無でちょい違う動作をする。
:なし 変数が未定義かどうかをチェックする
:あり 変数が未定義かどうか、値が空かどうかをチェックする
ということがマニュアルに書いてある。
0469名無しさん@お腹いっぱい。
2006/05/20(土) 10:42:03ありがとうございます。
マニュアルの微妙な隙間に : を入れないときの動作がちゃんと書いてありました。
流し読みだったのでいつもいつも読み飛ばしてたorz
パラメータ展開のひとつという事は、先頭のヌルポマンドの引数とすることで
aaa=${aaa:=bbb}
みたいな冗長な代入にしなくてすむっぽいという事ですか。
0470名無しさん@お腹いっぱい。
2006/05/20(土) 10:49:21コマンドなので、引数やリダイレクトは他のコマンドと同様に処理される。
0471名無しさん@お腹いっぱい。
2006/05/20(土) 10:54:400472名無しさん@お腹いっぱい。
2006/05/20(土) 11:01:10等価にはならない。
: ${aaa=bbb}
で値が代入されるのは、aaa が未定義の時だけ。
>>467
sed に -E というオプションは無さげ。
sed -e '/hoge/ {
a \
N
a \
N
a \
d
}'
なら、仮に \n を認識しない場合でも出来るかと。
0473名無しさん@お腹いっぱい。
2006/05/20(土) 11:03:22ここって案外人多いのね。
0474名無しさん@お腹いっぱい。
2006/05/20(土) 11:25:28-Eでnewline(\n)が扱えるようになるsedもあるんだよ。
お前のsed(gnu sed)は行末の\でnewlineとみなしてるだけで、行末の\を
newlineとみなさないのもある。
gnu sedなら
sed -e '/hoge/{N
N
s/[^\
]//g
}' data
でも行ける。
0475名無しさん@お腹いっぱい。
2006/05/20(土) 11:57:11sed はできないんだな。
0476名無しさん@お腹いっぱい。
2006/05/20(土) 12:15:10> -Eでnewline(\n)が扱えるようになるsedもあるんだよ。
いや、だから -E は POSIX 準拠でもないはずだが。
上のコマンドは間違ってた。a \ じゃなく a\ です。Append コマンドは。
スペース入れると POSIX & SUS 違反。GNU なんかじゃ通っちまうがな。
まあ、洩れ自身 GNU に冒されてるのは認めし、GNU を嫌う気持ちも分かる。
スペースいれちまったことは素直に謝りたい。
後、GNU sed なら N なんぞ使わず、/hoge/,+2 とでもしといた方が良い。
0477名無しさん@お腹いっぱい。
2006/05/21(日) 11:57:07:g/hoge/.,.+2s/.*//
ってvimじゃないのか。
0478名無しさん@お腹いっぱい。
2006/05/22(月) 02:42:26依存したくないのならこんな方法もある。
#!/bin/sh
i=0
while read x ; do
y=''
if [ "$x" = 'hoge' ] ; then
i=2
elif [ "$i" -gt 0 ] ; then
i=`expr "$i" - 2`
else
y="$x"
fi
echo "$y"
done < file
0479名無しさん@お腹いっぱい。
2006/05/22(月) 12:36:140480名無しさん@お腹いっぱい。
2006/05/25(木) 17:12:36かどうかを調べるのにはどうしたらよいでしょうか?
HTTPで自分の状況を公開している装置Mがあります。
これの状況を定期的に wget 1.8.2 で調べようとしてるのですが、
時々MのHTTPサーバが落ちています。(OSは動いててping等に応答。)
サーバが落ちていると、wget はいつまでも終了しません。
HTTPでつながらない時にはすぐあきらめるにはどうしたらよいでしょう?
wget の --timeoutオプションは、connect(2)成功後のreadに対する指定
らしく、効果ありませんでした。
wgetするマシンはFreeBSD 4.10で、/bin/sh で書いてます。
0481名無しさん@お腹いっぱい。
2006/05/25(木) 17:45:230482480
2006/05/25(木) 17:56:25でも、相手出ないのに玄関でずっと待ってるのも変で。
nmapごもっともですが、大鉈っぽくないですか?
0483名無しさん@お腹いっぱい。
2006/05/25(木) 18:07:46wget http://... &
sleep 5
kill $!
0484名無しさん@お腹いっぱい。
2006/05/25(木) 18:41:40リトライが0(=infinity)になってない?
1.10.1なら--connect-timeoutがあるよ。
0485名無しさん@お腹いっぱい。
2006/05/25(木) 21:18:45Smokepingが良いよ。
単体のコマンドはechopingとか
0486名無しさん@お腹いっぱい。
2006/05/26(金) 17:45:13あるファイルの中の情報が
正しいフォーマット(各情報がタブで分けられている)
かどうか確認する方法はありますか?
たとえば、example.txtというファイルの中が
picture.jpg<tab>jpg
word.txt<tab>txt
music.mp3<space>mp3
だとすると、
このファイルのフォーマットは正しくない(3行目がスペースで分けられている)ので、
falseを返すというようなスクリプトを知りたいです。
よろしくお願いします
0487名無しさん@お腹いっぱい。
2006/05/26(金) 17:50:20「正しい」の定義がよくわからんが
grep -v ' ' <example.txt >/dev/null && echo false
とか。
' ' の中は TAB 文字で。
0488名無しさん@お腹いっぱい。
2006/05/26(金) 17:58:17「falseを返す」というのは「falseという文字列を表示する」という意味なのかw
0489名無しさん@お腹いっぱい。
2006/05/26(金) 18:05:58まぁ、例として挙げたまで。
その辺は好きなように変えてくれ。
0490486
2006/05/26(金) 18:21:45あるファイルの中の各ラインの情報が
すべてタブキャラクターで分けられているか確認したいのです。
上記のexample.txtの場合、
1行目と2行目は
picture.jpg<tab>jpg
word.txt<tab>txt
とタブで分けられていますが、
3行目は
music.mp3<space>mp3
タブではなくスペースで分けられているので、
このexample.txtの書式は間違っているということが知りたいのです。
0491名無しさん@お腹いっぱい。
2006/05/26(金) 18:28:37それなら >>487 がすでに答えてるじゃん。
もっと厳密にするなら
grep -v '\<.*\> \<.*\>'
でいいかな。途中の空白に見えるところは TAB文字でね。
0492名無しさん@お腹いっぱい。
2006/05/26(金) 18:28:56> あるファイルの中の各ラインの情報が
> すべてタブキャラクターで分けられているか確認したいのです。
さっきと変わってないな。
ここをきちんと定義しないとまともな解は出てこないよ。
たとえば以下のような行をどう扱うか
これじゃわからんでしょ。
a<space><tab>b
a<space>b<tab>c
<tab>b
a<tab><tab>b
a<tab>b<tab>c
0493名無しさん@お腹いっぱい。
2006/05/26(金) 19:22:02a=$(cat $1 | wc -l)
b=$(cat $1 | sed -nr "/[^\t]*\t[^\t]*/p" | wc -l)
[ $a = $b ] && echo "OK" || echo "NG"
0494名無しさん@お腹いっぱい。
2006/05/26(金) 20:16:12一括で処理させたいと思い以下のようなシェルスクリプトを組んだのですが
サブディレクトリ内の一部ファイルが重複して処理されてしまいます
どこがダメなのでしょうか?
recursive_func()
{
for i in *
do
if [ -d $i ]
then
cd $i
recursive_func
cd ..
fi
if echo $i | grep '\.c$' > /dev/null || echo $i | grep '\.h$' > /dev/null
then
//ここに処理
fi
done
}
recursive_func
0495名無しさん@お腹いっぱい。
2006/05/26(金) 20:21:54find と xargs じゃだめなん?
0496名無しさん@お腹いっぱい。
2006/05/26(金) 20:40:57シェル変数iはローカル変数じゃないよ。
再帰呼び出しした時に iの値を変化させてしまうから、
呼び出し元の iまで狂ってしまう。
0497名無しさん@お腹いっぱい。
2006/05/26(金) 20:41:55find自体は知ってたんですが、まさかこんな使い方があるとは知りませんでした・・・orz
下の様に書き換えることで目的の処理は達成できました
ありがとうございました&お騒がせしました・・・
find . \( -regex ".*\.c" -o -regex ".*\.h" \) -exec //ここに処理 \;
0498名無しさん@お腹いっぱい。
2006/05/26(金) 20:45:38そういうことだったんですか。シェルスクリプトはちょっと齧っただけなので
ついCの感覚で書いてました・・・
元の方も関数先頭で local i とすることでうまく動くようになりました
わざわざありがとうございました
0499名無しさん@お腹いっぱい。
2006/05/26(金) 20:50:03hoge.c っていうディレクトリがあったときに
おかしくなりそうだな。
0500名無しさん@お腹いっぱい。
2006/05/26(金) 21:12:25grepしてるとこelifにすりゃ良くね?
0501名無しさん@お腹いっぱい。
2006/05/26(金) 21:15:16答え言うなよ。
空気嫁。
0502名無しさん@お腹いっぱい。
2006/05/26(金) 21:16:18case "$i" in
*.c|*.h)
ここに処理;;
esac
で桶。
0503名無しさん@お腹いっぱい。
2006/05/27(土) 19:29:580504名無しさん@お腹いっぱい。
2006/05/27(土) 19:34:00スクリプト内で読み込ませ、全行正常に読み込んだか判定したいのですが
. /環境変数定義ファイル
echo $?
環境変数定義ファイルの途中で読み込みエラーが発生しても
最終行が正常ならば、echoは0を返すのですが
読み込みエラーを発見する方法ってありますか。
0505名無しさん@お腹いっぱい。
2006/05/27(土) 20:16:470506名無しさん@お腹いっぱい。
2006/05/28(日) 02:13:45速度重視ならシェルスクリプトはやめといた方がいい。
0507名無しさん@お腹いっぱい。
2006/05/29(月) 04:12:25a) .で始まるファイルは数えられなくてもいーんなら
find . -type d | while read DIR ; do printf "$DIR: %d\n" `find $DIR/* -prune ! -type d | wc -l` ; done
b) それじゃあ困るよという場合は
find . -type d | while read DIR ; do printf "$DIR: %d\n" `ls -aF $DIR | fgrep -v '/' | wc -l ` ; done
iBook(500MHzのG3)で試したら、、、
a)の例
# time find /usr -type d | while read DIR ; do printf "$DIR: %d\n" `find $DIR/* -prune ! -type d | wc -l` ; done
real 1m1.054s
user 0m7.870s
sys 0m42.810s
#
b)の例
# find /usr -type d | while read DIR ; do printf "$DIR: %d\n" `ls -aF $DIR | fgrep -v '/' | wc -l ` ; done
real 1m18.302s
user 0m10.340s
sys 0m53.310s
#
約17秒ほど差がでますた。(当社比約1.3倍)
※うちiBookの/usrはファイル19240コ、ディレクトリ973だぉ
0508名無しさん@お腹いっぱい。
2006/05/29(月) 04:19:57iBookでやってみた感じだと、%SYSの方の比率が大きいくて
wcやfgrepの負荷は%USRの比率が大きいぉ。
とゆーことで、
ファイル名・ディレクトリ名をファイルシステム内でぐるぐる走査する時間に多くが費やされるっぽいぉ。
ならば、シェルスクリプトでも大差ない鴨よ?
lsやfindを上回るCのアプリ書くのも難しいし。
0509sage
2006/05/29(月) 04:53:110510名無しさん@お腹いっぱい。
2006/05/29(月) 09:44:08が速いんじゃないかな。
0511名無しさん@お腹いっぱい。
2006/05/29(月) 09:50:51>>507 >>510 は一応ディレクトリ毎に結果を表示するから、回答になってる。
回答が >>509 でいいんなら、そもそも質問しないだろ。
0512age
2006/05/29(月) 11:08:01#!/bin/sh とか記述する行の事、何て言うんでしたっけ。
人の名前みたいな「○○の行」みたいな名前が付いてたと思うんですが。
0513名無しさん@お腹いっぱい。
2006/05/29(月) 11:19:51これ?
http://www.catb.org/~esr/jargon/html/S/shebang.html
0515名無しさん@お腹いっぱい。
2006/05/29(月) 13:43:51GNU findには-printfなんてのがあるのか・・・ベンリね
GNU find じゃない人は
find . -type f -exec dirname {} \; | sort | uniq -c
と書かないと動かん鴨
# FIFOなんかもファイルの数として数えたければ
# find . ! -type d -exec dirname {} \; | sort | uniq -c
0516名無しさん@お腹いっぱい。
2006/05/29(月) 14:52:01環境設定をapacheのhttpd.confに追加して動かす方法はあるのでしょうか?
いま環境設定はサーバー上で
FILE=data.ini
export FILE
で行っています。
シェルはLinuxのbashです。
0517名無しさん@お腹いっぱい。
2006/05/29(月) 14:56:44くだらねえ質問はここに書き込め! Part 125
http://pc8.2ch.net/test/read.cgi/linux/1147260130/
0518名無しさん@お腹いっぱい。
2006/05/29(月) 15:09:11http://pc8.2ch.net/test/read.cgi/linux/1121994321/l50
0519名無しさん@お腹いっぱい。
2006/05/29(月) 16:57:12SetEnv FILE data.ini
って、アンタそりゃーhttpdの使い方の話だから
シェルスクリプトの話じゃねーべ
0520名無しさん@お腹いっぱい。
2006/05/29(月) 21:09:11例]file_procという自作コマンドを実行してaaaというファイルが更新されたらファイルの最後に時刻を書き込む
1.file_proc1 aaaを実行
2.aaaというファイルが更新されるのを待つ
3.更新されたらそのファイルの最後に時刻を追加
4.file_proc2 aaaを実行
5.aaaというファイルが更新されるのを待つ
6.更新されたらそのファイルの最後に時刻を追加
・
・
・
・
0521名無しさん@お腹いっぱい。
2006/05/29(月) 21:16:150522名無しさん@お腹いっぱい。
2006/05/29(月) 23:01:27よくわからんがこんなんでええんかい?
----
FILE_WATCH=/home/foo/aaa
FILE_PREVIOUS=/tmp/watch.txt
if [ ! -f $FILE_WATCH ]
then
echo "$FILE_WATCH not found."
exit 1
fi
ls -l $FILE_WATCH > $FILE_PREVIOUS
while [ -1 ]
do
LS_CURRENT=`ls -l $FILE_WATCH`
LS_BEFORE=`cat $FILE_PREVIOUS`
if [ x"$LS_CURRENT" != x"$LS_BEFORE" ]
then
# file is updated
date >> $FILE_WATCH
fi
ls -l $FILE_WATCH > $FILE_PREVIOUS
sleep 10
done
----
0523名無しさん@お腹いっぱい。
2006/05/30(火) 00:27:07file_proc1 aaa && date >> aaa
こんなのじゃだめなの?
0524名無しさん@お腹いっぱい。
2006/05/30(火) 23:30:11を実行した結果と一緒にファイルに出力したいのですが
set -x
としても
./abc.sh > aaa.txt
のように実行したときに
aaa.txtに実行した結果しか出力されません。
どうすればコマンドも出力できるようになりますか?
0525名無しさん@お腹いっぱい。
2006/05/30(火) 23:37:57./abc.sh > aaa.txt 2>&1
0526名無しさん@お腹いっぱい。
2006/05/30(火) 23:39:45スクリプトの一行目に、
echo -n $0
とか書いとけばいいんじゃないかと。
0527名無しさん@お腹いっぱい。
2006/05/30(火) 23:42:560528名無しさん@お腹いっぱい。
2006/05/30(火) 23:57:100529名無しさん@お腹いっぱい。
2006/05/30(火) 23:59:55つか、>>525 に答え出てるって。
0530名無しさん@お腹いっぱい。
2006/05/31(水) 00:18:48として数分待ってメールを読む
0531名無しさん@お腹いっぱい。
2006/05/31(水) 08:46:302>&1ってつけると標準エラー出力もファイルに書き込む
0532名無しさん@お腹いっぱい。
2006/05/31(水) 10:57:59c123456 cs012
という文字列がhogehogeというファイルに記述されていた場合、
cs以下の数字3つを切り取り、それを変数numとする
更にその変数numに対して
整数a≦変数num≦整数b
という条件が満たされた場合にその旨を伝える
…というスクリプトを作っているのですが、どうもうまくいきません
if [ $num >= 0 ] ; then
if [ $num <= 61 ] ; then
echo
0533切れてる…orz
2006/05/31(水) 11:01:11if [ $num <= 61 ] ; then
echo "0 <= $num <= 61"
fi
fi
if [ $num >= 62 ] ; then
if [ $num <= 122 ] ; then
echo "62 <= $num <= 122"
fi
fi
と条件を指定したのですが、numの値如何に関わらず全てのecho文が表示されてしまいます
どうすればいいんでしょうか?
0534セル塩いちご
2006/05/31(水) 11:23:27<= を -le に
と直せばいいじゃないかな
0535名無しさん@お腹いっぱい。
2006/05/31(水) 12:01:59削除するヨロシ。
0536名無しさん@お腹いっぱい。
2006/05/31(水) 12:46:42とかの方が見やすそうな希ガス
0537名無しさん@お腹いっぱい。
2006/05/31(水) 12:50:50if ((0 <= num && num <= 61)); then
0538名無しさん@お腹いっぱい。
2006/05/31(水) 13:16:350539名無しさん@お腹いっぱい。
2006/05/31(水) 17:48:580540名無しさん@お腹いっぱい。
2006/05/31(水) 17:53:53罰手異存!
0541名無しさん@お腹いっぱい。
2006/05/31(水) 17:56:480542名無しさん@お腹いっぱい。
2006/05/31(水) 19:00:43知っているのか雷電。
0543名無しさん@お腹いっぱい。
2006/05/31(水) 20:21:14そのようにすると「unary operator expected」と出て弾かれてしまいます…
>>535
分かりました。処理しておきます
>>536,537
すぐには無理ですが、明日にでも試してみます。ありがとうございます
>>538
諸事情によりshでやらなければならないので…残念です
0544名無しさん@お腹いっぱい。
2006/05/31(水) 20:33:26>そのようにすると「unary operator expected」と出て弾かれてしまいます…
だとすると、$numに何も代入されていない(空文字列)の可能性あり。
[ $num >= 62 ] だから、>= はリダイレクトとみなされ、引数ではないので
testコマンドには test $num 62 だけが渡り、$numが空文字列なので、
test 62 となって、これは62という文字列の長さが1以上あるので
常に真になる。
元の質問で常に真になるという現象の説明が付く。
ちなみに、正しく$numに代入されていれば、
[ $num -ge 62 ] で動かないとおかしい。
0545名無しさん@お腹いっぱい。
2006/05/31(水) 21:05:05テキストから読み取って代入ってシェルだと結構難しいよ
awkとかでやってるのか?
0546名無しさん@お腹いっぱい。
2006/05/31(水) 21:27:49えーっとですね…種明かしをすると、大学の課題の一環なんです。
手元にスクリプトファイルがないので、明日また質問させていただきます。
因みにawkは使わず(使い方がよく分からない)、sedで例としてあげたcs012の"012"部分を切り取って使っています。
先生によるとそれが文字列として認識されており、整数に直す処理をしてやればよいのではないか…との事です。
んが、そのやり方が分からずに困ってます…
0547名無しさん@お腹いっぱい。
2006/05/31(水) 21:33:32本当に先生がそう言ったのならその先生は信用しない方がいい。
シェルスクリプトの変数では文字列と整数を区別しない。
(testコマンドでの判定時に演算子によって区別するだけ)
あと、宿題なら回答はこれで打ち切る。
0548名無しさん@お腹いっぱい。
2006/05/31(水) 23:26:11だからそのsedで抜き出してる処理の部分を詳しく
そこが間違ってたらもともこもねえじゃん
012の部分を切り取ってるソースをここに書け
0549名無しさん@お腹いっぱい。
2006/05/31(水) 23:52:480550名無しさん@お腹いっぱい。
2006/06/01(木) 02:15:27ok
へー、これでもエラーでないのか。
知らなかった。
0551546
2006/06/01(木) 14:31:53friend="$HOME/.friendlist"
friend2="$HOME/.friendlist2"
echo "Do you use me?---y/n"
read first
while test x"$first" = xy
do
w | grep -v pts | sort | sed 's/\([^ ]*\) :0\/\([^ ]*\) *[^ ]* *[^ ]* *[^ ]* *[^ ]* *[^ ]*/\1\2/' | cat >>$friend
read first
for i in $first
do
grep "$i" $friend | cat >>$friend2
set tmp=`sed 's/^c[0-9]\{6\} cs\([0-9]\{3\}\)/\1/' $friend2`
num=`$tmp >& /dev/null`
echo "
$i is here.
"
grep "$i" $friend2
echo ""
done
0552名無しさん@お腹いっぱい。
2006/06/01(木) 14:38:24num=`$tmp >& /dev/null`
↑/dev/nullに捨ててどうするw こりゃだめだ。
0553名無しさん@お腹いっぱい。
2006/06/01(木) 14:54:18該当行を削除してif構文を>>537さんの提示してくれた文に書き換えた結果、エラーは吐き出されなくなったものの
if ((0 <= num && num <= 61)) ; then
echo "$i is in \"2nd bld.101A\"."
fi
if ((62 <= num && num <= 122)) ; then
echo "$i is in \"2nd bld.109A\"."
fi
if ((123 <= num && num <= 142)) ; then
echo "$i is in \"20th bld.107\"."
fi
if ((143 <= num && num <= 162)) ; then
echo "$i is in \"20th bld.619\"."
fi
if ((201 <= num && num <= 245)) ; then
echo "$i is in \"20th bld.310\"."
fi
if ((301 <= num && num <= 320)) ; then
echo "$i is in \"20th bld.413\"."
fi
if ((321 <= num && num <= 340)) ; then
echo "$i is in \"20th bld.613\"."
fi
のようにしているのにnumの値に関わらず一番最初の処理しか実行されません…
0554名無しさん@お腹いっぱい。
2006/06/01(木) 15:01:42>該当行を削除して
削除してどうする。/dev/nullに捨てるのだけが余計。その他は必要。
あと、その前の行の set もおかしい。
これ本当にに自分で理解して書いたスクリプトじゃないだろ。
もっとシェルスクリプトの基本からやり直した方がいい。
0555名無しさん@お腹いっぱい。
2006/06/01(木) 15:19:45了解しました。確かに、理解せずに書いた部分がほとんどです。
勉強して出直すことにします。ありがとうございました。
0557名無しさん@お腹いっぱい。
2006/06/02(金) 11:57:20#!/bin/sh -x
----
でいいんじゃないかな
0558名無しさん@お腹いっぱい。
2006/06/02(金) 12:50:400559名無しさん@お腹いっぱい。
2006/06/02(金) 12:54:53perl使っちゃえよ。
0560名無しさん@お腹いっぱい。
2006/06/02(金) 13:03:36探しているんだが全然見つからん…orz
0561名無しさん@お腹いっぱい。
2006/06/02(金) 13:09:14bc使っちゃえよ。
0562名無しさん@お腹いっぱい。
2006/06/02(金) 13:37:19ヒント: head -c; tail -c
>>560
$ printf '%d\n' 0377
255
0563名無しさん@お腹いっぱい。
2006/06/02(金) 13:49:34サンクス。こんなやり方があったのか…
0564名無しさん@お腹いっぱい。
2006/06/02(金) 14:56:10255
$ perl -e 'print 0377,"\n";'
255
$
0565名無しさん@お腹いっぱい。
2006/06/02(金) 23:45:58実行している時に , 標準出力にディスプレイ 風車 ? が回って
いる様にみせるにはどうすればいいでしょうか ?
0566名無しさん@お腹いっぱい。
2006/06/03(土) 02:51:19$ echo '8i377p' | dc
255
0567名無しさん@お腹いっぱい。
2006/06/03(土) 03:10:32ヒントをやるから後は自分でアレンジしな。
for i in a b c
do
echo -en "$i\r"
sleep 1
done
0568名無しさん@お腹いっぱい。
2006/06/03(土) 08:02:28ワンライナー計算ができないのが面倒くさい。
bc -e '1+2'
くらいできてもいいのに。
0569名無しさん@お腹いっぱい。
2006/06/03(土) 08:32:25dcは出来る子。
0570名無しさん@お腹いっぱい。
2006/06/03(土) 11:44:41exprは出来る子。
0571名無しさん@お腹いっぱい。
2006/06/03(土) 12:02:320572名無しさん@お腹いっぱい。
2006/06/03(土) 14:21:54なんでつかわないんだろ。
0573名無しさん@お腹いっぱい。
2006/06/03(土) 14:43:15最近ようやくどの新しいOSにでも入ってる状態になったってことは、
後10年くらいしたらどこで使っても問題ないかなって感じだ。
0574名無しさん@お腹いっぱい。
2006/06/03(土) 17:10:36自分は今Solarisを使っているんだが、 実は2.5.1にはすでに入ってたのね。知らなかった。
0575名無しさん@お腹いっぱい。
2006/06/03(土) 19:13:50ありがとう。
ps で実行したコマンドのプロセスを確認と絡めて
うまい具合に作れました。
0576名無しさん@お腹いっぱい。
2006/06/03(土) 23:48:49#!/bin/sh
echo "$@" | bc
0577名無しさん@お腹いっぱい。
2006/06/03(土) 23:53:140578名無しさん@お腹いっぱい。
2006/06/17(土) 01:14:46finde ./ の結果が
AAA
AAA/BBB
AAA/BBB/hoge1.txt
AAA/BBB/hoge2.txt
AAA/BBB/hoge3.txt
AAA/BBB/CCC/hoge4.txt
AAA/BBB/CCC/DDD
AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/hoge5.txt
AAA/BBB/FFF/GGG/hoge6.txt
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/hoge7.txt
AAA/BBB/FFF/III/JJJ
AAA/BBB/FFF/III/JJJ/KKK
AAA/BBB/FFF/III/JJJ/KKK/LLL
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM
となっていて、ツリーにファイルを持たないフォルダのみを
抜き出したいです。
0579名無しさん@お腹いっぱい。
2006/06/17(土) 01:15:24AAA/BBB/CCC/DDD
AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/JJJ
AAA/BBB/FFF/III/JJJ/KKK
AAA/BBB/FFF/III/JJJ/KKK/LLL
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM
先輩は、find . -type d -emptyと言い残して旅に出ましたが
動きませんでした…
OSはこれです。シェルがどうこうはよくわかりません。。。
SunOS devcvs01 5.9 Generic_118558-05 sun4u sparc SUNW,UltraAX-i2
0580名無しさん@お腹いっぱい。
2006/06/17(土) 02:56:59実はちゃんと動いている、に1票。
動かしてみたらどうなったか具体的に書いてみ。
あと、次に>>578がここに戻ってくるときまでには、
先輩が教えたオプションの意味をman見て100%理解しとけよ。
0581名無しさん@お腹いっぱい。
2006/06/17(土) 08:52:40先輩はガソリンが空っぽになったので探しながら旅をしてる
まで読んだ
0582578
2006/06/17(土) 08:55:24また、UNIXのコマンドのfindのとこに-emptyオプションがなかったです。
0583名無しさん@お腹いっぱい。
2006/06/17(土) 09:22:500584名無しさん@お腹いっぱい。
2006/06/17(土) 10:25:12AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM
になるはず。AAA/BBB/CCC/DDD の下に AAA/BBB/CCC/DDD/EEE があるから
-empty でひっかからない。
-type d でひっかかったディレクトリのそれぞれにファイルがあるかどうかを
ひとつずつ地道に調べるしかないんじゃ?
0585名無しさん@お腹いっぱい。
2006/06/17(土) 11:18:240586578
2006/06/17(土) 11:49:13地道に調べてるのですが、いかんせんフォルダが10000くらいあって
そのうちの500フォルダくらいが空のようですが、目視はなんとも精度が低く
>>585
すみません、どんな感じにやるのですか?
0587名無しさん@お腹いっぱい。
2006/06/17(土) 12:06:31find $1 -type f|grep '^$' >/dev/null
みたいなシェルスクリプトを使うのか?
0588名無しさん@お腹いっぱい。
2006/06/17(土) 12:14:16Solarisのfindには、-emptyオプションが無い件については、
↓で代用できる。
find . -type d -links 2
で、サブディレクトリがあって空の場合に、
親ディレクトリは引っかからないという問題はあるけど、
どうせ、その空のディレクトリを消したいんだろ?
なら、末端の空のディレクトリを消して、再び
↑のfindをすることを数回繰り返せば、目的は果たせる。
0589578
2006/06/17(土) 12:18:16一覧をこさえて提出しないと、鬼が怒るという問題があるのです
-emptyないのですか…
0590名無しさん@お腹いっぱい。
2006/06/17(土) 15:12:39use File::Find;
no warnings File::Find;
do {
my %not_empty;
find({'bydepth'=>1, 'no_chdir'=>1,
'wanted'=>sub {
my $dir = $File::Find::dir;
my $name = $File::Find::name;
if (-d $name) {
return if (defined ($deleted{$name}));
if (! defined ($not_empty{$name})) {
$deleted{$name} = 1;
return;
}
}
$not_empty{$dir} = 1;
}},'.');
$old = $new;
$new = length(keys %not_empty);
} while ($old!=$new);
print join("\n",sort keys %deleted) ,"\n";
長過ぎ。シェルスクリプトじゃないし。しかも、この出力をrm -rf できないし。
0591名無しさん@お腹いっぱい。
2006/06/17(土) 15:50:18#!/bin/sh
for x in `find $1 -type d` ; do
find $x -maxdepth 1 -type f | grep . > /dev/null
if [ $? -eq 0 ] ; then
continue
fi
echo $x
done
環境が違うんでgrepの違いとかは適当に直して呉
リンクの有無とかもチェックするなら3-6行を増やせ
>589
結果に責任は持たんから怒られる覚悟はしとけw
0592591
2006/06/17(土) 16:01:10実はあのままだと怒られるパターンがあるが、詳しく書かないでおく。
0593名無しさん@お腹いっぱい。
2006/06/17(土) 17:04:33Solarisの findには -maxdepthオプションがないというのがオチ。
あと、シェル変数を " " してないから、いろいろ危ない。
0594名無しさん@お腹いっぱい。
2006/06/17(土) 17:23:242 find でディレクトリ以外の一覧を得る find . ! -type d > b
3 2 で得られたものから、dirname の一覧を作る
cat b | sed 's,/[^/]*$,,' > c1
cat c1 | sed 's,/[^/]*$,,') > c2
以下、最も深い階層回繰り返し。
4 1 にしか含まれないものを創る cat a c1 c1 c2 c2 ... |sort |uniq -u
0595名無しさん@お腹いっぱい。
2006/06/17(土) 19:13:07それを find から -exec で起動するかな
0596名無しさん@お腹いっぱい。
2006/06/17(土) 19:43:52ディレクトリの末尾に余計なコロンがついてるが気にするな。
最上位のディレクトリだけはディレクトリだけあってファイルがひとつもなくても
結果に出てこないがそれ以外は正しいはず。目視で確認してくれ。
改行コードを含むディレクトリだとかコロンで終わるファイルとかあると
おかしな結果になるがそれ以外は正しいはず。そんなファイルを作るな(w
0597名無しさん@お腹いっぱい。
2006/06/17(土) 20:22:53あと、サ(ry
0598名無しさん@お腹いっぱい。
2006/06/17(土) 20:39:00でいいじゃん
0599名無しさん@お腹いっぱい。
2006/06/18(日) 00:04:44だめだろ。duじゃディレクトリが空か判定できんぞ。
0600名無しさん@お腹いっぱい。
2006/06/18(日) 00:20:510601名無しさん@お腹いっぱい。
2006/06/18(日) 00:58:37rsync -avn
find
diff
0602名無しさん@お腹いっぱい。
2006/06/18(日) 06:21:08使用ファイルサイズで分かる。
0603名無しさん@お腹いっぱい。
2006/06/18(日) 06:45:04あ、-maxdepthなんか無い方が目的に適うことに気づいてしまったw
0604名無しさん@お腹いっぱい。
2006/06/18(日) 20:05:24いや、わからないですね。
ディレクトリ内のファイルの作成削除の履歴&OSによるディレクトリ管理の方法によっては、
ファイルが全くなくてもディレクトリのサイズが巨大になる場合がありえるものなんです。
0605名無しさん@お腹いっぱい。
2006/06/19(月) 16:52:37メモリ制限やプロセス数制限でプロセス生成に失敗すると、
シェルスクリプト本体が終了してしまいますが、
終了させずに次の行へ処理を進める方法はありますか?
一定時間ウェイトしてから、リトライさせたいのですが…
0606名無しさん@お腹いっぱい。
2006/06/19(月) 17:13:55サンプル希望
0607名無しさん@お腹いっぱい。
2006/06/19(月) 17:41:23FAT
0608名無しさん@お腹いっぱい。
2006/06/19(月) 17:51:34$ uname -a
FreeBSD xxx 7.0-CURRENT FreeBSD 7.0-CURRENT #13: Tue May 9 14:37:19 JST 2006 xxx i386
$ mkdir /tmp/testdir
$ ls -ld /tmp/testdir
drwxr-xr-x 2 xxxx xxxx 512 Jun 19 17:40 /tmp/testdir
$ for f in $(jot 1000);do touch /tmp/testdir/$f;done
$ ls -ld /tmp/testdir
drwxr-xr-x 2 xxxx xxxx 12288 Jun 19 17:41 /tmp/testdir
$ rm /tmp/testdir/*
$ ls -ld /tmp/testdir
drwxr-xr-x 2 xxxx xxxx 12288 Jun 19 17:41 /tmp/testdir
他人にサンプル要求してるんだから「使用ファイルサイズで分かる」サンプルも提示しろよ。
0609名無しさん@お腹いっぱい。
2006/06/19(月) 19:36:34Linuxなんだけど
$mkdir -p /tmp/testdir/test{1,2}
$for aa in `seq 10`; do mkdir /tmp/testdir/test1/aa$aa; done
$du -b /tmp/testdir/ |sort -nr
53248 /tmp/testdir
45056 /tmp/testdir/test1
4096 /tmp/testdir/test2
4096 /tmp/testdir/test1/aa9
4096 /tmp/testdir/test1/aa8
4096 /tmp/testdir/test1/aa7
4096 /tmp/testdir/test1/aa6
4096 /tmp/testdir/test1/aa5
4096 /tmp/testdir/test1/aa4
4096 /tmp/testdir/test1/aa3
4096 /tmp/testdir/test1/aa2
4096 /tmp/testdir/test1/aa10
4096 /tmp/testdir/test1/aa1
空のディレクトリは最小サイズだよ。
0610名無しさん@お腹いっぱい。
2006/06/19(月) 20:03:50touch /tmp/testdir/test2/hoge
してファイルを作成してみるとどうなるか。
0611名無しさん@お腹いっぱい。
2006/06/19(月) 20:06:56おんなじことを Linux-2.4.20 で追試させてもらった。
やっぱ同様にファイルが1つもないのに/tmp/testdirが12288と大きいままだったわい。
0612名無しさん@お腹いっぱい。
2006/06/19(月) 23:40:21空じゃないディレクトリでも最小サイズだな。
もっとも真に空のディレクトリが存在したらファイルシステムが壊れているという事だけど。
$ mkdir /tmp/testdir
$ ls -ld /tmp/testdir
drwxr-xr-x 2 xxxx xxxx 4096 Jun 20 00:54 /tmp/testdir
$ touch /tmp/testdir/1
$ ls -ld /tmp/testdir
drwxr-xr-x 2 xxxx xxxx 4096 Jun 20 00:54 /tmp/testdir
0613名無しさん@お腹いっぱい。
2006/06/20(火) 00:05:48linux の reiserfs3 だと
mkdir a
drwxr-xr-x 2 xxxx xxxx 48 Jun 20 00:03 a/
touch a/hoge
drwxr-xr-x 2 xxxx xxxx 72 Jun 20 00:03 a/
rm a/hoge
drwxr-xr-x 2 xxxx xxxx 48 Jun 20 00:03 a/
0614604
2006/06/20(火) 00:31:51おっしゃるとおりです。OSとか「ファイルシステムによる」わけです。
だから、そういうことに依存したスクリプトは書いてはいけないでしょう。
最低限、>>598,602のような表明には、「XXXファイルシステムとか△△△OSでは」
という条件を付さねばならなかったわけです。
0616名無しさん@お腹いっぱい。
2006/06/20(火) 00:42:59% ls -ld
drwxr-xr-x 2 xxxx users 512 Jun 20 00:38 .
% touch `yes '' | head -1000 | cat -n` ; ls -ld
drwxr-xr-x 2 xxxx users 12288 Jun 20 00:38 .
% rm * ; ls -ld
drwxr-xr-x 2 xxxx users 12288 Jun 20 00:38 .
みたいにサイズが戻らないけど、swapfs(仮想メモリディスク)上だと
% ls -ld
drwxr-xr-x 2 xxxx users 117 Jun 20 00:37 .
% touch `yes '' | head -1000 | cat -n`; ls -ld
drwxr-xr-x 2 xxxx users 60010 Jun 20 00:37 .
% rm *; ls -ld
drwxr-xr-x 2 xxxx users 117 Jun 20 00:37 .
みたいに元に戻る。
0617名無しさん@お腹いっぱい。
2006/06/20(火) 10:41:17>608 の jot って coreutils ( sh-utils だった ?) の seq みたいなのですか ?
0618名無しさん@お腹いっぱい。
2006/06/20(火) 11:08:27http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=jot&dir=jpman-5.4.0%2Fman§=0
0619名無しさん@お腹いっぱい。
2006/06/20(火) 11:09:14そうです。
JOT(1) FreeBSD General Commands Manual JOT(1)
NAME
jot -- print sequential or random data
SYNOPSIS
jot [-cnr] [-b word] [-w word] [-s string] [-p precision]
[reps [begin [end [s]]]]
0620名無しさん@お腹いっぱい。
2006/06/20(火) 12:02:340621名無しさん@お腹いっぱい。
2006/06/20(火) 12:20:580622名無しさん@お腹いっぱい。
2006/06/20(火) 12:22:19>618-619 ありがとうございました。
0623名無しさん@お腹いっぱい。
2006/06/20(火) 13:29:03だそうだ。
0624名無しさん@お腹いっぱい。
2006/06/20(火) 19:34:24というシェルスクリプトきぼんぬ
0625名無しさん@お腹いっぱい。
2006/06/20(火) 19:44:01echo hoge|mail aho
fi
0626名無しさん@お腹いっぱい。
2006/06/20(火) 20:00:15$ [ -e hoge.txt ]
test: argument expected
$ uname -sr
SunOS 5.10
0627名無しさん@お腹いっぱい。
2006/06/20(火) 21:46:25そりゃ、SunOSみたいな古いOSじゃ動かないかもね。Solaris使えよ。
0628名無しさん@お腹いっぱい。
2006/06/20(火) 22:09:18お前、それがとても恥ずかしい発言だってわかってる? 晒し上げ www
0629名無しさん@お腹いっぱい。
2006/06/20(火) 22:24:250630名無しさん@お腹いっぱい。
2006/06/21(水) 08:49:430631名無しさん@お腹いっぱい。
2006/06/21(水) 08:58:580632名無しさん@お腹いっぱい。
2006/06/21(水) 09:54:480633名無しさん@お腹いっぱい。
2006/06/21(水) 10:32:01pgr
0634名無しさん@お腹いっぱい。
2006/06/21(水) 10:49:16>>627 を笑うものの方が逆に恥ずかしいみたいだから。
0635名無しさん@お腹いっぱい。
2006/06/21(水) 15:39:160636名無しさん@お腹いっぱい。
2006/06/21(水) 16:59:40sedで地道にやる以外になんかカッコイイのない?
echo -n "ほげ" | od -t x2 -A n | tr -d ' ' | sed 's/\([0-9a-z][0-9a-z]\)\([0-9a-z][0-9a-z]\)/%\2%\1/g'
↑はどっかで拾ってきたやつだけど、
変換しなくていい文字とか、スペースと+の変換とかまで考慮したのを
スマートに誰か書いてちょーだい
0637名無しさん@お腹いっぱい。
2006/06/21(水) 17:13:38それ以前に、その拾ってきた奴というのがバイトオーダーの問題で
環境によっては動かないはずだが。
0638名無しさん@お腹いっぱい。
2006/06/21(水) 17:20:10RubyかPerlでやれば?
0639名無しさん@お腹いっぱい。
2006/06/21(水) 19:42:56Solaris9=SunOS5.9
Solaris8=SunOS5.8
Solaris7=SunOS5.7
0640名無しさん@お腹いっぱい。
2006/06/21(水) 19:49:59Solaris 11
0641名無しさん@お腹いっぱい。
2006/06/21(水) 20:15:43Linux 2.4
0642名無しさん@お腹いっぱい。
2006/06/21(水) 20:41:140643名無しさん@お腹いっぱい。
2006/06/21(水) 21:14:47ttp://jp.rubyist.net/magazine/?0001-NoraTutorial#l10
0644名無しさん@お腹いっぱい。
2006/06/21(水) 21:54:47Darwin 8.6.2
0645名無しさん@お腹いっぱい。
2006/06/21(水) 22:27:13放っておくとtcshのシェルスクリプトを書くような連中なので
tcsh/csh/zshのシェルスクリプトは禁止する予定なのですが、
ターゲットはSunOSなので放っておくとbash固有の機能を使いかねません。
ボーンシェルのシェルスクリプトの仕様を提示したいのですがどこかにあるでしょうか?
0646名無しさん@お腹いっぱい。
2006/06/21(水) 22:57:510647名無しさん@お腹いっぱい。
2006/06/21(水) 23:04:57マシンも環境も同じにするのがプロの発注。
0648名無しさん@お腹いっぱい。
2006/06/21(水) 23:25:53理由はわからぬ。
0649名無しさん@お腹いっぱい。
2006/06/21(水) 23:34:17現物(マシン+OS+sh)を貸し出してこれで動くようにしろ、
というのが確実。
で、cshで書いてしまうような外注は捨てて、
もっとマシな所に発注するのがもっとも確実。
0650645
2006/06/21(水) 23:40:59元請の弊社は発注元と下請けの間の調整もせず勝手にやってというのが
基本姿勢のクズ会社なのでどっちもどっちなのです。
ポータビリティは考えずに、動作するコーンシェルのバージョンを指定しようと思います。
0651名無しさん@お腹いっぱい。
2006/06/22(木) 00:12:29…英語の仕様書が読めるわけもないか。
0652名無しさん@お腹いっぱい。
2006/06/22(木) 04:08:140653名無しさん@お腹いっぱい。
2006/06/22(木) 09:36:23ヘボじゃない奴はcshではスクリプト書きにくいのにすぐ気がついて書かなくなるから
当然の帰結じゃないか。
0654名無しさん@お腹いっぱい。
2006/06/22(木) 09:44:09を使っているのはみたことがある。
0655名無しさん@お腹いっぱい。
2006/06/22(木) 11:57:13cshは恐くない
0656名無しさん@お腹いっぱい。
2006/06/22(木) 12:00:510657名無しさん@お腹いっぱい。
2006/06/22(木) 12:14:55cshはUNIXの汚点
0658名無しさん@お腹いっぱい。
2006/06/22(木) 12:47:42それはチューリングマシンでCGIを書くことに匹敵するほど実りの無いこと。
0659名無しさん@お腹いっぱい。
2006/06/22(木) 15:19:23Solarisからむなら普通ksh
0660名無しさん@お腹いっぱい。
2006/06/22(木) 15:21:57>>650
ただし、「kshの同じバージョン」はSolaris以外では用意できないと思われ。
Linuxにあるksh(pdkshじゃなくてkshだよ)は、Solarisのkshとは
結構動作が違う。
0661名無しさん@お腹いっぱい。
2006/06/23(金) 22:15:00いまの下請けはLinux で開発すんの?
0662名無しさん@お腹いっぱい。
2006/06/23(金) 22:26:580663名無しさん@お腹いっぱい。
2006/06/23(金) 23:08:390664名無しさん@お腹いっぱい。
2006/06/28(水) 17:24:430665名無しさん@お腹いっぱい。
2006/06/28(水) 17:32:070666名無しさん@お腹いっぱい。
2006/06/28(水) 17:43:33できました. でも質問が間違ってました. 改めて
2行以上連続する空行は1行に縮め,
1行だけの空行はその行を削除するにはどうすればいいですか?
0667名無しさん@お腹いっぱい。
2006/06/28(水) 18:03:340668名無しさん@お腹いっぱい。
2006/06/28(水) 19:35:200669名無しさん@お腹いっぱい。
2006/06/29(木) 21:00:43sed -e "N; s/\n$//; /^$/{N; /^\n$/D;};"
0670名無しさん@お腹いっぱい。
2006/06/29(木) 23:09:01アドレスの一部、"thumb” を "src" に。数字の最後の ”s”を除去
あとバナー除去のために、"thumb” を含まないアドレスを削除しようと考えています
http://xxx/thumb/1585427411s.jpg から
http://xxx/src/1585427411.jpg に
http://xxx/ad/bar_1.jpg ←バナー画像
/bin/sh
sed 's/thumb\/(\d+)s/src\/$1/'
で置換はできたと思ったのですがうまくいきません。
sed 's/thumb/src/' のように単純な置換だとうまくいきます
バナー画像に関しては行の削除がわかりません
文法間違えてたりしますか?アドバイスお願いします
OSXのAutomatorでやってます
0671名無しさん@お腹いっぱい。
2006/06/29(木) 23:15:490672名無しさん@お腹いっぱい。
2006/06/29(木) 23:20:480673名無しさん@お腹いっぱい。
2006/06/29(木) 23:23:33-----------
cd /root/work
if [ -f abc* ]; then
処理1
else
処理2
fi
-----------
こんな感じのやつ。
でも、こんなワイルドカードの使い方ってだめなんでしょ?
0674名無しさん@お腹いっぱい。
2006/06/29(木) 23:38:52ちょっとしかないなら
if ls abc* >/dev/null 2>&1; then
でどう?
マッチするファイルが何万個もある可能性のある状況で
正しく動くのを作るのはちと複雑かも
0675名無しさん@お腹いっぱい。
2006/06/29(木) 23:38:58綺麗に置換できました。ありがとお
0676名無しさん@お腹いっぱい。
2006/06/29(木) 23:40:11うちのFreeBSD 4.11-RELEASEの/usr/bin/sedだとうまく動かん。
あわててcygwinのGNU sedで試したら動いた。
こんなのうちだけか?
sedの何かって環境依存なのかな???(ファイル末のNの振る舞いとかか?)
ちなみに上の「動かん」ってのをkwsk書くと:
・入力が1行のみの時、それが空行かどうか関係なく、出力が全く空。(wcに渡すと0バイト)。
・ファイル末に連続する空行があった時、それに対応して出力されるべき1行の空行がでない。
(つまり出力の最後は空でない行になっている)
0678名無しさん@お腹いっぱい。
2006/06/29(木) 23:58:100679名無しさん@お腹いっぱい。
2006/06/30(金) 15:52:08BSDのsedとGNUのsedとは当然違います。
前者は古きよきBSDの雰囲気を留めているが、後者は独自に機能拡張してる。
0680名無しさん@お腹いっぱい。
2006/07/01(土) 15:44:05何をもって独自と断定するかは難しいが。
0681名無しさん@お腹いっぱい。
2006/07/06(木) 12:02:41これを実現するLinuxのシェルスクリプトはどう記述したらいいですか?
それと
travel2006GW0001.jpg
travel2006GW0002.jpg
・
・
・
のようにtxtに打ち出すのもお願いします
0682名無しさん@お腹いっぱい。
2006/07/06(木) 12:15:49mv DSCN0002.jpg travel2006GW0002.jpg
〜(以下同様に9999まで)
echo travel2006GW0001.jpg >foo.txt
echo travel2006GW0002.jpg >>foo.txt
〜(以下同様に9999まで)
2以降は'>>'なのに注意せよ。
0683名無しさん@お腹いっぱい。
2006/07/06(木) 12:22:400684名無しさん@お腹いっぱい。
2006/07/06(木) 12:26:59rename DSCN travel2006GW DSCN*
0685名無しさん@お腹いっぱい。
2006/07/06(木) 12:34:15マジレスするよ。
Linuxのシェルということはbashでいいんだよね。
だったら↓
#!/bin/bash
rm -f list.txt
for ((n=1; n<=9999; n++)) {
nnnn=`printf %04d $n`
mv DSCN$nnnn.jpg travel2006GW$nnnn.jpg
echo travel2006GW$nnnn.jpg >> list.txt
}
0686名無しさん@お腹いっぱい。
2006/07/06(木) 12:50:270687名無しさん@お腹いっぱい。
2006/07/06(木) 13:30:19こういうのを自動生成しちゃって実行する方が
楽なときもあるな。
実際に何が行なわれてるかわかりやすいし。
0688名無しさん@お腹いっぱい。
2006/07/06(木) 13:33:29その自動生成スクリプトも >>685 をちょっと改造すればできる
0689名無しさん@お腹いっぱい。
2006/07/06(木) 13:42:15あーそういうのよくやる。俺の場合だと
awk 'END{for(i=1;i<=9999;i++){printf "mv DSCN%04d.jpg travel2006GW%04d.jpg\n",i, i}}' /dev/null|less
とかやって確認してから
awk 'END{for(i=1;i<=9999;i++){printf "mv DSCN%04d.jpg travel2006GW%04d.jpg\n",i, i}}' /dev/null|sh
だな。mvの起動回数とか考えると何回も使うものならperlか何かでちゃんと書くけど、
1回限りのワンライナーだと確認しながらやれるのでこの方が安心できる。
0690名無しさん@お腹いっぱい。
2006/07/06(木) 13:44:31list.txtはわざわざスクリプトで作らなくても、名前の付け替えがすんだら
lsの出力をファイルに書き出せばいいだけじゃないか。
0691名無しさん@お腹いっぱい。
2006/07/06(木) 13:49:13http://pc8.2ch.net/test/read.cgi/tech/1112553783/299-301
> もう用済みじゃぼけぇwww
だそうですよ。
0692名無しさん@お腹いっぱい。
2006/07/06(木) 13:50:06いつも直前にcdしてたんだけど不便で
0693名無しさん@お腹いっぱい。
2006/07/06(木) 13:53:33↓みたいなラッパーを、wgetという名前のスクリプトで書いて
先にPATHが通った ~/binにでも入れとけば?
#!/bin/sh
cd hoge
wget "$@"
0694名無しさん@お腹いっぱい。
2006/07/06(木) 13:55:220695名無しさん@お腹いっぱい。
2006/07/06(木) 13:57:19釣り?
0696名無しさん@お腹いっぱい。
2006/07/06(木) 13:58:30マラマラご冗談を
0697名無しさん@お腹いっぱい。
2006/07/06(木) 14:03:29dir_prefix = STRING
Top of directory tree--the same as `-P STRING'.
0698名無しさん@お腹いっぱい。
2006/07/06(木) 14:41:04ありがとう
0699名無しさん@お腹いっぱい。
2006/07/07(金) 22:32:59http://www.rhythm-cafe.com/shell/GrammerMenu.aspx
ここを参考にしながら
#!/bin/sh
wget http://dynupdate.no-ip.com/ip.php
ip='cat ip.php'
old_ip='cat oldip'
if [$old_ip!=$ip]; then
wget http://dynupdate.no-ip.com/update.php?username=MailAddress&pass=PassWord&host=HostName&ip=$ip
fi
mv ip.php old-ip
#sh -x ./ddns.sh
+ cat ip.php
+ ip=203.138.29.123
+ cat oldip
+ old_ip=203.138.29.58
+ [203.138.29.58!=203.138.29.123]
[203.138.29.58!=203.138.29.123]: not found
なんてエラーがでてしまいます
OSはNetBSD3.0です
恐ろしく基礎的な質問で申し訳ありませんが宜しくお願いします
0700名無しさん@お腹いっぱい。
2006/07/08(土) 00:22:45↓
if [ $old_ip != $ip ]; then
[ はただのコマンド名なので特別扱いはされません。
cat fooをcatfooと書いたらだめなのと同じ理由でだめです。
0702名無しさん@お腹いっぱい。
2006/07/08(土) 15:15:05touch $i
end
とか
for i in 1 2 3 4 5 6 7 8 9;do
touch $
done
みたいな感じで、ファイルを名前を問わず
沢山作るにはどうすれば良いのでしょうか?
0703名無しさん@お腹いっぱい。
2006/07/08(土) 15:36:000704名無しさん@お腹いっぱい。
2006/07/08(土) 15:39:480705名無しさん@お腹いっぱい。
2006/07/08(土) 15:40:30sh: seq: command not found
0706名無しさん@お腹いっぱい。
2006/07/08(土) 16:54:270707名無しさん@お腹いっぱい。
2006/07/08(土) 17:55:570708名無しさん@お腹いっぱい。
2006/07/09(日) 02:42:09yes '' | head -10000 | cat -nでなんとかなるが
0709名無しさん@お腹いっぱい。
2006/07/09(日) 10:49:200710名無しさん@お腹いっぱい。
2006/07/09(日) 11:23:32csh -cf 'repeat 100 echo'
0711名無しさん@お腹いっぱい。
2006/07/09(日) 14:06:00して seq を作る。
# もちろん冗談
0712名無しさん@お腹いっぱい。
2006/07/09(日) 17:28:55zshが入っているだろ。
0713名無しさん@お腹いっぱい。
2006/07/09(日) 18:50:08aaa.txt の中身が
------------------
${vvv}
------------------
という記述のときに
#!/bin/sh
vvv="VVVVV"
cat aaa.txt
とした場合
------------------
${vvv}
------------------
ファイルに書いてある内容がそのまんま表示される、これを
------------------
VVVVV
------------------
としたいのです。
要は↓と同じことをもっと簡単に出来る方法はあるかということなのですが
#!/bin/sh
vvv="VVVVV"
v_sed=`sed \'s/\${vvv}/\'\${vvv}\'/g\' aaa.txt`
## sed 's/${vvv}/'VVVVV'/g' aaa.txt
eval ${v_sed}
0714名無しさん@お腹いっぱい。
2006/07/09(日) 19:27:16変数展開だけをファイルオープン前に済ませたいのか。
難しいね。shを自作しないといけないかも。
0715名無しさん@お腹いっぱい。
2006/07/09(日) 20:01:020716名無しさん@お腹いっぱい。
2006/07/09(日) 23:42:560717名無しさん@お腹いっぱい。
2006/07/10(月) 06:54:080718名無しさん@お腹いっぱい。
2006/07/10(月) 08:11:540719名無しさん@お腹いっぱい。
2006/07/10(月) 08:59:360720713
2006/07/10(月) 09:11:44ありがとうございます
やりたい事が出来ました。
0721名無しさん@お腹いっぱい。
2006/07/10(月) 12:54:40あまりに危険すぎるよ...
0722名無しさん@お腹いっぱい。
2006/07/10(月) 13:07:200723名無しさん@お腹いっぱい。
2006/07/10(月) 22:12:57イメージとしては login 時の Passwd: のような感じです。
以下のようなスクリプトを書きたいのですが、人に説明しながらスクリプトを
実行したい場合、パスワードが見えてしまうのでなんとかしたいです。
(さっと思いついた例なので誤字文法ミスは見逃してください)
#!/bin/sh
echo "user: "; read user
echo "passwd: "; read passwd
expect -c "
expect \"login: \"
send \"$user\r\"
expect \"passwd: \"
send \"$passwd\r\"
"
0724名無しさん@お腹いっぱい。
2006/07/10(月) 22:15:42stty -echo
read passwd
stty echo
0725名無しさん@お腹いっぱい。
2006/07/10(月) 22:41:59無知は損ですね。ものすごく助かりました。
man sttyで-echoの意味を調べたところ、
echo (-echo)
Echo back (do not echo back) every character typed.
ということで、そのままecho backさせないということのようです。
ありがとうございました。
0726名無しさん@お腹いっぱい。
2006/07/11(火) 01:02:22read -s
たぶん bash 専用オプションだが。
0727名無しさん@お腹いっぱい。
2006/07/11(火) 21:59:23デフォルト値を表示させておく事ってできるでしょうか?
例えば
入力しろやゴルァ>hogehoge■
としておいて、
ユーザがhogehogeの部分を編集できるようにしたいのですが。
シェルはshかcshかkshが使えるようです。
0728名無しさん@お腹いっぱい。
2006/07/11(火) 23:02:11使えりゃいいのかな。
0729727
2006/07/11(火) 23:46:111.Cでの開発は無理そうだ
2.多分readlineやlibeditは入っていないし、入れることはできないだろう
ユーザから入力を求める際に、あらかじめ入力バッファ(?)に
文字を入れておくこととかできないのだろうか。
0730名無しさん@お腹いっぱい。
2006/07/11(火) 23:54:17入力しろやゴルァ [hogehoge]>■
これが気に入らないなら頑張ってくれ。
0731727
2006/07/12(水) 06:07:57頑張り方が分からない。
0732名無しさん@お腹いっぱい。
2006/07/12(水) 08:05:53みつからないね。もうCかperlかなんかでそういうコマンド用意する
しかないような気がしてきた。
perlだとこう。
use strict;
use Term::ReadLine;
my($prompt, $preput) = @ARGV;
my $term = Term::ReadLine->new('hoge');
my $s = $term->readline($prompt, $preput);
print $s, "\n";
使い方:
x=`perl readline.pl '入力しろやゴルァ>' 'hogehoge'`
しかしこのスレでperlのような飛び道具を使うのは気が引ける...
0733名無しさん@お腹いっぱい。
2006/07/12(水) 08:32:460734名無しさん@お腹いっぱい。
2006/07/12(水) 09:26:46言語の学習は手間暇かかるんだよね。時間も。できればシェルスクリプトで
済ませたい。
あー、俺がもっと頭良ければ、新しい言語ぐらいすぐに覚えるのに。
0735名無しさん@お腹いっぱい。
2006/07/12(水) 09:32:02おぼえるよりよっぽど頭使うと思う。
0736名無しさん@お腹いっぱい。
2006/07/12(水) 10:32:280737727
2006/07/12(水) 23:10:42dくす
だが、perlは入ってないようだ。
仕方がないから、sttyでrawモードにして、
一文字ずつキー入力を取得して編集できるようにした。shだけで。
お客に言われたとき、早いうちに「出来ねぇ」と言っておけば良かったorz...
0738名無しさん@お腹いっぱい。
2006/07/13(木) 06:30:08ターミナル上からならpwdに繋げてなんとかなるんだけど
nautilusやrox、konquerorから実行するとそうもいかない。
$0は相対バスしか返さないし。
ちょっとしたGUIインストーラみたいのを作ってみたいんだけども
0739名無しさん@お腹いっぱい。
2006/07/13(木) 08:19:27無理。
http://www.nurs.or.jp/~asada/FAQ/UNIX/section4.4.html
0740名無しさん@お腹いっぱい。
2006/07/13(木) 08:34:47どうもです。
結局ps p (PID) |sed 's/.* //g'を中で実行してなんとかしました。
0741名無しさん@お腹いっぱい。
2006/07/13(木) 08:57:14それでも第0引き数いじられたら無理じゃない?
0742名無しさん@お腹いっぱい。
2006/07/13(木) 10:19:23嘘を言わないように。
インタープリターがスクリプトファイルを「オープン」して「リード」する必要があるので
スクリプトファイルのファイル名は必ず渡る。
ファイル名をスクリプトに渡す方法はインタープリター依存。
sh,cshなら$0。相対パスだったらカレントディレクトリを補ってやればよい。
0743名無しさん@お腹いっぱい。
2006/07/13(木) 12:13:100744名無しさん@お腹いっぱい。
2006/07/13(木) 12:17:150745名無しさん@お腹いっぱい。
2006/07/13(木) 20:41:28労多くして易少なかった。
0746名無しさん@お腹いっぱい。
2006/07/13(木) 23:51:56でも、そこにある。
0747名無しさん@お腹いっぱい。
2006/07/14(金) 01:19:29どんな環境で使っても
確実にファイルのmtimeを
英数字のみのフォーマットで取得するには
どうしたらベストでしょうか?
ls よりもそれに適したコマンドってあります?
0748名無しさん@お腹いっぱい。
2006/07/14(金) 01:23:320749名無しさん@お腹いっぱい。
2006/07/14(金) 01:31:50env LC_ALL=C ls
0750名無しさん@お腹いっぱい。
2006/07/14(金) 05:58:37そういうことをするには stat が便利なんだが
ポータビリティーを重視しているみたいだから
locale を固定した ls (>>749) をお勧めしておく。
0751名無しさん@お腹いっぱい。
2006/07/14(金) 07:43:16古いOSだと LC_ALLが使えないのがある。
LANG=C LC_TIME=C の方がよりポータブル。
0752名無しさん@お腹いっぱい。
2006/07/14(金) 09:43:54env - PATH=$PATH ls のほうがポータブル
0753名無しさん@お腹いっぱい。
2006/07/14(金) 09:56:45unset LANG LC_TIME LC_ALL; ls
でいいじゃん。
0754名無しさん@お腹いっぱい。
2006/07/14(金) 10:25:340755名無しさん@お腹いっぱい。
2006/07/14(金) 10:26:45サブシェルも知らんのか。
(unset LANG LC_TIME LC_ALL; ls)
0756名無しさん@お腹いっぱい。
2006/07/14(金) 10:36:15当然知っている。知らなかったのは>>753
0757名無しさん@お腹いっぱい。
2006/07/14(金) 10:41:21当然知ってる割には反応が遅かったな。
>>755 見てから「サブシェル」でググったのかい?
>>753 だってサブシェルは知ってると思われ。
当たり前のことは必要なければ省略するから。
たとえば、unset LANG LC_TIME LC_ALL; ls だけの1行で
シェルスクリプトが終るなら、実行後には影響出ないし。
0758名無しさん@お腹いっぱい。
2006/07/14(金) 10:57:05はいはい、後付の言い訳惨め。
0759名無しさん@お腹いっぱい。
2006/07/14(金) 11:01:11後付の言い訳は >>756 = >>754
0760名無しさん@お腹いっぱい。
2006/07/14(金) 11:10:030761名無しさん@お腹いっぱい。
2006/07/14(金) 11:26:131行シェルスクリプトなら、あとexec付けた方がいい。
↓
unset LANG LC_TIME LC_ALL; exec ls -l
0762名無しさん@お腹いっぱい。
2006/07/14(金) 17:18:12必死だな、落第男。www
0763名無しさん@お腹いっぱい。
2006/07/14(金) 19:16:580764名無しさん@お腹いっぱい。
2006/07/14(金) 19:52:00秒単位がわからないとかいう問題の方が大きいな。
ls -l --full-time や ls -T はポータブルじゃないし。
0765名無しさん@お腹いっぱい。
2006/07/14(金) 20:05:01diff -c /dev/null /path/to/file | sed -n 2p
0766名無しさん@お腹いっぱい。
2006/07/14(金) 20:10:25残念だな。テキストファイルだとそれでいいが、
/path/to/file がバイナリファイルだと、diffが拒否するんだよ。
0767名無しさん@お腹いっぱい。
2006/07/14(金) 20:28:30↓
case `uname -s` in
Linux) ls -l --full-time;;
*BSD) ls -T;;
SunOS) ls -e;;
esac
--full-timeの場合は LANG=ja_JP.eucJPでも関係ないみたい。
0768名無しさん@お腹いっぱい。
2006/07/14(金) 20:32:140769名無しさん@お腹いっぱい。
2006/07/14(金) 20:36:30diff -ca にしても問題が4つある。
(1) diff -a オプション自体がポータブルじゃない
(2) 対象ファイルがディレクトリ自体だと動作しない
(3) 対象ファイルが自分のパーミッションで読めないと動作しない
(4) 対象ファイルの中身を読み出してしまうので atimeが変わってしまう
0770名無しさん@お腹いっぱい。
2006/07/14(金) 21:37:280771名無しさん@お腹いっぱい。
2006/07/19(水) 22:02:53bash で↓こんな関数を作ったのですが、
Cygwin なのでディレクトリ名にスペースが入って
select のところがうまくいかなくなってしまいます。
いい書き方はないでしょうか?
function addbm() {
pwd >> ~/.dirbookmark
}
function bm() {
select dir in `cat ~/.dirbookmark`
do
cd $dir
break
done
}
0772名無しさん@お腹いっぱい。
2006/07/19(水) 22:06:25ダブルクォートしる!
"`cat ~/.dirbookmark`"
bashなら catは省略できて、
↓でも桶。
"`< ~/.dirbookmark`"
0773名無しさん@お腹いっぱい。
2006/07/19(水) 22:09:25ダブルクォートだとファイル中の複数行が全部つながって解釈されるだろ。
↓が正解。IFSのあとにシングルクォートした改行コードね。
IFS='
'
0775名無しさん@お腹いっぱい。
2006/07/21(金) 22:14:31と最近言えなくて少し寂しい。
0776名無しさん@お腹いっぱい。
2006/07/21(金) 22:33:070777名無しさん@お腹いっぱい。
2006/07/21(金) 22:49:322. 出力にはファイル名:行番号がついてほしい
3. ハイフンで始まる引数はすべてgrepに渡される
の条件を満たすスクリプトが欲しいんですが、
簡単に作ることは可能でしょうか?
0778名無しさん@お腹いっぱい。
2006/07/21(金) 23:01:222の、 出力にファイル名:行番号を付ける処理がちょっと面倒だけど、
「可能か?」という質問なら「可能」
0779名無しさん@お腹いっぱい。
2006/07/21(金) 23:25:45テストとかは自分でやってくれ。
#! /bin/sh
while [ $# -gt 0 ] ; do
case "$1" in
-*)
opt="$opt $1"
shift
;;
*)
break
;;
esac
done
nkf -e $* | grep -n -H $opt
0780名無しさん@お腹いっぱい。
2006/07/21(金) 23:32:11-n とか -H を grep につけた意味が無いな。
>>778 の面倒ってそういう事か。
確かにできなくはないけど >>779 に
2、3 行足すくらいじゃ出来そうもないな。
0781名無しさん@お腹いっぱい。
2006/07/21(金) 23:32:51それだと grepが標準入力から読んじゃうから、
ファイル名の表示ができない。
それでいいなら問題ないし、もっと簡単に書ける。
>>778 が言うように、ファイル名:行番号を付ける処理のところが面倒。
0782名無しさん@お腹いっぱい。
2006/07/22(土) 00:11:300783名無しさん@お腹いっぱい。
2006/07/22(土) 00:15:17case "$i" in
-*) arg="$arg $i";;
*) files="$files $i";;
esac
for f in $files; do
nkf -e $f | grep -Hn $args
done
ちゃんと動くかどうかは知らね。
0784名無しさん@お腹いっぱい。
2006/07/22(土) 00:16:360785名無しさん@お腹いっぱい。
2006/07/22(土) 00:20:55- nkf -e $f | grep -Hn $args
+ nkf -e $f | grep -n $arg | sed "s;^;$f:;"
0786名無しさん@お腹いっぱい。
2006/07/22(土) 05:08:000787名無しさん@お腹いっぱい。
2006/07/22(土) 08:14:19内部コマンドの getoptsの方がモアベター。
0788777
2006/07/22(土) 10:04:37↓こんな感じになりました。
これだとまだ
・grep の「-e パターン」という指定方法ができない
・スペースを含むファイル名を正しく扱えない
という問題がありますが。
getopt を使えば解決できますかね?
#!/bin/sh
for i in "$@"; do
case "$i" in
-*) arg="$arg $i";;
*) if [ "$pattern" = "" ]; then
pattern="$i"
else
files="$files $i"
fi
;;
esac
done
#echo "pattern="$pattern
#echo "files="$files
#echo "arg="$arg
for f in $files; do
nkf -e "$f" | grep -n $arg "$pattern" | sed "s;^;$f:;"
done
0789名無しさん@お腹いっぱい。
2006/07/22(土) 14:19:04それだけ愛に飢えているのか?
0790名無しさん@お腹いっぱい。
2006/07/22(土) 15:03:150791名無しさん@お腹いっぱい。
2006/07/22(土) 19:01:410792名無しさん@お腹いっぱい。
2006/07/23(日) 01:12:30季節の話題、今日の暦、今日は何の日
をプレーンテキストで取り出してメールで送るようにしたいんですが
どうすればいいでしょう。
w3mかcurlでページを取得してsedを使って必要な分を取り出してmailで送るのをcronすれば
いいんですよね
0793名無しさん@お腹いっぱい。
2006/07/23(日) 01:26:070794名無しさん@お腹いっぱい。
2006/07/23(日) 09:50:43漏れだったら、perlで全部処理するけどな。LWPモジュール+Socketモジュール+cron
0795名無しさん@お腹いっぱい。
2006/07/23(日) 10:19:060796名無しさん@お腹いっぱい。
2006/07/23(日) 10:46:560797名無しさん@お腹いっぱい。
2006/07/23(日) 12:34:510798名無しさん@お腹いっぱい。
2006/07/23(日) 12:43:070799名無しさん@お腹いっぱい。
2006/07/23(日) 12:47:140800名無しさん@お腹いっぱい。
2006/07/23(日) 12:47:38perlしか知らない厨が不安になって自己弁明するために「俺ならperlでやる」みたいな
カキコするのいいかげんやめれ。
0801名無しさん@お腹いっぱい。
2006/07/23(日) 12:50:570802名無しさん@お腹いっぱい。
2006/07/23(日) 12:53:040803名無しさん@お腹いっぱい。
2006/07/23(日) 13:04:11「お前にはシェルではできない」だな。
0804名無しさん@お腹いっぱい。
2006/07/23(日) 13:14:550805名無しさん@お腹いっぱい。
2006/07/23(日) 13:19:120806名無しさん@お腹いっぱい。
2006/07/23(日) 13:22:570807名無しさん@お腹いっぱい。
2006/07/23(日) 13:24:31>>795 に書いてあるのが見えないのか?
>>806
誰もageてないわけだが…?
0808名無しさん@お腹いっぱい。
2006/07/23(日) 13:37:020809名無しさん@お腹いっぱい。
2006/07/23(日) 15:22:00久しぶりに言えて良かったねw
0810名無しさん@お腹いっぱい。
2006/07/23(日) 16:11:250811名無しさん@お腹いっぱい。
2006/07/23(日) 16:34:220812名無しさん@お腹いっぱい。
2006/07/23(日) 16:42:180813名無しさん@お腹いっぱい。
2006/07/23(日) 16:56:320814名無しさん@お腹いっぱい。
2006/07/23(日) 16:57:19----------------
1 あああ
2 てすと
3 <html>
4 おちんぽ
5 あへあへ
6 ぶりぶりー</html>
7 あげあげ
8 ふとったーt
----------------
<html>〜</html> の間だけ抜き出したいんですがどうやったらええんでしょうか。
それぞれ行は可変です。
\nを削除してしまって一行にして、sedで s/.*<html>.*</html>/\1/g みたいなのとかは思いつくんですが
イマイチ美しゅうないと思うとります。
マッチする行数をゲッツ出来れば、tail&headでがっつり抜き出せそうなんですが、
行番号をゲッツする方法が分かりませぬ。
エロ胃人お願いします
0815名無しさん@お腹いっぱい。
2006/07/23(日) 17:02:54\nを削除しなくても、↓でできるよ。
sed -n '/<html>/,/<\/html>/p'
ただしこれだと<html>や</html>と同じ行のタグ外の部分も出てくるから、
あとsedの置換で<html>より左の部分と</html>より右の部分を削除すれば良い。
0816名無しさん@お腹いっぱい。
2006/07/23(日) 17:30:33ありがとおおおおお
と言うことでドブの素人の俺様が作ってみました
url='http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8'
rm temp.html
wget -nv --output-document=temp.html $url
sed -n '/今日は何の日/,/訃報/p' temp.html | sed 's/<[^>]*>//g'
今日はこれくらいで勘弁してください>>792
0817名無しさん@お腹いっぱい。
2006/07/23(日) 20:26:090818名無しさん@お腹いっぱい。
2006/07/23(日) 20:57:24# /usr/bin/printf "%.1s" $(cat file) | wc -c
わかれば教えてください。
一連、動作なんですが、特に書式指定子の.(ドット)の意味がわからないです。
0819名無しさん@お腹いっぱい。
2006/07/23(日) 23:32:36man printf
info printf
0820名無しさん@お腹いっぱい。
2006/07/23(日) 23:33:470821名無しさん@お腹いっぱい。
2006/07/23(日) 23:34:16それだとなんか英語のようなものが表示され、(END)のところでハングたので、
パソコンをリセットしてしまいました。
0822名無しさん@お腹いっぱい。
2006/07/23(日) 23:52:040823名無しさん@お腹いっぱい。
2006/07/24(月) 22:52:41ありがとうございます。
コマンド実行結果は、1 or 2 のどちらが正しいのでしょうか?
0824名無しさん@お腹いっぱい。
2006/07/25(火) 08:30:20オレの環境では、マンド実行結果は 0になる。
0825名無しさん@お腹いっぱい。
2006/07/25(火) 16:35:46私にshellを作れといわれて苦労している45才です。教えてください。
問題が、日付を手入力したときに正常な日付かどうかと、うるう年の計算
方法です。たとえば20051313はエラーですが20060220は正常ですよね。そのときに
曜日も表示したいのでやり方をすいませんがはじめから詳しく教えてください。
すいませんが、お願いします。
0826名無しさん@お腹いっぱい。
2006/07/25(火) 16:42:210827名無しさん@お腹いっぱい。
2006/07/25(火) 16:45:460828名無しさん@お腹いっぱい。
2006/07/25(火) 16:59:350829名無しさん@お腹いっぱい。
2006/07/25(火) 19:39:01シェルスクリプトで日付計算やってるのを数箇所で見て、げんなり。
どうしてもやりたいなら自前で演算するんじゃなくて、
ダミーファイルをtouchするとか、外部でPerlでもよんでほしい。
0830名無しさん@お腹いっぱい。
2006/07/25(火) 20:18:080831名無しさん@お腹いっぱい。
2006/07/25(火) 21:26:13してくれる。数字8桁はさすがに食ってくれないようだが、ちょいと/を付け足して食わせりゃ
出来上がりだ。
0832名無しさん@お腹いっぱい。
2006/07/25(火) 21:34:06↓
$ date -d 20060230
Thu Mar 2 00:00:00 JST 2006
数字8桁でもそのまま日付として食ってくれるが、
2月30日はご丁寧にも3月2日として解釈してくれる。
ま、これも、
if [ `date -d 20060230 +%Y%m%d` = 20060230 ]; then
とかでチェックすれば済むことだな。
それより、>>825 はコピペだから詳しくは答えてあげない。
めでたくリストラされてください。
あ、もし自宅が借り上げ社宅なら、リストラ前に個人契約に変更しといた方がいいよ。
リストラ後だと保証人とかの問題で部屋が借りにくくなるから。
0833名無しさん@お腹いっぱい。
2006/07/25(火) 23:30:410834名無しさん@お腹いっぱい。
2006/07/26(水) 11:13:090835名無しさん@お腹いっぱい。
2006/07/26(水) 12:02:440836名無しさん@お腹いっぱい。
2006/07/26(水) 12:19:540837名無しさん@お腹いっぱい。
2006/07/26(水) 12:25:09あと、日付の正当性チェックは閏年、大小の月で case文あたりで場合わけ判断と。
とは言っても、シェルスクリプト自体超初心者の >>825 には無理。
リストラされろ。
0838名無しさん@お腹いっぱい。
2006/07/26(水) 13:00:24>>407-413
0839名無しさん@お腹いっぱい。
2006/07/26(水) 13:02:490840名無しさん@お腹いっぱい。
2006/07/26(水) 13:23:45欲嫁。>>408 では日付の正当性チェックはできてない。曜日計算のみ。
あと、曜日計算なら >>408 よりももっと簡単にできる。
0841名無しさん@お腹いっぱい。
2006/07/26(水) 22:41:35どうしても解決したいなら、有料でもいいのだろ?
職業別電話帳見ると、街の便利屋さん(何でも屋さん)みたいなの載ってるだろ。
そこに電話して頼め。
もちろん、その便利屋さん本人はshellだのUNIXだの言っても知らないだろうが、
相手もプロだ。shellとかUNIXとかキーワードを頼りにそれ関係の詳しい人に
取り次いで問題を解決してくれる。特殊な用件だから少々高く取られるかもね。
0842名無しさん@お腹いっぱい。
2006/07/28(金) 14:25:42# valid-date - validate date, taking into account leap year rules
ttp://www.intuitive.com/wicked/showscript.cgi?007-valid-date.sh
0843名無しさん@お腹いっぱい。
2006/07/30(日) 13:16:380844名無しさん@お腹いっぱい。
2006/08/05(土) 11:51:54Grepを使った検索スクリプトについて
1) あるテキストファイル(Pattern.txt)に検索対象文字列が改行単位で入っている。
2) この文字列ひとつひとつをパターン文字として、/apl/usr配下のファイルをGrepしたい。
3) 最終的にRESULTファイルに以下のような形式に保存したい。(RDB取込用ファイルの作成)
<検索対象文字列> , <ヒットしたファイル名>
多分、Ptternファイルを一行ずつ読み込んで、Grepする処理を
ループさせるようなスクリプトになると思うんですけど・・
・
0845名無しさん@お腹いっぱい。
2006/08/05(土) 12:31:30はいはい、マルチマルチ。
0846名無しさん@お腹いっぱい。
2006/08/06(日) 00:31:32CGIやPHPでシェルスクリプトを実行するにはどうしたらできますか?
実行方法がわからないのでおしえてください。
0847名無しさん@お腹いっぱい。
2006/08/06(日) 00:45:02(1)先頭に
#!/bin/sh
のように陽にshellのmagicを書いておいて、
(2)CGIやPHPが動くときのuser id での実行許可をたてて、
(3)system()やexec()を呼ぶ。スクリプトのパスは原則フルパスで。
0848名無しさん@お腹いっぱい。
2006/08/06(日) 00:46:03ちょw
0849847
2006/08/07(月) 03:14:470850名無しさん@お腹いっぱい。
2006/08/07(月) 03:36:41(2) CGI鯖のあるプロバイダに接続
(3) 鉄定規をF5キーの箇所に置き、ハイパーオリンピックの要領で弾く
(4) 頃合いを見て80番ポートからログイン
(5) 自分のディレクトリの実行許可を書き換え
(6) /bin/shを実行
0851名無しさん@お腹いっぱい。
2006/08/07(月) 03:54:34CGIとPHPが一緒くたな時点で「ちょw」
CGIは文字通りインターフェースだから、シェルスクリプト自体を直接実行できるのをわるれるな。
0852名無しさん@お腹いっぱい。
2006/08/07(月) 09:06:470853名無しさん@お腹いっぱい。
2006/08/11(金) 23:09:46a:~
となるのに、
% a=a:~
% echo $a
a:/home/giko
となるのはなぜですか?
0854名無しさん@お腹いっぱい。
2006/08/11(金) 23:44:490855名無しさん@お腹いっぱい。
2006/08/12(土) 00:27:260856名無しさん@お腹いっぱい。
2006/08/12(土) 00:43:01NetBSD の sh と zsh でそうなりました。
0857名無しさん@お腹いっぱい。
2006/08/12(土) 00:57:13$ export a=a:~
このふたつの違いを考えてみるとわかる。
~ がコマンド引数の一部なのか、変数代入文なのか。
0858名無しさん@お腹いっぱい。
2006/08/12(土) 01:16:36どっちの echo $a の結果は同じなのですが…
0859名無しさん@お腹いっぱい。
2006/08/12(土) 01:34:160860名無しさん@お腹いっぱい。
2006/08/12(土) 01:35:050861名無しさん@お腹いっぱい。
2006/08/12(土) 16:04:100862名無しさん@お腹いっぱい。
2006/08/12(土) 16:44:30てことがしたくて変数代入のときだけ小細工してるから
0863名無しさん@お腹いっぱい。
2006/08/12(土) 19:24:24After alias substitution is performed, each word is checked to see if it begins with an unquoted ~. For tilde substitution, word
also refers to the word portion of parameter expansion (see ParameterExpansion below). If it does, then the word up to a / is
checked to see if it matches a user name in the password database (often the /etc/passwd file). If a match is found, the ~ and
the matched login name are replaced by the login directory of the matched user. If no match is found, the original text is left
unchanged. A ~ by itself, or in front of a /, is replaced by $HOME. A ~ followed by a + or - is replaced by the value of $PWD and
$OLDPWD respectively.
In addition, when expanding a variable assignment, tilde substitution is attempted when the value of the assignment begins with
a ~, and when a ~ appears after a :. The : also terminates a ~ login name.
つまり普通はワードの先頭が~のときしかtilde substitutionが行われないが、変数代入のときだけは:の後でもやる
というわけね。これはいかにも知ってないと混乱しそうな仕様だな。便利は便利なのだろうが。
0864名無しさん@お腹いっぱい。
2006/08/12(土) 22:10:32このような書き方を良く見かけるんだが、2行に分けず
1行にまとめて書いてるのは、何か技術的な理由があるの?
それとも、ただ単に行の節約とか見やすさを考慮しただけ?
0865名無しさん@お腹いっぱい。
2006/08/12(土) 22:20:560866名無しさん@お腹いっぱい。
2006/08/12(土) 22:39:34このような書き方を良く見かけるんだが、2行に分けず
1行にまとめて書いてるのは、何か技術的な理由があるの?
それとも、ただ単に行の節約とか見やすさを考慮しただけ?
0867名無しさん@お腹いっぱい。
2006/08/12(土) 22:47:220868名無しさん@お腹いっぱい。
2006/08/17(木) 16:30:16基準時点 (UTC の 1970 年 1 月 1 日 00:00:00; time(3) 参照) からの秒数
に変換するスマートなやりかた教えて
0869名無しさん@お腹いっぱい。
2006/08/17(木) 16:40:48date -u +%s -d 20060817
0870名無しさん@お腹いっぱい。
2006/08/17(木) 16:42:311155740400
0871名無しさん@お腹いっぱい。
2006/08/17(木) 16:42:49date -j -f "%Y%m%d%H%M%S" 20060817000000 +%s
0872名無しさん@お腹いっぱい。
2006/08/17(木) 16:42:50date +%s -d 20060817
0873名無しさん@お腹いっぱい。
2006/08/17(木) 17:23:45・その文法しか知らないから
・その文法をサポートしている OS でしか動かす予定がないから
・その文法をサポートしてない /bin/sh を持つ OS への嫌がらせ
のいずれか
0874名無しさん@お腹いっぱい。
2006/08/17(木) 17:28:15で、>>864 は、>>866 的な exportと代入を同時にやる bash依存文法に反対する意味をこめて
あえて1行で書いてるんだと思う。
でも、俺的には
HOGE=hoge
HAGE=hage
export HOGE HAGE
↑の書き方が好み。
0875868
2006/08/17(木) 18:07:27869,870は無理だった
871でおk FreeBSD
0876名無しさん@お腹いっぱい。
2006/08/17(木) 18:17:31export VAR=value
をbash依存文法とする根拠を述べよ。
0877名無しさん@お腹いっぱい。
2006/08/17(木) 18:34:09「bashで使えて Bourne shで使えないから」そのままやん。
先に言っとくと、*BSDのsh=ash≠Bourne shだからね。
0878名無しさん@お腹いっぱい。
2006/08/17(木) 18:37:17やれやれ。最近は export VAR=value がbash依存文法であることも知らない新参者が多いのう。
0879名無しさん@お腹いっぱい。
2006/08/17(木) 18:48:280880名無しさん@お腹いっぱい。
2006/08/17(木) 19:50:30bash依存というより、ksh依存といった方が正しい。
0881名無しさん@お腹いっぱい。
2006/08/17(木) 20:06:58立場をわきまえないと。
0882名無しさん@お腹いっぱい。
2006/08/17(木) 22:22:58"export var=value"という書き方はPOSIXシェルで有効な文法で、
bash依存の仕様と言うわけではない。
SolarisではkshはPOSIXとの互換性を使いたい場合のシェルで、
/bin/shは上記文法を受け付けず、POSIXに準拠しない。
0883名無しさん@お腹いっぱい。
2006/08/18(金) 00:24:41POSIXくらいは確認してから書こうな。テンプレにも入れてあるんだし。
0884名無しさん@お腹いっぱい。
2006/08/18(金) 00:47:04POSIXよりも、「/bin/shで使える文法かどうか」の方が重要。
0885名無しさん@お腹いっぱい。
2006/08/18(金) 01:17:060886名無しさん@お腹いっぱい。
2006/08/18(金) 02:45:19だから確実性が最優先だし、選択肢が存在すると考えること自体が間違い。
/bin/shが何者か分からなければ、bourne shellサポート範囲内かつbash拡張範囲外で書くべき。
POSIXシェルでなければならない理由が本当にあるかどうか分からないが、
もし仮に本当に必要ならば明示的に指定して使ってやればいいんだよ。
/bin/bashや/bin/xpg4/sh(Solaris)や/bin/ksh(Solaris)が存在するなら
ベンダが保証したPOSIXシェルとして使えるんだから、
何者か分からない/bin/shをおっかなびっくり使うよりマシ。
0887名無しさん@お腹いっぱい。
2006/08/18(金) 07:39:230888名無しさん@お腹いっぱい。
2006/08/18(金) 07:57:410889名無しさん@お腹いっぱい。
2006/08/18(金) 08:11:18Linux(の多くのディストロ)は標準をbashと決めているから、そういうものとして理解すればいいが、
*BSDの/bin/shはそれぞれで勝手に拡張されているし、バージョンによってコロコロ変わってたりするから、
わかりにくい。
0890名無しさん@お腹いっぱい。
2006/08/18(金) 08:14:410891名無しさん@お腹いっぱい。
2006/08/18(金) 08:31:30やはり/bin/shで何とかするのが心意気というものであろう
0892名無しさん@お腹いっぱい。
2006/08/18(金) 11:31:480893名無しさん@お腹いっぱい。
2006/08/18(金) 17:59:00でも設定出来るのになんでセミコロン入れるんだろ?
0894名無しさん@お腹いっぱい。
2006/08/18(金) 18:05:10古いシェルだと、内部コマンドに対して HOGE=hoge のような変数の指定が
うまく動作しないものがある。だから ; を入れるのが吉。
0895名無しさん@お腹いっぱい。
2006/08/18(金) 18:10:06exportという1コマンドに対してのみ一時的に HOGE=hogeという環境変数を設定する、
という動作が本来の仕様なのだから、
HOGE=hoge export HOGE (セミコロンなし)でもexportできてしまう方がバグと思われる。
(古いシェルの動作が正しい)
たとえば、
HOGE=hoge printenv HOGE
だと、printenvコマンドではhogeが表示されるが、
その後はHOGEは未設定になる動作が正しい。exportでもそうなるべきだ。
0896名無しさん@お腹いっぱい。
2006/08/19(土) 05:48:58うちは昔からこうやってるなんて言いだす傲慢さは無い。
最古参のBSDは困ったちゃん。
0897名無しさん@お腹いっぱい。
2006/08/19(土) 08:01:41LinuxはPOSIXに準拠してないよ。拠り所は GNU。
GNUの独自拡張だろうが、GNUで使えれば事実上の標準になってる。
0898名無しさん@お腹いっぱい。
2006/08/19(土) 09:03:50そういって、95年当時にLinusが事務処理にはWindowsを使っ
ていたことは公然の秘密だ。
0899名無しさん@お腹いっぱい。
2006/08/19(土) 09:18:08POSIX準拠なのはLinuxだけじゃないし、opengroupのUNIX認証を通ってないから
結局のところPOSIX準拠であることを第三者に証明できない。
優等生ってのは言い過ぎじゃないかなあ。
>>897
「GNUで使えれば」ってどういう意味よ? 説明してみて。
0900名無しさん@お腹いっぱい。
2006/08/19(土) 14:21:52UNIX認証を受けてない、メンバーにも入れてもらえない。
もしUNIX認証を受けるにしてもデストリごどになる。
linuxにUNIXを実装する事自体は容易、ほぼそのままでもいけるか。
現状はlinuxである方が有理なのでUNIX認証にはあまり興味が無い。
linuxはlinux認証を立ち上げた。
0901名無しさん@お腹いっぱい。
2006/08/20(日) 00:57:46exportが、値を何というか環境に担ぎ出して固定する
ようなイメーヅだと思えば不思議じゃない。
$ HOGE=hoge HOGE=hoge
とやった後にHOGE=hogeに設定される、
そういう効果をもともと持つコマンドがexportってこと。
0902名無しさん@お腹いっぱい。
2006/08/20(日) 03:54:31> もしUNIX認証を受けるにしてもデストリごどになる。
ほほう、UNIX認証を受けたLinuxディストリビューションが
1つでも存在するのならば知りたいものだね。興味がある。
で、「Linux認証」なるものが仮に標準たりうるとしても、
それは>>896の言う「BSDの権威」とどう違うのよ?という話。
0903名無しさん@お腹いっぱい。
2006/08/20(日) 13:15:370904名無しさん@お腹いっぱい。
2006/08/20(日) 14:05:04たぶん失敗する、なんら権威の根拠とはならないだろう。
今linuxにおける権威はRedHat、Debian、Fedora、そしてリーナスである。
一見上層に見える色々なlinux関連団体は実はなんら支配力も実効力も持っていない。
Fedoraを怒らせたらStallmanだって追放されるだろうよ。
StallmanはFedoraを抱き込んでxFree86を追放した、そういう権力構造。
>>902
その前にunixの会員になるのにいくら金積めばいいのか教えてくれ。
0905名無しさん@お腹いっぱい。
2006/08/20(日) 15:48:52追放が可能なためには、まずは所属してないと。
0906名無しさん@お腹いっぱい。
2006/08/20(日) 20:10:26UNIX認証とは違う話をしているようだけど、
「unixの会員になる」というのが何を指すのか説明して。
>>905
彼の妄想世界では可能なんだよ、きっと。
0907名無しさん@お腹いっぱい。
2006/08/21(月) 08:35:36「-行数」をデフォルトで受け付けたりやめたりとずいぶん揺れてるね。
このへんはPOSIX 1003.2-1992かPOSIX 1003.1-2001かで違うみたいだ。
0908名無しさん@お腹いっぱい。
2006/08/21(月) 09:34:220909名無しさん@お腹いっぱい。
2006/08/21(月) 15:45:35きっと美容院のことだよ。
ご紹介システムを利用すれば、1000円分のポイントもらえるよ。
0910名無しさん@お腹いっぱい。
2006/08/21(月) 16:12:59レンタル・ビデオ屋UNIXの会員になるってことじゃないかな。
0911名無しさん@お腹いっぱい。
2006/08/21(月) 16:24:16そのexportの解釈でもちょっと苦しいね。
あと、別の例だけど、
$ HOGE=hoge unset hoge
$ echo $HOGE
hoge
↑unsetされてない。
これはどう解釈する?
やっぱバグだろ。
0912911
2006/08/21(月) 16:35:48$ HOGE=hoge unset HOGE
$ echo $HOGE
hoge
この現象が起きるのはシェルの種類によるかも。
もちろん、セミコロンを入れて
$ HOGE=hoge; unset HOGE
ならちゃんと unsetされる。
何が言いたいかというと、元の話題の HOGE=hoge; export HOGE の時、
念のためセミコロンを入れろということ。
0913名無しさん@お腹いっぱい。
2006/08/21(月) 21:25:46その言い方からすると、そのウンコシェルでもexportは効くんでしょ?
0914名無しさん@お腹いっぱい。
2006/08/22(火) 13:34:42ウチの近くに本当にunixっていうレンタルやがあるぞ。
0915名無しさん@お腹いっぱい。
2006/08/22(火) 13:52:53もちろん実在することを知っているからこそ書いてる。
0916名無しさん@お腹いっぱい。
2006/08/22(火) 20:36:310917名無しさん@お腹いっぱい。
2006/08/23(水) 00:31:55標準出力に数値を出力するプログラムがあり、その値を
シェルでexitしたいんですが、マイナス値でエラー"番号が正しくありません"になります。
簡単にいうと、エラーとなるのは↓のようなものです。
#/bin/sh
EXITVALUE=-1
exit ${EXITVALUE}
これ、Linuxではうまくいくんですが、Solarisではだめなんでしょうか?
0918名無しさん@お腹いっぱい。
2006/08/23(水) 00:36:290919名無しさん@お腹いっぱい。
2006/08/23(水) 01:12:450920名無しさん@お腹いっぱい。
2006/08/23(水) 07:21:59Linuxというより、bashだと exitの値に勝手に mod 256をとった上で
符号なし8bitとみなした 0 〜 255の値になる模様。
なので、Solarisでもbashを使えば無問題。
あるいは、exit `expr \( ${EXITVALUE} + 256 \) % 256` かな。
0921名無しさん@お腹いっぱい。
2006/08/23(水) 08:04:38ありがとう。
今日環境使えたら試してみます。
0922名無しさん@お腹いっぱい。
2006/08/23(水) 08:35:250923名無しさん@お腹いっぱい。
2006/08/23(水) 09:21:27そのコマンドが返した値の-1ではなくてmod 256した値の255に変化してしまうのだが、
それでいいのかね?
0924名無しさん@お腹いっぱい。
2006/08/23(水) 09:43:03`` で受けてる。
実際には、フォーマットが決まってるから、その後awkで切り出して、
それをEXITVALUEに代入しているけど。
で、その値がマイナスだとexitで怒られます。
>>922
呼び出し側は専用のアプリで、singned charとして扱っているから大丈夫だと
思われます。
0925917
2006/08/24(木) 00:21:43今思えば質問も的を得ていないにもかかわらず、望んでいたのは
そういうレスでした。おかげでなんとかしのげました。
ありがとうございます。
他にもレスくれた人達、ありがとう!
0926名無しさん@お腹いっぱい。
2006/08/24(木) 00:29:02○ 的を射る
○ 当を得る
○ 要を得る
0927名無しさん@お腹いっぱい。
2006/08/26(土) 09:38:02Shell (as a programming language for more than trivial scripting) is dead.
シ ェ ル は 死 ん で い る
0928名無しさん@お腹いっぱい。
2006/08/26(土) 10:55:13ラリーウォールがperlの広告してる、ふう、それだけのこと
0929名無しさん@お腹いっぱい。
2006/08/26(土) 17:06:11認めてしまっている罠
0930名無しさん@お腹いっぱい。
2006/08/28(月) 10:44:12自分のメールアドレスにお知らせしてくれるリマインダーを書きたいんだけど、
どっから手を付けていいのやら。
0931名無しさん@お腹いっぱい。
2006/08/28(月) 10:50:230932名無しさん@お腹いっぱい。
2006/08/28(月) 20:59:480933名無しさん@お腹いっぱい。
2006/08/29(火) 05:35:33Google Calendar
0934名無しさん@お腹いっぱい。
2006/08/30(水) 15:21:50[1]+ Done kterm
を表示させなくするにはどうすればいいんでしょうか?
0935名無しさん@お腹いっぱい。
2006/08/30(水) 15:25:590936名無しさん@お腹いっぱい。
2006/08/30(水) 15:30:100937名無しさん@お腹いっぱい。
2006/08/30(水) 15:34:30(command &) みたいに、サブシェルを1段かましてバックグラウンドにする。
>>935 >>936 氏ね。
0939名無しさん@お腹いっぱい。
2006/08/30(水) 15:58:36bash だと、&! や、&| って無いのかな?
0940名無しさん@お腹いっぱい。
2006/08/30(水) 16:11:29disownだと、bashを含む一部のシェルのみに依存した方法になるから、
ashでも使える >>937 を尊重したい。
0941名無しさん@お腹いっぱい。
2006/08/30(水) 16:22:59disownだと、コマンド起動直後の [1] 1234 みたいなジョブ/プロセス番号の
表示までは消せない、という話しもある。
&! は zsh依存だな。
0942名無しさん@お腹いっぱい。
2006/09/01(金) 01:16:16簡単に捕まえる方法ってありますか?
hogehoge 2>&1 | less
とか打つの面倒なので、
hogehoge |& less
とcsh系のみたいな簡略系がないかなと思うんですが。cshは
あらゆるところがヘボイけど、これだけはうれしい。zsh使え?
0943名無しさん@お腹いっぱい。
2006/09/01(金) 06:47:08画面に表示するだけなら、2>&1はいらないわけだが。
0944名無しさん@お腹いっぱい。
2006/09/01(金) 08:07:00自分で答え書いてるけど、zsh使えばいいんじゃない。
ちなみに、オレは hoge 2>&1 | less と打つのが苦にならない(もう指が覚えてる)。
0945名無しさん@お腹いっぱい。
2006/09/01(金) 08:46:07マンドイってたった2文字の差じゃ‥‥
0946名無しさん@お腹いっぱい。
2006/09/01(金) 09:29:16漏れも同じ。zshでも2>&1って打ってることが多い。
これより101キーバインドと106/109キーバインドの差の方が引っかかりやすい。
0947名無しさん@お腹いっぱい。
2006/09/01(金) 10:16:31最近は英語配列キーボードが入手困難で困るなぁ。
0948名無しさん@お腹いっぱい。
2006/09/01(金) 12:33:33qはエイリアスでも関数でも、実行プログラムででも適当にこさえる。
0949名無しさん@お腹いっぱい。
2006/09/01(金) 12:37:130950名無しさん@お腹いっぱい。
2006/09/01(金) 12:52:08私は日本語キーボードを英語配列で使うと「\」が「:」の隣に来て押しやすいので
まともな英語配列キーボードより好きだったりします。どうせキートップなんて
見ないし。
0951名無しさん@お腹いっぱい。
2006/09/01(金) 13:14:520952名無しさん@お腹いっぱい。
2006/09/01(金) 14:21:55http://とかがshift押さないといけないからダメ
という理由で日本語配列を薦めてた人がいたな。
0953名無しさん@お腹いっぱい。
2006/09/01(金) 16:27:29JISキーボードを作った人はなんでわざわざずらしたんだろう。
0954名無しさん@お腹いっぱい。
2006/09/01(金) 17:16:35英語配列が変態配列なんだよ。
0955名無しさん@お腹いっぱい。
2006/09/01(金) 17:34:18カッコって"(" と ")" のことかい?
JISキーボードのShift+数字の部分は,
数字のJIS(ASCII)コード - 0x10
になるように配置されている.
気持としては 0x21 から 0x2f までの範囲のコードは
shift+<0x31 から 0x3f までのキー>
でコード化したかったのではあるまいか?
一部逆転してるけど...
このほうがハードだけでコード化するのが楽.
大昔のやつさがせば shift+0 でスペースを出力する
キーボードがあったかも知れない.
どっちかって言うと, USキーの方が不思議な並び.
タイプライターってどんな並びだったんだっけ?
0956名無しさん@お腹いっぱい。
2006/09/01(金) 19:34:23イチは小文字のエル(l)を使っていた。
0957名無しさん@お腹いっぱい。
2006/09/01(金) 19:35:500958名無しさん@お腹いっぱい。
2006/09/02(土) 22:53:37いや20年前のことはしらないが。
0959名無しさん@お腹いっぱい。
2006/09/02(土) 22:58:26売ってるとこ教えて。ちなみに近所のPC量販店では皆無。
ネット通販でも見かけない。
あと、HHKもパスでお願い。フルサイズのが欲しいので。
0960名無しさん@お腹いっぱい。
2006/09/02(土) 23:54:280961名無しさん@お腹いっぱい。
2006/09/03(日) 01:21:47ttp://www.pfu.fujitsu.com/hhkeyboard/kb_collection/index.html
漏れは昔のomnikeyが欲しい
0962名無しさん@お腹いっぱい。
2006/09/03(日) 02:43:10http://www.cvtinc.com/products/keyboards/menu.htm
0963名無しさん@お腹いっぱい。
2006/09/03(日) 09:30:06それだとS/N比が非常に悪いですが。。
>>961
HHK系はパスだとおっしゃってますが。。
0964名無しさん@お腹いっぱい。
2006/09/03(日) 09:51:540965名無しさん@お腹いっぱい。
2006/09/03(日) 09:54:04ちょっと近所の **{電気,無線,カメラ}まで行って
英語キーボード買ってくるか、と思った場合、
5-6年前なら売ってたけど、今は日本語キーしか売ってないよ。
キーボードは現物触ってからじゃないと買いにくいし、
確かに困るね。
0966名無しさん@お腹いっぱい。
2006/09/03(日) 10:11:48Keyboard キーボード 2
http://pc8.2ch.net/test/read.cgi/unix/1055904385/
0967名無しさん@お腹いっぱい。
2006/09/03(日) 10:38:530968名無しさん@お腹いっぱい。
2006/09/03(日) 12:54:220969名無しさん@お腹いっぱい。
2006/09/03(日) 18:53:050970名無しさん@お腹いっぱい。
2006/09/03(日) 19:54:260971名無しさん@お腹いっぱい。
2006/09/03(日) 19:56:57できました。どうもありがとうございました。
0972名無しさん@お腹いっぱい。
2006/09/03(日) 23:07:37「英語 キーボード 価格」
でぐぐってみ?
スレ違いゴメソ。
0973名無しさん@お腹いっぱい。
2006/09/06(水) 10:48:16scpする前に、ネットワーク上のサーバにscp可能かどうかを
確認するif文などは可能でしょうか。
この意味ではsshもscpも等価だと思うので
例えばsshをtryしてみてログイン可能だったら次にすすむ、
という感じで可能でしょうか?
0974名無しさん@お腹いっぱい。
2006/09/06(水) 10:55:11不可能。
↓はい、次の方どうぞ。
0975名無しさん@お腹いっぱい。
2006/09/06(水) 10:55:22結局scpできない可能性は残るので対策が必要。となると事前に確認する意味は
どのくらいあるか...
0976名無しさん@お腹いっぱい。
2006/09/06(水) 10:56:39実際に scp やってみて返り値見るとかじゃだめなん?
0977名無しさん@お腹いっぱい。
2006/09/06(水) 11:01:550978973
2006/09/06(水) 11:07:59#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
ssh oresa@hogehoge.com
if test -e Sites/rute/*
echo "file exists. exited the server."
else
echo "unable to login the server."
fi
>>976
それはナイスアイデアですね!
で、返り血はどうやってみるんですか??
0979名無しさん@お腹いっぱい。
2006/09/06(水) 11:10:370980名無しさん@お腹いっぱい。
2006/09/06(水) 11:22:31> で、返り血はどうやってみるんですか??
( ゚д゚)
0981名無しさん@お腹いっぱい。
2006/09/06(水) 11:27:07おそまつ
0982名無しさん@お腹いっぱい。
2006/09/06(水) 11:28:180983名無しさん@お腹いっぱい。
2006/09/06(水) 11:34:100984名無しさん@お腹いっぱい。
2006/09/07(木) 07:21:29アプリケーションプログラムもniceの影響を受けるのかな?
0985名無しさん@お腹いっぱい。
2006/09/07(木) 07:51:210986名無しさん@お腹いっぱい。
2006/09/07(木) 12:59:190987名無しさん@お腹いっぱい。
2006/09/07(木) 13:07:58シェルスクリプト総合 その7
http://pc8.2ch.net/test/read.cgi/unix/1157601611/
0988名無しさん@お腹いっぱい。
2006/09/08(金) 11:59:41niceです
0989名無しさん@お腹いっぱい。
2006/09/09(土) 00:18:050990名無しさん@お腹いっぱい。
2006/09/09(土) 00:37:420991名無しさん@お腹いっぱい。
2006/09/10(日) 20:35:410992名無しさん@お腹いっぱい。
2006/09/10(日) 22:05:230993名無しさん@お腹いっぱい。
2006/09/11(月) 09:05:060994名無しさん@お腹いっぱい。
2006/09/11(月) 10:53:550995名無しさん@お腹いっぱい。
2006/09/11(月) 11:24:110996名無しさん@お腹いっぱい。
2006/09/11(月) 11:29:500997名無しさん@お腹いっぱい。
2006/09/11(月) 15:52:020998名無しさん@お腹いっぱい。
2006/09/11(月) 16:27:530999名無しさん@お腹いっぱい。
2006/09/11(月) 16:29:261000名無しさん@お腹いっぱい。
2006/09/11(月) 16:30:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。