シェルスクリプト総合 その16
: 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 14:10:05 シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 ttp://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ ttp://heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その15 ttp://pc12.2ch.net/test/read.cgi/unix/1246408968/l50 : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 14:10:58 □関連スレ: sed ttp://pc12.2ch.net/test/read.cgi/unix/1085730992/ 正規表現 ttp://pc12.2ch.net/test/read.cgi/unix/1039165754/ おまえら! shell は何を使っているんですか? ttp://pc12.2ch.net/test/read.cgi/unix/1012330865/ Eshell の使い方とか設定とか【Emacs Shell、Lisp】 ttp://pc12.2ch.net/test/read.cgi/unix/1102921590/ □初心者向けリンク 「誰にでも」シリーズ ttp://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/dareUni/ /bin/shプログラミング入門 ttp://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/ シェルを使おう - 導入からプログラミングまで - ttp://www.netfort.gr.jp/~tomokuni/lms/shell/text/ □入門者向け書籍: プロフェショナルシェルプログラミング ttp://www.amazon.co.jp/exec/obidos/ASIN/4756116329/ 入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界 ttp://www.amazon.co.jp/exec/obidos/ASIN/4797321946/ UNIXシェルプログラミング徹底解説 ttp://www.amazon.co.jp/exec/obidos/ASIN/4822280489/ 入門Kornシェル ttp://www.amazon.co.jp/exec/obidos/ASIN/4873110149/ 入門bash ttp://www.amazon.co.jp/exec/obidos/ASIN/4900900788/ : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 14:12:03 □参考リンク: UNIXの部屋 (沢山のコマンドの簡単な紹介など) ttp://x68000.q-e-d.net/~68user/unix/ POSIX: Shell & Utilities (標準規格) ttp://www.opengroup.org/onlinepubs/009695399/utilities/contents.html □最近のシェルスクリプト本(1) (2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著) ttp://amazon.co.jp/o/ASIN/4797326522/ (2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著) ttp://amazon.co.jp/o/ASIN/4798008842/ (2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著) ttp://amazon.co.jp/o/ASIN/4822282090/ (2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著) ttp://amazon.co.jp/o/ASIN/4797327286/ (2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著) ttp://amazon.co.jp/o/ASIN/4774122610/ (2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著) ttp://amazon.co.jp/o/ASIN/4872802349/ (2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著) ttp://amazon.co.jp/o/ASIN/4797330635/ (2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著) ttp://amazon.co.jp/o/ASIN/4774123625/ : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 14:12:54 □最近のシェルスクリプト本(2) (2005/07) UNIX シェルスクリプト辞典 川井 義治 (著) ttp://amazon.co.jp/o/ASIN/4798109231/ (2005/08) シェルスクリプト ポケットリファレンス bash編 宮原 徹 (著), 川原 龍人 (著) ttp://www.amazon.co.jp/o/ASIN/4774124818/ (2005/12) 図解でわかるLinuxシェルスクリプト・正規表現 小泉 修 (著) ttp://www.amazon.co.jp/o/ASIN/4534040067/ (2006/01)詳解 シェルスクリプト アーノルド ロビンス (著), ネルソン・H.F. ベーブ(著), Arnold Robbins (原著), Nelson H.F. Beebe (原著), 日向 あおい (翻訳) ttp://www.amazon.co.jp/o/ASIN/4873112672/ (2007/3) Linuxシェルスクリプトユーザー便利帳―bash2/bash3対応 伊藤 幸夫 (著), 寒川 陽美(著) ttp://www.amazon.co.jp/o/ASIN/4798015954/ (2007/9) ゲームで極める シェルスクリプトスーパーテクニック 山森 丈範 ttp://www.amazon.co.jp/o/ASIN/4774132020/ (2007/10) UNIX/Linuxシェルスクリプトマスタリングハンドブック 野川 准子 ttp://www.amazon.co.jp/o/ASIN/4798017957/ : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 14:13:05 シェルブリットはいいからゴチックメイドはどうなったんだよ : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 14:13:36 □関連書籍と関連リンク: FreeBSD Hypertext Man Pages ttp://www.freebsd.org/cgi/man.cgi Linux JF (Japanese FAQ) Project. ttp://www.linux.or.jp/JF/ Unix Programming Frequently Asked Questions 日本語訳 ttp://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html UNIXプログラミング環境 ttp://www.amazon.co.jp/exec/obidos/ASIN/4871483517/ □人間初心者へのお願い: ・このスレはシェルスクリプトについてのスレです。 シェルの対話的な利用についての話やスクリプトと関係ないコマンドの 使い方の質問などはスレ違いなので無用に願います。 □シェルスクリプトでよく使うコマンド: 制御・条件判定系: [,test,expr,true,false,yes,getopts テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join ファイル検索系: find (スペースなどを含むファイル名を正しく処理するため、 findは -exec command {} + を推奨。 他に -print0、xargsは -0オプションという方法もあるがSolaris非対応) ディレクトリ系: basename,dirname 出力系: echo,printf 対話コマンド制御系: expect http/ftpの処理自動化: wget,curl : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 14:35:44 以下の結果を出力するシェルを,bashスクリプトで書け. (基本仕様) ・コマンドとして実行できる.(シェルコマンドである.) ・ユーザーが10000以上99999以下の5桁の数字を入力する. ・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する. ・それ以外で,13で割って2余った場合は Chuukichiと表示する. ・それ以外で,7で割って1余った場合は Shoukichiと表示する. ・それ以外の場合は Hazureと表示する. ・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する. ・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする. (ポイント) ☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く. ☆標準入力から文字列を入力するには read を用いる. ☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...) ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 15:50:45 csh じゃないんだなw シェルスクリプトの事をシェルと書くと怒る人が居るので気をつけた方が良いぜ。 ↓これをファイルに保存して、実行するとお望みのスクリプトが出力される筈だ。 #!/bin/zsh echo '#!/bin/bash while read i do case ${i} in' for i in {10000..99999}; do echo -n "${i}) "; if [ 2 -eq `echo ${i} % 13 | bc` -a 1 -eq `echo ${i} % 7 | bc` ]; then echo "echo Daikichi;;"; elif [ 2 -eq `echo ${i} % 13 | bc` ]; then echo "echo Chuukichi;;"; elif [ 1 -eq `echo ${i} % 7 | bc` ]; then echo "echo Shoukichi;;"; else echo "echo Hazure;;"; fi; done echo 'esac done' : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 17:18:45 宿題は自分でやれ。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/20(土) 17:45:49 行数が10万行近くあって、レポート用紙が何枚あっても足りません>< : 名無しさん@お腹いっぱい。 [sage] 2010/02/22(月) 01:05:10 はマルチだから。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/22(月) 16:15:20 #!/bin/bash read a if [[ "$a" -lt 10000 || "$a" -gt 99999 ]] then echo 'Error' exit fi x=$((a % 7)) case "$x" in 1) x=$((a % 13)) if [ "$x" -eq 2 ] then echo 'Daikichi' else echo 'Shoukichi' fi ;; *) x=$((a % 13)) if [ "$x" -eq 2 ] then echo 'Chuukichi' else echo 'Hazure' fi ;; esac : 名無しさん@お腹いっぱい。 [sage] 2010/02/22(月) 20:54:25 read a のところで aを入力すると、誤動作するようですが・・ : 名無しさん@お腹いっぱい。 [sage] 2010/02/22(月) 21:34:43 # read a の次にこれを追加すれば解決。 echo "$a" | grep '^[[:digit:]]....$' >/dev/null 2>&1 if [ $? -ne 0 ] then echo 'Error' exit 1 fi : 名無しさん@お腹いっぱい。 [sage] 2010/02/22(月) 21:39:42 # 失礼。09999とかの判定を忘れてた。 # grepのパターンはこっちのほうが良い。 echo "$a" | grep '^[[^0][:digit:]]....$' >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo 'Error' exit 1 fi : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 01:07:12 jkl.sh: Command not found. ワザワザbashをインスコしなきゃ、UNIXじゃ使えないじゃん。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 07:34:27 今時の「UNIX」はbashが標準で付いてるから無問題 : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 14:34:21 セツ子、それUNIXちゃう。犬糞や。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 14:52:34 いや、Linuxじゃなくて、今時のUNIXはbashが標準で付いてるという話をしてるんだが : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 15:34:49 AIXとかHP-UXってbash標準なの? : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 15:48:25 の言う今時のUNIXはやっぱLinuxなんだよな : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 16:24:16 だれもLinuxの話なんかしてないよ で、ちょっと前だとbashはLinuxのものとして叩けたけど、 今はUNIXでもbashが標準になっちゃったから、その線では叩けなくなったんだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 16:48:16 だからそのUNIXって何だよ(w ぱちょこんウニックスか? なんとかベーエスデーか? : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 19:01:47 ここで華麗に PDP7 と 7th edition が登場 : 名無しさん@お腹いっぱい。 [sage] 2010/02/23(火) 23:38:31 OS Xならついてくるが標準でbashが起動するかどうか忘れた : 名無しさん@お腹いっぱい。 [] 2010/02/24(水) 00:27:15 Tigerあたりからbashが標準。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 00:33:37 AIX 5Lまでは、kshが標準 bashはオプション 6.1は知らん : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 01:41:34 無いよ。 *BSDにも無い。 Mac OS Xは全然UNIXとは程遠い。 kernelにFreeBSDが使われてるってだけ。 Solarisでも/opt扱いだったな。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 02:27:31 >Mac OS Xは全然UNIXとは程遠い。 >kernelにFreeBSDが使われてるってだけ。 ?????? : 名無しさん@お腹いっぱい。 [] 2010/02/24(水) 02:30:29 ちょっと釣り針がでか過ぎるんじゃないか? : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 02:37:35 へえ釣りなんだw : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 04:54:25 あぁ、伝説のUNI+よ。。。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 06:55:36 おいおい、*BSDはUNIXじゃないよw あと、今のSolarisではbashは必須扱い。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 07:04:41 Solarisのbashは、/optじゃなくて、/usr/bin/bash。 しかも、symlinkじゃなくて、/usr/bin/bashにバイナリ本体がある。 SUNWbashに入ってる。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 08:20:19 ここ何のスレ? : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 09:37:59 まとめると の 「今時のUNIX」はLinuxと決定されました。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 09:41:33 LinuxはUNIXじゃないよ。*BSDもUNIXじゃないよ。 「今時のUNIX」は主にSolarisとかのこと。 Solaris10 -> bash標準 OpenSolaris -> bash必須 : 名無しさん@お腹いっぱい。 [] 2010/02/24(水) 09:50:50 > Mac OS Xは全然UNIXとは程遠い。 UNIX認証を得てるので名はUNIX。 ユーザランドはFreeBSDベースに作られたDarwinなので、実も伝統的なu**x > kernelにFreeBSDが使われてるってだけ。 kernelはMach >LinuxはUNIXじゃないよ。 分かった上で言ってるんだと思うよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 11:29:55 主にだったら他に何があるの? 主も糞もSolarisのみの話なら、今時のUNIXという 括りは間違ってるんだが : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 14:37:00 OpenSolarisもUNIXじゃないよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 16:01:46 なんとかLinuxを正当化しようと今時のUNIX なんて書いてみたものの、結局Solarisしかなくて やっぱり今時のUNIX=Linuxに戻ってしまうという循環 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 16:03:13 だから、LinuxはUNIXじゃないって、、 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 18:28:06 第7版はPDP11です、とセルフつっこみ : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 21:26:34 って、bash独自なところは一つもないじゃん。 /bin/shに変更しても「今時のUNIX」ならすべて動く。 それはそうと、 は無駄が多い記述だな、もうちょっと簡単に書ける。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 21:40:54 うちの freebsd (/bin/sh = ash) と debian (/bin/sh = dash) では動きませんでした。 まあ、どっちも今どきの UNIX じゃないけど。 # ksh で拡張された機能が必要 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 23:06:02 FreeBSDはUNIXじゃありません。 今、話をしてるのは「UNIX」だけです。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 23:33:26 OpenSolarisとか言ってるからUNIXじゃなくてもいいんだろ : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 23:36:02 おまえのいう「UNIX」の定義を述べよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/24(水) 23:53:32 UNIXかUNIXじゃないかってそんなに大事なことなの? : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 01:27:11 OS XもUNIXでつ : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 10:33:42 今時のUNIXと言い放ったバカと それを受けとめる人間には重要 : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 10:35:17 なんで重要なんだろう。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 11:07:28 そんなに疑問に思うことなの? : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 11:08:53 うん。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 14:58:09 改めて定義を聞かれて慌てているの図 : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 19:35:24 とりあえずわからないから UNIXの定義は来世紀への課題と致します : 名無しさん@お腹いっぱい。 [] 2010/02/25(木) 20:24:31 以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・コマンドラインの第1引数で数字を指定する. ・第1引数が数字以外だった場合はエラーメッセージを表示する. ・第1引数の数字以下の自然数のうち,素数をすべて見つけてリスト表示する. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンドラインの第1引数は,$1に格納されている. ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 20:28:21 オウ、デジャブー : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 21:37:45 #!/bin/sh /usr/games/primes 1 "$1" : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 22:23:21 『UNIXシェルである』という表現は有効なの? : 名無しさん@お腹いっぱい。 [sage] 2010/02/25(木) 22:46:26 前スレでマルチしてた人でしょ。 相手しちゃだめだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 06:56:02 >・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 09:20:17 その頭の悪そうな問題書く人は駆け出しの厨房? もし師と仰いでるなら、即刻師匠を変えた方が良い : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 20:51:03 # bashでやる意味のない問題だと思うが。 # 問題自体は難しくないのだが・・・ #!/bin/bash echo "$1" | grep '^[[:digit:]][[:digit:]]*$' >/dev/null 2>&1 if [[ "$?" -ne 0 || "$1" -lt 2 ]] then echo 'Error' exit 1 fi for ((i=2;i<="$1";i++)) { if [ $((i % 2)) -eq 0 ] then echo "$i" fi } : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 20:54:41 偶数を表示してどうするw >素数 : 64 [sage] 2010/02/26(金) 20:55:01 失礼、書きかけのやつをカキコしちまった。 粗相。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 20:57:40 「すべてUNIXシェル内部で処理し,..」だから、 grepも使っちゃ駄目だそうですよ : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 20:57:53 ってゆうか、微妙に長すぎてカキコめない・・・ 早い話、素数かどうかわかれば良いだけなら 判定対象の数値をそれより小さい数値全てで割り算してみればいいだけ。 ようするにループで回せばいいだけ。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 21:04:22 肝要部分だけ書くと、 ↓だろ。全然長くないよ。 #!/bin/bash for ((i = 2; i <= $1; i++)) { for ((j = 2; j < i; j++)) { if ((i % j == 0)); then continue 2 fi } echo $i } : 名無しさん@お腹いっぱい。 [] 2010/02/26(金) 21:18:53 以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・コマンドラインの第1引数で人間の手番(○側か×側か)を指定する. ・人間とコンピュータが対戦するようにする. ・3x3マスのマルバツゲームのボードを作成する. ・○側と×側が交互に2次元座標上の位置を入力する. ・入力後、毎回ボードを表示する. ・たて、よこ、斜めのいずれかに○か×が3つ並んだ時点でプログラムを終了する. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンドラインの第1引数は,$1に格納されている. ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 21:19:32 すっかり糞スレになったな : 名無しさん@お腹いっぱい。 [] 2010/02/26(金) 22:48:25 以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する. ・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする. ・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする. ・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる. ・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する. ・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密になれないバッドエンディングになるようにする. ・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する. ・ゲームの操作方法はコマンド選択式またはコマンド入力式とする. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンド選択方式のゲームにする場合、select文を使用できる。 ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 22:48:28 なったっていうか元から : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 22:55:02 おにいちゃん、寂しいこと言わないで・・・ 好感度 :-2 ストレス:+5 : 名無しさん@お腹いっぱい。 [sage] 2010/02/26(金) 23:10:47 くだらねえからもっとネタとしておもしろいお題提供してくれ : 名無しさん@お腹いっぱい。 [] 2010/02/28(日) 00:22:12 コマンドとかBシェルはいろいろ使っていましたし、使いこなせますって言ったら うちはKだしなって言われました。 個人的にはコマンドとか多少は違っていてもBシェル知っていたら、 それなりにKシェルとかでも対応できるじゃんと思っていますが いまいち違いがわからないのですが 具体的にBシェル、Cシェル、Kシェルの決定的な違いってあるのでしょうか? たとえばこれがあるからこれを採用しているとか : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 00:35:37 あなたのいうBシェルがBourne Shell (/bin/sh) のことなら、 相手の言うKシェル(Korn Shell)はそれのスーパーセットなので、 機能が増えていると思えばいい。商用のUNIXだとkshがふつーに入っている。 あなたのいうBシェルがGNUのBourne-Again Shell(bash)のことなら、 同じようにBourne Shellのスーパーセットではあるが、kshとは系列が異なる。 /bin/sh の機能の範囲では大差ない。商用だとkshが、フリーだと bashがそれの上位シェルとして使われていると思えばよい。 Linux だと /bin/sh だと思っても実体が bash だったりして知らない うちに固有の機能に依存していることがあるので気をつける。 Cシェルのことは忘れていい。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 00:39:50 ttp://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.5.html : 名無しさん@お腹いっぱい。 [] 2010/02/28(日) 01:11:10 シェルスクリプトとVBA、どちらが簡単ですか? : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 01:16:28 シェルスクリプト : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 01:43:14 シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 10:29:39 処理系の入手が有償なとこ : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 12:33:50 今時でつまつ調はキモい : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 13:17:02 3日も前の事を今時って… : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 17:10:20 bashの '-ne' は '=' ですか? : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 17:21:11 bashじゃなくても -ne と = は違います。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 17:38:23 bashで '-eq' は '==' ですよね。 '=' はどう書くんでしょう? : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 17:45:24 何を意味する = だ? : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 17:49:33 bashじゃなくても -eq と = は違います ついでに、-ne と != も違います : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 17:51:42 bashでは比較の '=' と '==' は同じ。 しかし、'='または'==' と -eq は違う。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 17:58:53 今時の「UNIX」はbashじゃなくても'=='が使えるから無問題 : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 18:25:42 で、今時の「UNIX」の定義にループ : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 18:27:07 ったく…今時の若いモンは…ブツブツ : 85,87 [sage] 2010/02/28(日) 18:30:09 混乱中... : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 18:40:42 その混乱してる行をコピペしてみろよ : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 19:45:24 rpmの.specの中で %preun if [ "$1" -eq "0" ]; then : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 19:48:38 "$1"が 0 でも 00 でも 000 でも一致するのが -eq : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 20:00:19 if [ "$1" = "0" ]; then こうすれば0のみの一致になる? : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 20:06:40 if [ x"$1" = x0 ] ; then と、xをつけたくなってしまうバッドノウハウ : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 20:10:19 kwsk : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 20:14:10 その xを付けるバッドノウハウが必要になるような "$1"の例が、 今時のUNIXシェルには存在しないんだな。 よってxを付けるバッドノウハウは不要。 : 名無しさん@お腹いっぱい。 [sage] 2010/02/28(日) 21:04:27 ash(またはdash)だと、$1 が ! のとき、[ "$1" = 0 ] でコケる。 bash/ksh/zsh だとコケない。確かにUNIXシェルならコケないな。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/09(火) 04:37:55 文字として比較するか、数値として比較するか : 名無しさん@お腹いっぱい。 [sage] 2010/03/09(火) 04:39:31 UNIXシェルと言っているが、HP-UXなんかはPOSIXだお bashに似ているが、微妙に違う罠 : 名無しさん@お腹いっぱい。 [sage] 2010/03/11(木) 23:38:01 ファイルから1レコード読み込んでそのバイト数を取得したいのですが、レコードの最後にスペースがあると上手く行きません。 echo $record | wc -c で取得できると思ったのですが、echoが末尾のスペースをカットしてしまい、上手く行かず… どんな工夫で解決できるでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/03/11(木) 23:46:46 $record に格納する時点でスペースが落ちてるんじゃないの。 $record にはどうやってデータ格納してるの? : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 06:46:57 まだテスト段階で、本格的なコーディングはしていないのですが、 record=`head -1 ファイルパス` echo "${record}@" …ここではスペースが入っているのを確認 echo ${#record} …スペース込みの文字数が出力されるのを確認 echo $record | wc -c …バイト数が足りず ということで、パイプする前のechoでスペースが落ちてるんじゃないかと… : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 06:59:52 なんで " を使ったり使わなかったりするのかに興味あるわ : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 18:33:15 で、今度は echo "$record" | wc -c …バイト数が1個多い、、 、、と言うと予想。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 21:01:22 sh-3.2$ bar="space " sh-3.2$ /bin/echo -n ${bar} | wc -c 5 sh-3.2$ /bin/echo -n "${bar}" | wc -c 6 : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 21:07:44 $ bar="space " $ /bin/echo -n "${bar}" | wc -c 10 ??? : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 21:21:03 > -n オプション(出力後改行しない)を持たないecho実装だとそうなる。 - n 空白 s p a c e 空白 改行 : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 21:30:41 知ってるよ。だから じゃ不完全だって指摘してるんだろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 21:35:42 そういうのってストレートに性格が出るよな。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/12(金) 21:42:52 $ bar="-n" $ /bin/echo -n "$bar" | wc -c 0 : 名無しさん@お腹いっぱい。 [sage] 2010/03/13(土) 10:29:32 echo ${#record} で目的の結果が得られているのに、 なぜ echo -n "$record" | wc -c とかわざわざ外部コマンドでやろうとするの? (ダブルクォートと -n は付けておいたよ) : 名無しさん@お腹いっぱい。 [sage] 2010/03/13(土) 14:53:17 まず service httpd configtest して syntax OK が出た場合のみ service httpd graceful を実行する という処理を一行で可能でしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/03/13(土) 15:02:21 一行で可能です : 名無しさん@お腹いっぱい。 [sage] 2010/03/13(土) 16:09:53 わかってくださいよ : 名無しさん@お腹いっぱい。 [sage] 2010/03/13(土) 16:22:25 わかりました。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/13(土) 16:26:00 ありがとうございます。 今環境がないので、今度客先に行った時に試してみます。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/15(月) 01:02:16 環境変数に配列の宣言文を入れておいて、子シェルで配列を使いたいんですけど、上手くいきません。 export HOGE="(A B C D)" hoge=${HOGE} export HOGE=(A B C D) hoge=${HOGE} の両方試してみたのですが、どちらもhogeには文字列ががが 要素が10個近くあるので、それぞれ別の変数に入れて渡すとごちゃごちゃしそうで… なにか良い方法はないですかね? : 名無しさん@お腹いっぱい。 [sage] 2010/03/15(月) 02:39:42 bash なら hoge=("${HOGE[@]}") これでどうでしょうか。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/15(月) 04:23:21 ががが : 名無しさん@お腹いっぱい。 [] 2010/03/15(月) 07:03:40 export HOGE="(A B C D)" (子プロセスで) eval hoge=${HOGE} 同じシェルだとうまく行くが、 配列はexportできないので、 それでは駄目。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/15(月) 17:36:54 function grepall(){ find . -name "*" -exec grep $1 {} /dev/null \; } findとexecを毎回打つのがめんどいんで こんなのを書いたんですが grepall "int main"とかやると "int main"を含む行じゃなくて intかmainを含む行が出力されてしまうんですが そうならないようにできたりしますか? : 名無しさん@お腹いっぱい。 [sage] 2010/03/15(月) 17:41:53 function grepall(){ find . -exec grep "$1" {} /dev/null \;;} か? つーか GNU grep の -r 使えばいいんじゃね。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/15(月) 17:48:22 おお、どちらでもいけますた!ありがとう : 名無しさん@お腹いっぱい。 [sage] 2010/03/17(水) 22:16:20 cat ${file} |while read line do echo "${line},1" done でファイルの中身をグルグル回すシェルを作りたいのですが、ファイルの改行コードが落ちてしまうのはどうにかならないでしょうか? 読み込むファイルがCRLFなので、LEだけ落ちてCRだけ残るというなんとも半端なことに… どうせならCRもまとめてなくなるか、CRLFのまま残るかして欲しいんですが… : 名無しさん@お腹いっぱい。 [sage] 2010/03/17(水) 22:36:30 echo "${line},1" ってやってるなら、行末に ",1" が付くわけだけど、 ${line}に ^M が含まれてるなら、"...^M,1" ってなるわな。 それ、LFが落ちてるわけじゃないよ。 : 名無しさん@お腹いっぱい。 [] 2010/03/17(水) 22:37:25 cat file | tr -d '\r' | while : 名無しさん@お腹いっぱい。 [] 2010/03/18(木) 01:33:45 dos2unixコマンド使えば? : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 07:19:29 そんな、baseにない非標準コマンド使われてもねぇ : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 07:38:43 しかし、Windowsに持ってきてエディタで開いたり、バイナリエディタで見てもCRだけ残っているのですが… やはりそういう形になりますかね…試してみます。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 08:21:57 おまえ、 の言ってる意味わかってないな。 CR+LFのLFが落ちてCRだけ残ったのではなく、 もともとCRが普通の文字とみなされて、 その後に「,1」が追加されただけのことで、 LFが落ちたわけではないんだと言ってるんだけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 08:23:16 シェルって言ってるクズを相手にすんなよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 08:24:35 tr とか dos2unix(笑)とかの外部コマンドを使うより、 IFS= の中に ^M を入れておくと readの際に自動的に CR を落してくれる。 これが最適解。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 17:02:54 デフォルトのIFSって何だっけ? : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 17:08:36 スペース・タブ・LF : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 17:32:38 IFSって? : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 17:45:17 International FreeBSD School : 名無しさん@お腹いっぱい。 [sage] 2010/03/18(木) 17:51:24 OK, 願書もらってくる! bakanisareta... orz : 名無しさん@お腹いっぱい。 [sage] 2010/03/21(日) 14:17:59 BシェルもKシェルも大して変わらんよ : 名無しさん@お腹いっぱい。 [sage] 2010/03/21(日) 18:14:29 というか、Kシェルはclassic Bシェルの拡張の一つ ただ、Bashとは違う : 名無しさん@お腹いっぱい。 [sage] 2010/03/22(月) 23:29:11 質問させてください。 関数に渡す引数の中に、5C問題を起こすコードとスペースが混じっている可能性があるとき、どうやって渡せばいいんでしょう? Fanc '${hoge}' だと${hoge}が文字列になってしまうし、 Fanc "${hoge}" だと5C含みの文字がエスケープされて文字化ける : 145 [sage] 2010/03/22(月) 23:31:14 変なところで改行してしまいました。申し訳ないです。 上手く変数を展開しつつ、さらにエスケープを抑止する方法はないでしょうか? よろしくお願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 12:49:02 いや ksh は bourne sh とぜんぜん違うでしょ。 機能的には bash の方がよほど近い。 bsh は ${hoge%fuga} とか ${#hoge} とか $((1+1)) とかどれも使えない。 ~ がホームディレクトリに展開されないぐらいだし。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 13:05:31 今現在 B-shと言ったら、*BSDの ash または debianの dash相当のシェルを指す。 で、その B-shでは、${hoge%fuga} とか ${#hoge} とか $((1+1)) とか すべて使える。 ちなみに、OpenSolarisからはBourne-shが消えて、 /bin/shは kshへのsymlinkになってる。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 13:23:37 bash > ksh > {d,}ash : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 13:30:22 「Bourne Shellの文法の範囲内でのみ記述すること」の主張の 最大の根拠がSolarisに現存していたBourne Shellだったわけだが、 SolarisのBourne Shellがなくなったことで、 Bourne Shell互換で記述する意味がなくなってしまったな。。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 13:33:30 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 15:11:32 OpenSolaris にも bourne sh はあるよ。 パスが /usr/has/bin/sh に変わったけど。 >今現在 B-shと言ったら、*BSDの ash または debianの dash相当のシェルを指す。 これ、ふつー posix shell といわない? は classic Bシェルという言葉を出してるわけだし、 昔からの bourne sh の方を言ってると考えるのが妥当じゃないかと。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 15:22:19 シェル雑談はいいから : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 15:53:36 ashやdashぱ posix shellじゃないよ。 たとえば、[[ ]] とかが使えないし、、 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 15:56:03 つーか、あれが使えないとか、コレが欠陥なんて かんけーねーだろ。 自分が求める仕事が完結すれば、シェルは何だって良い。 酸いも甘いも理解して使えばいいんだよ : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 15:57:41 /usr/has/bin/sh は歴史的遺物として置いてあるのであって、 実際のスクリプトで使われていないし、使ってはいけない。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 16:03:34 言えてる。別システムで使う予定も無いくせにな アホくせ : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 16:06:38 一昔前ならいざ知らず、未だにこんな事言ってる化石がいるから衰退すんだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 16:48:01 さーて 夕飯までにcshでちょろっと組むかな : 名無しさん@お腹いっぱい。 [sage] 2010/03/23(火) 23:18:15 [[ ]] はPOSIX shellの仕様に無いと思ったが : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 00:22:06 こまけぇことはいいんだよ : 名無しさん@お腹いっぱい。 [] 2010/03/24(水) 01:17:36 ごもっとも。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 01:51:48 このスレからこまけぇことを取ったら何が残るんだよ : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 01:56:59 はいいんだよ : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 02:04:55 敗因… : 名無しさん@お腹いっぱい。 [] 2010/03/24(水) 02:07:00 イーンダヨ! : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 05:51:17 グリーンだよ : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 06:46:53 ashみたいに、posixシェルでもBourneシェルでもないBシェルを 総称して何と呼べばいいの? : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 08:25:51 糞シェル : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 15:41:51 ラルク・アン・シェル : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 16:29:35 クミコ・タケダ・オン・シェル : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 16:42:41 シェル・ファントムハイヴ : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 16:49:49 ★お待たせしました★ユーズド&B級ユーズド販売復活! ttp://www.ioplaza.jp/shop/genre/genre.aspx?genre=09outtop&affiliate=TP100323B1#useditem ユーズドアイテム公開日: 3月24日 (水) 19:30〜 ttp://www.ioplaza.jp/shop/genre/genre.aspx?genre=09outtop&affiliate=TP100323B1#reusememory B級ユーズドアイテム公開日: 3月24日 (水) 20:15〜 I-O OUTLET はアイオープラザ会員様限定の特別販売コーナーです。 アイオー製品のワケあり掘り出し物がタイムセールスで大放出。是非ご来店をお待ちしております。 ※なお、ご利用には会員登録が必要です(登録無料)。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 16:50:39 エコール・デュ・シェル : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 16:53:50 マイヨ・アルカンシェル : 名無しさん@お腹いっぱい。 [sage] 2010/03/24(水) 16:54:51 銀と真紅のアルカンシェル : 名無しさん@お腹いっぱい。 [sage] 2010/03/25(木) 00:58:36 あるよ。 if [[ ${1} = AAA]] ;then とか可能 : 名無しさん@お腹いっぱい。 [sage] 2010/03/25(木) 01:18:04 ttp://www.opengroup.org/onlinepubs/009695399/utilities/test.html The KornShell-derived conditional command (double bracket [[]]) was removed from the shell command language description in an early proposal. : 名無しさん@お腹いっぱい。 [sage] 2010/03/25(木) 07:39:10 ashには、$(( )) はあっても、(( )) がないな。 letコマンドの動作も変だし。 : 名無しさん@お腹いっぱい。 [] 2010/03/26(金) 01:06:03 仕事の時は細かいことはどーでもいーが、 それ以外なら細かい話もよしではある。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/26(金) 06:53:42 (( )) はPOSIX shellの仕様に無いと思ったが : 名無しさん@お腹いっぱい。 [sage] 2010/03/26(金) 07:08:17 こまけぇことはいいんだよ : 名無しさん@お腹いっぱい。 [] 2010/03/27(土) 21:42:06 教えていただきたい 例えば以下のようなテキストファイル、file.hoge1があるとします。 AAA111ZZZZ BBB222ZZZZ CCC333ZZZZ DDD444ZZZZ これに対して、先頭CCCで始まるレコードの4カラム目から3カラム つまり「333」を「XXX」にしたい。 AAA111ZZZZ BBB222ZZZZ CCCXXXZZZZ DDD444ZZZZ しかし「333」の位置には半角3バイトではあるが必ずしも「333」が入っている訳ではなく 何が入ってるかは一定でない。 これの解をお願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/27(土) 21:49:03 sedでいいんじゃね? : 183 [sage] 2010/03/27(土) 22:01:24 333が固定なら sed "s/^CCC333/CCCXXX/" file.hoge1 でいけると思ったのですが。。。 solarisのsh,kshです : 名無しさん@お腹いっぱい。 [sage] 2010/03/27(土) 22:03:32 s/^CCC.../CCCXXX/ ならCのあと何でも3文字いけるお : 183 [sage] 2010/03/27(土) 22:08:50 その記述だ! ありがとう! : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 12:50:53 POSIX?shellとBourneShellって同じものでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 12:52:00 全然違います : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 12:58:36 返信thx! POSIXシェル、Cシェル、キーシェル、コーンシェル のどれかを今日中にある程度使えるようになりたいんだけど 何か良い方法ないですかねw 参考サイトや本と、実行環境が整えば・・・ : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 13:13:36 環境なんてどこにでもあるし サイトなんてぐぐればたくさん出てくる。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 13:15:21 キーシェルってなんだろう。昭和シェルなら知ってる : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 14:36:10 そうなのですか 家のfedoraでコーンシェルが動かないっぽくて絶望してました 探してみます keysh?らしいです 何かはよくわかりません>< : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 15:10:10 ftp://ftp.kddilabs.jp/Linux/distributions/fedora/releases/12/Everything/i386/os/Packages/ksh-20090630-1.fc12.i686.rpm : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 15:20:17 有難うございます! 超助かりました。 : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 17:12:56 シェル童貞から質問です 2010年にもなってダイアルアップuucp環境を構築しようとしています('A`) cronで一定時間毎にuucpキューをチェックして、1つでも中身があればuucicoで ダイアルアップ接続・・・という事をしたいのですが正直構文がわかりません uustat -q|wc -lでキューの中身をカウントし、0じゃなければuucicoを実行したいのですが・・・ #!/bin/sh uustat -q|wc -l val=$? if test ${val} -ne 0 then /usr/sbin/uucico -s uucp-domain else echo "no mail in uucp queue." fi exit 0 考えたら"wc -l"は行数を表示するコマンドで戻り値は成功すれば0なので $?も0だから上記の記述じゃ条件が常に偽になりますわな ○<\_ 戻り値じゃなくてwc -lの表示結果の数値を変数に格納する方法を教えて下さい : 名無しさん@お腹いっぱい。 [sage] 2010/03/28(日) 17:22:33 status=`uustat -q|wc -l` : 196 [sage] 2010/03/28(日) 17:53:58 できました! 本気でありがとう : 名無しさん@お腹いっぱい。 [sage] 2010/03/30(火) 07:03:23 スクリプト初心者にアドバイスをお願いします。 CSVファイルをシェル配列に格納していろいろ加工しようと思っています。 が、CSVに空の項目がある場合に上手く格納できず、空項目を無視してしまいます。 ------------ソース------------- cat ${file} | while read line eval ARRAY="(`cat ${line} | awk {'print $1,$2,$3'}`)" →以降ARRAYを加工 ----------ソースここまで--------- これを実行すると AAA,BBB,CCC →ARRAY[0] =AAA,ARRAY[1] =BBB,ARRAY[2] =CCC ⇒ 想定通り ,BBB,CCC →ARRAY[0] =BBB,ARRAY[1] =CCC ⇒ ARRAY[0]=””,ARRAY[1] =BBB,ARRAY[2] =CCCにしたい 何か工夫が必要なんでしょうか? : 199 [sage] 2010/03/30(火) 07:28:56 間違えました… × awk {'print $1,$2,$3'} ○ awk -F , {'print $1,$2,$3'} : 名無しさん@お腹いっぱい。 [] 2010/03/30(火) 08:29:01 やっつけ #!/bin/bash file=hoge.csv cat ${file} | while IFS=, read ARRAY[0] ARRAY[1] ARRAY[2]; do echo 0: ${ARRAY[0]} echo 1: ${ARRAY[1]} echo 2: ${ARRAY[2]} done : 名無しさん@お腹いっぱい。 [sage] 2010/03/30(火) 21:39:41 IFSって上書きした時の影響範囲ってスクリプト内だけなんですね…全体だと思ってました。 教えていただいたソースで実現できました。 ありがとうございます。 が、もう一度処理を見直した結果、ARRAYの加工と同時に元の${line}も使用するので、 一度lineに格納してから改めてARRAYに分割・格納する必要があることが分かりました。 条件が後出しになってしまって申し訳ありませんが、何か方法はないでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/03/31(水) 01:35:39 set - $line : 名無しさん@お腹いっぱい。 [sage] 2010/04/01(木) 06:57:16 setを使ってみましたが上手くいかず… ARRAY=`set - ${line}` でいけるんですか? : 名無しさん@お腹いっぱい。 [sage] 2010/04/01(木) 09:17:38 set は $1 $2 $3 ... に値をセットする。 : 名無しさん@お腹いっぱい。 [sage] 2010/04/01(木) 11:45:07 あぁ、釣りか。 つられちゃったw てへっ?☆ : 名無しさん@お腹いっぱい。 [sage] 2010/04/01(木) 19:42:04 line=',aaa,bbb' IFS=, ARRAY=($line) : 名無しさん@お腹いっぱい。 [] 2010/04/08(木) 06:05:00 シェルスクリプトで2つのジョブを同時に実行した後、両方が終了するのを待つにはどうのようにしたらよいのでしょうか? ./a & ./b これだと、2つめのジョブの終了は待ちますが、1つめはまだバックグランドで実行されている可能性が出てしまいます : 名無しさん@お腹いっぱい。 [sage] 2010/04/08(木) 06:19:10 ./a & ./b wait : 名無しさん@お腹いっぱい。 [sage] 2010/04/08(木) 06:41:22 または ./a & ./b & wait : 名無しさん@お腹いっぱい。 [sage] 2010/04/08(木) 09:57:16 まじ? : 名無しさん@お腹いっぱい。 [sage] 2010/04/08(木) 10:03:25 まじ。 : 名無しさん@お腹いっぱい。 [sage] 2010/04/08(木) 22:52:39 前スレか前々スレに確かそんな話題があった : 名無しさん@お腹いっぱい。 [] 2010/04/28(水) 14:12:30 質問です。 シェルスクリプト(bash)内で、非同期で他のシェルを呼び出したり、 javaコマンドを実行したりしたいのですが、どのように書けばよいのでしょうか。 (戻り値は必要無いです。) : 名無しさん@お腹いっぱい。 [sage] 2010/04/28(水) 14:12:54 & : 名無しさん@お腹いっぱい。 [sage] 2010/04/28(水) 14:29:50 bashのmanpageみたら確認できました。 (非同期、で検索してたので見落としてました。) ありがとうございます。 : 名無しさん@お腹いっぱい。 [] 2010/05/05(水) 04:29:57 bashとksh使ってます。 if文で以下、括弧の違いを教えてくれませんか? ぐぐっても分からなかった・・・ 2重も1重も同じとおもってよいのでしょうか? if [[ xxxx ]];then if [ xxxx ];then : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 05:17:13 おはようございます。教えて下さい。 シェルスクリプトの中で、 ls /honya/* >> list.txt をしたファイル名使いたいのですが、 Directory や Filenameにメタキャラやらスペースがいっぱい あります。そんなの作るなって言えれば、いいのですが、ユーザ さんは、Windowsだし。見てるとそれなりに規則性があって 運用してるんだなってわかります。 話がそれましたが、シェルの中での処理を教えて下さい。 よろしくお願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 07:05:17 [[ hoge -a boke ]] は文法エラー [[ hoge && boke ]] と書く [ hoge && boke ] は文法エラー [ hoge -a boke ] と書く -o と || についても同様。 [[ hoge = h* ]] は真 [ hoge = h* ] は偽(ただしカレントディレクトリにhogeというファイルがあると真) : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 07:15:24 ファイル名に改行コードが含まれていないなら、 ls /honya/* >> list.txt while IFS= read -r hoge do echo "$hoge" done < list.txt の形で処理できる(メタキャラやらスペースもOK) 変数を参照する時には "$hoge" のように必ず " " を付けること。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 08:25:45 ,218 ありがとうございます。さすがです。 読み込んだファイルを sed か tr 一つづつ 変換して書き出すしか ないかなぁって思ってました。 こんな方法があるのですね。勉強させていただきました。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 09:29:01 のようにlsの結果を使うのは素人。↓こういう仮定を勝手に設定してはいけない。 > ファイル名に改行コードが含まれていないなら、 for fname in /honya/*;do echo "$fname";done が正しい。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 09:38:47 おまえ、もっとアホ それではファイル名のスペースがもろに分離されてしまって 全く動作しない。 まあ、釣りだろうけど : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 09:41:43 質問自体が、 「lsの結果のファイルがすでにあって、それを処理するスクリプトが欲しい」 ということなのだから、lsの結果を使うことまでは「前提条件」かと。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 10:55:07 分離されねーよ。 恥をかきにのこのこ出てきて… これほどのバカはめったにいない。 ダメな前提の質問なのだから、正しく処理するスクリプトを作成する事は不可能。が正解。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 11:39:49 笑殺させられたくないから、もうひとつ先に言っといてやる。 「ARG_MAX超えたら動作しない」とか言い出すなよ。 確実に5人は笑い死にするぞ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 13:21:18 ありがとうございます。 括弧の数によって、&&や-aの使い方が変わるのですね。 一般的には、二重括弧でよいのでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 13:27:30 一般的には [ ] の方が良い。 [[ ]] は互換性がないので使わない方がよい。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 18:09:03 218です 僕の質問が悪くて、申し訳ありません。 取り敢えず、シェルは完成して、今テスト中です。 結局、シェルの中で、Find -type f して、コマンドに 渡しました。 ここにアップしたら、見てもらえるかなぁなんて都合 良すぎ? エラー処理とか全然してないんですが・・・。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 18:18:34 シェルってゆうな。クズ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 21:51:50 人のことくずとか言うな。 何様? : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 21:54:43 つスルーカ : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 22:26:27 引っ込んでろ。クズ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 22:36:54 おまえさぁ、ここUnix板だぜ。 技術系の板で、あほか。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 22:42:52 つルーカ : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 23:10:59 意味不明。引っ込んでろ。クズ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/05(水) 23:21:52 つ スツーカ : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 04:01:37 新参乙です(悪いとは言ってない) さんざんガイシュツ。 ま、ここの人は優しいから俺以外のシッタカが教えてくれます。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 04:30:31 先生、頭のおかしい人がいます : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 12:25:18 rsync で複数のディレクトリ、例えばホームディレクトリ直下の tex org .emacs.d .w3m の4つを ローカルと別のマシン hoge.example.net とで同期したいとします。 #!/bin/sh cd rsync -avzu -e ssh {tex,org,.emacs.d,.w3m} hoge.example.net: rsync -avzu -e ssh hoge.example.net:\{tex,org,.emacs.d,.w3m\} . とすればできますが、この {tex,org,.emacs.d,.w3m} 部分を1つの変数 export FILES="{tex,org,.emacs.d,.w3m}" のようにしたいのです。これでは {} が展開されず、そんなファイル名はありませんとなります。 for で回すのも手ですが、rsync を何度も呼び出すことになりコストがかさむため一度のrsyncで行いたいのです。 どのようにすればうまく一つの変数に入れられるでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 12:48:38 まず配列を用意します : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 12:50:58 ごめん嘘 普通に空白区切りの変数でいいじゃないか : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 13:06:20 /bin/shがブレース展開してくれるOSは板違いです。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 13:08:32 eval : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 13:15:37 その判断基準だとOpenSolarisも板違いになってしまいますな。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 13:16:01 OpenSolarisってbashだろ? : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 13:17:58 OpenSolarisの /bin/sh の正体は ksh93 (Solaris10以前とは違う) OpenSolarisの bashは /bin/bashで、/bin/shとは別。 : 240 [sage] 2010/05/06(木) 13:36:52 空白区切りだと hoge.example.net:を全てに付与できなさそうなのです。 wwwwwww Mac OS XなのでUNIXですけどwwww とりあえず eval でいけそうですね。 FILES="{tex,org,.emacs.d,.w3m}" rsync -avzu -e ssh `eval echo ${FILES}` hoge.example.net: rsync -avzu -e ssh `eval echo hoge.example.net:${FILES}` . こういう感じでしょうか ありがとうございました。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 13:39:14 Mac OSはbash七日? > rsync -avzu -e ssh `eval echo hoge.example.net:${FILES}` . こっちはeval不要。 : 240 [sage] 2010/05/06(木) 13:50:49 % ls -l /bin/{sh,bash} -rwxr-xr-x 1 root wheel 1346544 2010-02-05 09:41 /bin/bash* -r-xr-xr-x 1 root wheel 1346624 2010-02-05 09:43 /bin/sh* % diff /bin/{sh,bash} Binary files /bin/sh and /bin/bash differ 微妙に違うみたいですがほとんど同じなのかも知れません。 eval 不要でしょうか? evalがないと、 ls -d `echo hoge.example.net:${FILES}` ls: cannot access hoge.example.net:{tex,org,.emacs.d,.w3m}: No such file or directory となって{}を展開してくれませんでした。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 14:00:10 Macなら新Mac板で聞けば。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 14:01:45 rsync -avzu -e ssh hoge.example.net:${FILES} . ところで、FILESじゃなくてDIRSだろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 14:04:08 ディレクトリもファイルだと教わらなかったか? : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 14:27:32 なぜ? : 名無しさん@お腹いっぱい。 [sage] 2010/05/06(木) 22:19:46 $ echo $SHELL /bin/bash $ bash --version GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0) Copyright (C) 2005 Free Software Foundation, Inc. : 名無しさん@お腹いっぱい。 [sage] 2010/05/07(金) 12:22:19 お前のログインシェルなんて誰も聞いちゃいない : 名無しさん@お腹いっぱい。 [sage] 2010/05/07(金) 21:52:57 お前バカだろ : 名無しさん@お腹いっぱい。 [sage] 2010/05/07(金) 22:02:52 一応/bin/shのも貼ってあげるよ。 $ /bin/sh --version GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) Copyright (C) 2007 Free Software Foundation, Inc. $ ls -il /bin/sh /bin/bash 12727992 -rwxr-xr-x 1 root wheel 1346544 2010-02-05 09:41 /bin/bash* 12728038 -r-xr-xr-x 1 root wheel 1346624 2010-02-05 09:43 /bin/sh* てっきりハードリンクだろうと思ったらちがったので驚いている。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/07(金) 22:03:23 Mac OS Xの /bin/shは Bash七日? と聞いてるんだから、 $ /bin/sh --version の結果を貼らないと。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/08(土) 00:10:32 まーどうでもいいけど : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 04:44:03 mencoderって知ってますか? 下記のような表示が流れるのですが Ex. Pos: 0.3s 10f ( 0%) 4.88fps Trem: 15min 14mb A-V:0.023 [0:0] こういったコマンドの表示を必要な部分だけ切り出して表示したり、 プログレスバーを作ったりしたいのですが可能でしょうか? Bashでエスケープシーケンスを使うんだろうなぁって思うのですが、とっ かかりが分からなくて。 ご存じであれば、ご教授お願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 10:17:47 教授はあげません : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 10:36:48 「お願い」であって「下さい」では無い。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 11:07:02 bash仮定していいのかな、この場合。 * IFSとset * ${var#pattern} # のほかに ## % %% など。 * sedのような外部コマンド : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 11:15:18 mencoderだということをわかって回答してる? mencoderが出してくるメッセージは改行なしで1行を書き換えたりしてるので、 行単位に処理する方法では対応できないし、画面に見える文字のまま取り出せる わけではないんだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 11:24:15 /) ( i ))) / ̄\ / / | ^o^ | ノ / < いみがわかりませんなぁ \ / ,/ / _ /´ (___)/ : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 11:36:33 単にCRで同一行に重ね書きしてるだけだよ。それ以上のカーソル制御しているわけじゃない。 でも、mencoder改造した方が楽だよね。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 11:45:22 いや、少なくとも ESC [ J とかのシーケンスは含まれてる。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/09(日) 11:49:43 TERM=unknownで実行すればいい。正しく作られているならそんなコードは出なくなるはず。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/10(月) 16:00:31 超初心者です。入門UNIXshるプログラミングという本で勉強中ですが、 バッククォートによるコマンド置換の説明で以下のコマンドが出てきました。 STRING=`echo "abc \`echo def\` ghi"` echo $STRING 期待値は abc def ghi ですが、 \`echo def\` 部分が `echo def` という文字列にならずコマンドとして 認識されるい理由がわかりません。 かといってバックスラッシュ取っちゃうと動かないわけで。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/10(月) 16:16:21 外側の ` ` で囲まれている時点で、 たとえ " " で囲んでも、" " の中のバッククォートの意味は消えない。 よって、` ` のネスティングとみなされてコマンド置換される。 バックスラッシュを取ると動かなくなるのは、 そうすると最初の `echo "abc ` まででクォートとみなされて 解釈が期待通りにならないから。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/10(月) 16:22:33 バックスラッシュの部分は、シェルと、外側のechoコマンドとによって 2回解釈されるので、解釈の結果コマンド置換が実行される。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/10(月) 16:28:16 大外の `` がポイントということですか。納得です。 バックスラッシュ取ると動かなくなる理由は、そいういう ことなんだろうなと思ってました。 即レスTHXです。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/10(月) 16:56:17 STRING=$(echo "abc $(echo def) ghi") : 名無しさん@お腹いっぱい。 [sage] 2010/05/10(月) 16:58:04 ブルースブリンの本か?あの本は古臭いな、色々と : 名無しさん@お腹いっぱい。 [sage] 2010/05/10(月) 17:11:09 まだ最初の数十ページしか読んでないけど、丁寧に説明してくれてて 読みやすい。tips的な解説もあるし。 どういうところが古臭いと感じるん? ( ) の説明はまだ数ページ先だ!笑 : 名無しさん@お腹いっぱい。 [sega] 2010/05/14(金) 13:41:09 bashを使っています。 echo hoge > /dev/tcp/192.168.0.10/5000 を実行したのですが、接続されません。 /dev/tcp/192.168.0.10/5000: No such file or directory になってしまいます。なぜでしょうか。 192.168.0.10:5000にはサーバプログラムが存在してて telnet等で接続可能な状態です。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 13:45:41 犬板に行きなさい。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:01:13 ああ、UNIXにはbashなかったんだっけ?失礼しました。 Linux板に行ってきます。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:02:41 エスパーすると、bashを使ってるつもりでbashではないのでは? 接続されない場合は、connect: Connection refused と表示され、 No such file or directory とはならない。 bash以外のシェルだと、No such file or directoryになるので。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:07:11 間違えて csh(笑) で実行するとそのメッセージになるな。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:31:11 bash-1.x というオチもあるな。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:45:01 ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:48:16 実はbashだけどlinuxでなかったとか : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:54:18 バカ? /dev/tcpだから犬板行けって言ったんだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 14:56:05 linuxじゃなくても bashなら /dev/tcp は使えるよ。デバイスファイルじゃないし。 おまえあほ。 /dev/tcpなんてデバイスファイルはない。 これは Bashの機能。 FreeBSDでも bashを使えば /dev/tcp は使える。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 15:11:54 バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言ったんだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 15:15:28 言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに 見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 15:30:24 必死だな。バカ。 そのように見えたというソース出せよ。ww : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 15:42:30 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 15:59:19 へ〜、/dev/tcp初めて知った。 /dev/tcpなんてファイルは無いのに ソケットを開くという特別解釈をbashの中でしてるんだ。 キモイ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 16:01:29 必死だな。バカ。他人の揚げ足とる事だけ考えてるから、 > 言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに > 見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww こういうバカな思いつきをするんだろうな。 お前、昨日FreeBSDスレに居たJava厨だろ。バカさ加減が同レベルだ。ww : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 16:09:27 さんからの遺言です >バカ? /dev/tcpだから犬板行けって言ったんだよ。 >バカ? /dev/tcpだから犬板行けって言ったんだよ。 >バカ? /dev/tcpだから犬板行けって言ったんだよ。 とても恥ずかしいことなので3回言いましたwww : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 16:14:34 Macのbashでも出来るぞw $ bash --version GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0) Copyright (C) 2005 Free Software Foundation, Inc. $ exec 3<>/dev/tcp/www.google.com/80 $ echo -e "GET / HTTP/1.1¥n¥n">&3 $ cat <&3 HTTP/1.1 200 OK Date: Fri, 14 May 2010 07:12:54 GMT ... : 277 [sage] 2010/05/14(金) 16:20:58 すみません解決しました。 さんのおっしゃるとおりでごわした。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 16:25:14 最近は awk でも同じような方法で tcp にアクセスできる世の中なんだよなぁ。 /dev/tcp じゃなくて /inet/tcp だけど。 : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 19:17:20 お前本当に頭が弱いな。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 19:22:04 お前本当に頭が弱いな。 bashで /dev/tcpが使えるはずなのに使えなかったから質問してたんだろ。 (もともと使えないものならそもそもそういう使い方をしないから質問もしない) (オチは、./configure 時に --disable してただけ) ところが、 は、/dev/tcpというデバイスファイルがLinuxにはあって、 Linuxでしか /dev/tcpが使えないものと勘違いしたんだよ、、、 : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 20:20:13 お前かわいそうなくらい頭が弱いな。 > ところが、 は、/dev/tcpというデバイスファイルがLinuxにはあって、 > Linuxでしか /dev/tcpが使えないものと勘違いしたんだよ、、、 それはお前の妄想。 *BSD(のports, pkgsrc)、Solaris(のコンパイル済みの奴)は使えるように コンパイルしてある。従って使えないのはの指摘通りそのようにコ ンパイルしているから。 従って、 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 20:42:33 お前かわいそうなくらい頭が弱いな。 は俺だ。で、 = = 俺だ。 結局俺の指摘が正しかった。 ちなみに、 も俺。 だから、 に指摘されるまで、 は /dev/tcp がLinux特有だと勘違いしていた。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 20:48:37 = が、仮に /dev/tcpのことを理解していたなら、 bashの/dev/tcpの質問に対して、「Linux板に行きなさい」と言った理由が 合理的に説明できないな。 よって、 = は bashの/dev/tcp について知らなかった。 ここまでは決定的事実。 で、そこから演繹される事実として、 Linuxには/dev/tcpというデバイスファイルがあって、 Linuxカーネルによって/dev/tcpが処理されてる→Linux特有だからLinux板行け、 と誤って言ってしまったと言える。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 20:50:51 安価おかしくない? = だろ? : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 20:56:37 > bashの/dev/tcpの質問に対して、「Linux板に行きなさい」と言った理由が > 合理的に説明できないな。 既に楽勝でしている。お前の低性能なJava脳がそれを理解できないだけ。ww : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 21:14:27 >既に楽勝でしている。 って、 ↓ >バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言ったんだよ ↑ これのことだよね。 これって、俺が で >ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。 って正解言った後の、後出しじゃん。 つまり、 は を見るまでは /dev/tcpについて知らなかったwww : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 21:25:46 お前ら今日も全力だなw わざわざ見に来る甲斐があるわ : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 21:37:56 低脳全開だな。犬板への誘導はオレ()が真っ先にしている。 一々理由を説明する必要は無い。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 21:39:00 おまいら味噌汁ぶっかけんぞゴラァ! : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 21:55:53 ぶっかけはオプションですよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:01:55 の主張ポイントがズレまくりで何を言いたいのかわからん。 「使えてりゃ質問しねーんだよ。」って何度も言ってるけど、 じゃあ、「*BSDでもSolarisでも bashで /dev/tcpは使えない」と主張したいの? だとすると違うよ。実際使えるし。 ああ、やっぱり「Linuxのみで使える機能」と未だに思ってるんだな。 だから 「犬板に行きなさい。」なんて言ったんだな(笑) : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:05:01 > 犬板への誘導はオレ()が真っ先にしている。 ↑っ言ってるけど、「犬板への誘導」自体が間違い、というのが結論なんだけど。 つまり、 は、「真っ先に間違いを書き込みました」って 自分で認めてることになる。 よって、 の負け。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:08:55 > ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。 が正解だけど、補足すると、「ディス鳥によっては」の部分は重要じゃなくて、 「/dev/tcpの機能はbashのコンパイル時に無効にすることもできる」 ってのがポイント。*BSDでもSolarisでも、/dev/tcp無効のbashは作れる。 よって、 はLinux板に誘導はしていないし、Linux特有とも言ってない。 Linux板に誘導した 、Linux特有と勘違いした が間違い。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:12:08 お前がバカで理解できないだけ。 > 「犬板への誘導」自体が間違い、というのが結論なんだけど。 お前の妄想。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:12:58 たぶん、 > バカ? /dev/tcpだから犬板行けって言ったんだよ。 を書いてる時点で、 >ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。 はすでに読んでたはずだけど、この「コンパイル」というのが、 bashのコンパイルじゃなくて、Linuxカーネルのコンパイルのこどだと が誤解したんだろうな。 だから、 を読んだ時点でもまだ「Linux特有の機能」と思い込んでいたからこそ、 みたいなことを書いたと説明がつく。 : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 22:14:08 壊滅的にバカだな。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:17:00 >> 「犬板への誘導」自体が間違い、というのが結論なんだけど。 > お前の妄想。 ↑ ということは、「犬板への誘導が正しい」と主張するわけ?? だったら、/dev/tcp が Linux独自のデバイスファイルであると まだ思い込んでるの?? あと、試しに手元のFreeBSDとかのbashで試してみろ。 ちゃんと/dev/tcpが使えるから。 それでLinux板への誘導が間違ってたことが理解できたかい? : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 22:24:16 ディストリよっては無効にされている場合がある。これはお前も言っている事だ。 この板で「XXというディストリです」と言われても「おそらく無効になっている」事しか わからない、犬板なら「そのディストリは無効になっている」事までわかる。 だから犬板で聞くのが正しい。 > ということは、「犬板への誘導が正しい」と主張するわけ?? > ということは、「犬板への誘導が正しい」と主張するわけ?? > ということは、「犬板への誘導が正しい」と主張するわけ?? > ということは、「犬板への誘導が正しい」と主張するわけ?? > ということは、「犬板への誘導が正しい」と主張するわけ?? > ということは、「犬板への誘導が正しい」と主張するわけ?? お前、バカすぎる。考える事を止めた方が良い。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:28:48 「*BSDでもSolarisでも bashで /dev/tcpは使える」は正しい。 「*BSDでもSolarisでもLinuxでも bashで /dev/tcpは使える」も正しい。 「*BSDでもSolarisでもLinuxでも、bashの./configureで/dev/tcpを無効にできる」も 正しい。 よって、どこにもLinux特有の事項がない。 元質問の にはOSは書いてなくて、 bashで/dev/tcp云々としか書いてないから、 これだけだと FreeBSDやSolarisで、bashを自分で./configureして 使っている可能性もある。 よって、 の質問だけで 「犬板に行きなさい。」と言ったということは、 が /dev/tcpがLinux独自の機能だと誤解していたからに他ならない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:32:29 >この板で「XXというディストリです」と言われても ↑言ってないことを仮定するな。事実を曲げるな。 元質問者の はディストリもOSも言ってない。 それから、 「ディス鳥によっては /dev/tcpの機能がdisable…」を 見るまで正解を知らなかったくせに、後出しで が言ったことを 最初から知ってたようなふりするのをやめろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:36:24 UNIX板的には、bashを objdump -T してみて、 socket()などのネットワーク系の関数が呼び出されているかを確認して、 本当に /dev/tcpの機能が compile in されてるかどうか確認する方法を 教えることもできたはずだ。 これも、OSもディストリも関係なく行なえる方法だ。 なのに、「犬板に行きなさい。」 がすべてを台無しにした。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:44:05 記述されていなくてもわかる。 デフォルト有効なのだから、野良コンパイルした場合に、知らずに無効になっている事はない。 従って、コンパイル済み(もしくはmake一発のports, pkgsrc)と予想できる。 そして、ports,Solarisは有効になっているのだから、残りはLinuxと予想できる。 バ カ に は 予 想 出 来 な い ら し い が。 w w w 知らなかったというのはお前の妄想。www > 元質問者の はディストリもOSも言ってない。 犬臭さが漂ってるから楽勝でわかる。事実あたっている。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:44:22 >「XXというディストリです」と言われても「おそらく無効になっている」事しか >わからない が言うように、objdump -T で、/dev/tcpが無効になってるかどうか 確認する方法を知らなかったんですね(笑) : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:47:42 >野良コンパイルした場合に、知らずに無効になっている事はない ↑ 知らずに無効になっている事は「ある」 野良コンパイルの参考に、Web等から ./configureのオプションをコピペして、 本人も忘れてることなんて普通にある。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:47:45 この予想プロセスはちょっと感心した : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:49:49 後出しの言い訳。必死だな。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:51:14 後出しジャンケンだから何でも言えるよな。 実際そんな予想ができてたわけないのに。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:55:20 今北産業 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 22:56:16 が何度もコピペしてる 「*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww」 って、誰への反論なの? 実際*BSDでもSolarisでも bashで /dev/tcpは使えるし、 自身は使えないと思ってたんだとすると、 が言ってることは「自分が間違ってたと」自分に言ってることになるだけど、、 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:03:24 まとめ: = が知らなかった(そして恥をかいた)こと。 ・/dev/tcpはLinux独自のデバイスファイルだと思っていた ・bashが/dev/tcpを特別扱いすることを知らなかった ・FreeBSD等でも、bashで/dev/tcpを使えることを知らなかった ・bashのコンパイル時に/dev/tcpを無効にすることができることを知らなかった ・OSやディス鳥がわからなくても、bashバイナリをobjdump -Tして調べる方法を知らなかった。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:08:17 今日はやけに盛り上がってるな : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:12:38 俺も嬉しいよ : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 23:17:18 に決ってんだろ。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www バカが、必死すぎる。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:19:13 >・/dev/tcpはLinux独自のデバイスファイルだと思っていた 俺も最初そう思っちゃった。 で、自分のシステムには無いから 一生懸命カーネルオプションをあさり始めたw : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:27:55 それを に言ってるなら、全然反論になってないじゃん。 の言ってることが正しいんだし。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:31:47 質問と回答は、質問者だけのものではない。 その質問と回答を読んだ第3者にとっても有益であるべきものだ。 質問がLinux独自のもので、Linux以外のUNIXユーザーに無益なものなら Linux板への誘導が適当であろう。 ところが、 が言うように、 「*BSDでもSolarisでも bashで /dev/tcpは使える」 よって、bashの/dev/tcpに関する質問と回答をUNIX板で行なうことは UNIXユーザーにとって有益である。 : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 23:38:09 が使用しているのが*BSDやSoalrisであるならば動くのだから、 *BSDでもSolarisを持ち出すのは的外れ。 そんな単純な事に気付かないを大笑いしている。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:43:48 後付け&&自演乙 個々のディストリのコンパイルオプションなんて興味ねーんだよ。 しかもスクリプトに関する質問じゃねーし。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:44:06 > が使用しているのが*BSDやSoalrisであるならば動くのだから、 ↑ その仮定が間違い。 で言ってるように、*BSDやSoalrisの野良コンパイルで、 知らずに /dev/tcpを無効にしてしまってることはある。 それから、 は質問者に対して答えてるんじゃなくて、 が/dev/tcpのことについて知らなかったみたいだから、 「*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww」 と教えてあげてるんだよ。 いずれにしても、キミが最初から本当に /dev/tcpのことを知っていた上で Linux板に誘導したのではないことはバレバレ何だから、 見苦しい言い訳はやめとけ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:46:57 >しかもスクリプトに関する質問じゃねーし。 ↑ ハイ、ここ間違い。/dev/tcpはスクリプトに関する質問。 インタラクティブにも使おうと思えば使えるが、 インタラクティブならtelnetとかnetcatが使えるからそんなことしない。 /dev/tcpでやろうとするのはスクリプトの場合。 : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 23:48:49 お前にはわからなかっただけで高い確率で予想出来ていた。事実合っている。 お前の言いがかりは既に論破されてる。低性能なJava脳のではそれが理解できてないだけ。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 23:49:05 このファイルディスクリプタの3がwww.google.comに対して 開かれているというのを調べる方法を教えて下さい。 lsofで調べてみたけど分かんなかった : 名無しさん@お腹いっぱい。 [] 2010/05/14(金) 23:51:52 ls -l /proc/プロセスID/fd/3 でわかるでしょ? : 名無しさん@お腹いっぱい。 [sage] 2010/05/14(金) 23:58:45 それだとsocketだということしかわからない。 lsof -i で接続先のホスト名まで出るけど : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 00:10:19 ,342 ありがとうございます。 lsof -i で出ました;-) : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 00:11:23 が、「Linuxの一部の鳥のbashでは/dev/tcpが使えないものがある」なんて 知っていた可能性はゼロ。 実際には、/dev/tcpというLinuxのデバイスだのbashだののキーワードに 脊髄反射して「Linux板池」と言った。 ところが、 によって/dev/tcpのことを説明され、 恥をかいた は、最初から/dev/tcpのことを知っていたかのように 装い始めた、というのが真相。 本当に最初から/dev/tcpのことを知っていたなら、 で「犬板に行きなさい」なんて言わずに、 たとえば「うちのFreeBSDでは でうまく行くけど」とか、 「bashのバージョンは?」とか、 そういう反応になっていたはず。 そういう反応になっていなかったということは、 は /dev/tcp を知らなかった、が結論。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 00:16:31 すでに論破された妄想を繰り返すな。見苦しい。 お前のバカを基準にして言いがかりをつけていただけ。 ↓バカの証 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 00:18:31 で、結局どのUnixなのか気になるから教えてくれません? : 346 [sage] 2010/05/15(土) 00:29:08 手近のシステムいくつか試して見たらRH系には全部あるけど、 ubuntuでは出来なかった。 deb系では無い? ぐぐったらこんなの見つけたw Debian Bug report logs - #146464 bash: /dev/tcp should be enabled by default ttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=146464 最初にレポートされたのが2002年でずっと無視されてるw : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 01:45:57 何だ、もう終わっちゃったのか。寂しいな。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 07:16:25 何言ってるの? はすでに論破されている。 というか、 が言ってるように、 何度もコピペしてる 等は最初から論点がズレていて 反論になってない。だから何回コピペしてもほとんど相手にされてない。 もう一度まとめると、 = が知らなかった(そして恥をかいた)こと。 ・/dev/tcpはLinux独自のデバイスファイルだと思っていた ・bashが/dev/tcpを特別扱いすることを知らなかった ・FreeBSD等でも、bashで/dev/tcpを使えることを知らなかった ・bashのコンパイル時に/dev/tcpを無効にすることができることを知らなかった ・OSやディス鳥がわからなくても、bashバイナリをobjdump -Tして調べる方法を知らなか った ・野良ビルドでも、Web上のコマンドラインをコピペして知らずにdisableオプションを付 けていて本人が忘れてることが良くあることを知らなかった ・/dev/tcpはスクリプトで使うものだと知らなかった( が指摘) : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 07:25:17 は論点のすり替えだな。 >言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに >見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww ↑が言ってるのは、「/dev/tcpはLinuxだけで使える」←に対する反論として、 「*BSDでもSolarisでも bashで /dev/tcpは使える」と言ってるに過ぎない。 「使えてれば質問しないかどうか」の結果がどうであれ、 「/dev/tcpはLinuxだけで使える」←が間違いであると言う事実の主張に対する 反論にはならない。 「/dev/tcpはLinuxだけで使える」と思っていた = が 苦肉の策で思いついた言い訳が 他多量の同文コピペというわけだなwww : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 08:27:43 流れを振り返ってみよう (元質問) ↓ (/dev/tcpがbashの機能だと正しく知ってる回答者) >エスパーすると、bashを使ってるつもりでbashではないのでは? (/dev/tcpはLinuxの機能だと誤解してる馬鹿) >バカ? /dev/tcpだから犬板行けって言ったんだよ。 ↑ 285の「バカ」は280に対して言っている。つまり、 「bashをいくら追求しても、Linuxじゃない限り/dev/tcpは使えない」と 思い込んでいる。 「/dev/tcpだから犬板」という言い方は「/dev/tcpイコールLinux」と考えてるからこそ 出てくる言葉。 ↓ (/dev/tcpはbashの機能であってLinux独自のものじゃないことの指摘) >/dev/tcpなんてデバイスファイルはない。 >これは Bashの機能。 ↓ (見苦しい言い訳) >バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言 ったんだよ。 と とで、言ってることが自己矛盾してる。 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 08:32:00 弱いお頭で必死に考えた妄想だけでは事実を捻じ曲げられない。 冤罪足利事件みたいに客観的事実と強弁できるソースを捏造しないとな。 お前が一昨日必死になっていた、「ソース出せ。」ってやつだな。wwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 08:34:29 さて、渾身の反論に何分かかるか。まさか、15分以上はかからないよな。 お頭が悪いと墓穴を掘る。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 08:36:43 それ反論になってないから、 に対して反論してくれるかな? 今のところ に対しての反論がないので、 が正しい以上、 の負けだ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 08:40:01 全然関係ないけど、 >お前が一昨日必死になっていた、「ソース出せ。」 って何のこと? 俺じゃないよ。 あと、Javaがどうこうのカキコもあったけど、それも俺じゃない。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 08:44:06 朝からν即並みに張り付いて必死だな。www 何回リロードしたんだ。www > 今のところ に対しての反論がないので、 論破済みの戯言には反論する必要なし。 に反論出来てないのでお前の負け。www これはお前が持ち出したルール。 お頭が弱いと墓穴掘る。wwww : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 08:48:12 に対する反論は で即攻でしてる。 >知らずに無効になっている事は「ある」 >野良コンパイルの参考に、Web等から ./configureのオプションをコピペして、 >本人も忘れてることなんて普通にある。 で、 に対する反論まだぁ?? : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 08:50:33 >論破済みの戯言には反論する必要なし。 ↑ どこにも「論破」されてないし、 「反論する必要なし」というなら、反論できないことを認めたんだな。 じゃあ、 は負けを認めたww : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 09:00:37 あれで反論のつもりかよ。www 「予想できる」を論破するには「100%有り得ない」事を立証する必要があるんだよ。 バカは何処までいってもバカだな。 お前が言い出したルールで、に反論出来なかったお前の負け決定。www : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 09:01:54 バカ晒しあげの、お約束のコピペを忘れたぜ。 > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww > *BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww 使えてりゃ質問しねーんだよ。www : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 09:06:45 お前が言い出したんだからお前は15分以内にレスしろよ。www バカは墓穴を掘る。www > の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw > の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw > の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw > の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw > の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 09:06:48 論理が間違ってるよ。 この場合は 0%ではないことを示せば十分だから、 は で論破されてる。 それは反論になってないし、論点にもなってない。 そのことは で言ってる。 に反論できないなら、 のコピペを何回やっても無駄。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 09:10:02 も言ってるが、 (/dev/tcpはLinuxの機能だと誤解してる馬鹿) >バカ? /dev/tcpだから犬板行けって言ったんだよ。 この発言が致命症だね。 「/dev/tcpだから犬板」とストレートに言ってる。 弁解の余地なし。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 09:18:29 論理 wwww 「矛盾しない」事を理解できなかった知恵遅れが「論理」www バカが気付かずに無効にした経験を持ち出して > 知らずに無効になっている事はない。 に反論した気になってるんだ。www 笑う。www この部分はバカを考慮すれば、 > 知らずに無効になっている事は少ない。 という事になるが、これでもの論理は全く変わらない。 お前が言い出したルールで、に反論出来てないお前の負け決定。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 09:24:28 に対する反論は で終了。 で、 に対する反論まだぁ?? 反論が大変ならとりあえず、 に反論しろよ。 「/dev/tcpはLinux独自のもの」と思ってない人が 「/dev/tcpだから犬板」なんて言わない。 ↑に対する反論を。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 09:39:35 は他人だと言い張りたいようだから、相手にしてやろう。 > 285の「バカ」は280に対して言っている。つまり、 正しい板に誘導済み、且つ、移動宣言が出ている質問に対して、レスしている に対して言っている。 お前の論理wwww はが/dev/tcpを知らなかったという妄想に全面的に 依存してるんだよ。www /dev/tcpを知っていたなら(事実だからしょうがない)、は何も矛盾しない。 も相手にして欲しいらしいな。 > 「/dev/tcpはLinux独自のもの」と思ってない人が > 「/dev/tcpだから犬板」なんて言わない。 バカは繰り返さないとわからないようだが。で論証済み。ディストリの問題だから犬板。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 09:47:58 /dev/tcpがLinux独自じゃないと知っているのに 「/dev/tcpだから犬板」と言うことはありえない。 > で論証済み。ディストリの問題だから犬板。 ↑ 本質はディストリの問題ではない。 正しくは「./configureの問題」 で、Linux以外のOSでも 「./configureの問題」として起こり得る問題。 だからLinux板への誘導は間違い。 で、Linuxじゃなくても objdump -T で確認できることを あたりで指摘してる。 (これは、「ディストリの問題ではない」と言う主張) 以上で、 に書いてあることは論破されたので、 まだ反論のない に対する反論 を早く書くように。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 09:52:24 に対する反論が 15分以上ないので、(15分どころじゃないけど) 負けを認めたんじゃないの? 別に15分ルールにするつもりなんかないだろうけど、 自身がそれを「お前が持ち出したルール」とか言い始めたので。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 09:55:39 「有り得ない」に対する反論は、「有りうる場合」を一つ示せば証明終了。 論理学の基礎の基礎の基礎。 やっぱり一昨日「矛盾しない」を最後まで理解できなかった低性能Java厨のようだな。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 09:59:15 その「一昨日」って何のことだよ。俺じゃない。 >「有りうる場合」を一つ示せば証明終了 って、 「有りうる場合」なんてどこにも書かれてないじゃん。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 09:59:27 すでに論破済みの妄想には反論の必要はなし。 15分ルールを言い出したのは。 はそれに従う必要がある。オレには無い。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:04:24 どこにも論破されてない。 そう言って逃げるのは反論できない証拠。 「論破済み」と言うなら、そのポインタを示すかコピペしてみろよ。 できないだろうけど。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 10:06:05 ついに小学生並みの言いがかりしか付けられなくなったようだな。 「有りうる場合」とは確かに書いてないな。www 「言わない」に対する反論は「言う場合もある」事を一つ示せば証明終了。 これでわかるか? www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:07:02 は「15分ルール」なんて言ってないよ。 「書き込みに15分以上もかかってる」から、言い訳に苦労したんだろう、 と言っただけ。 それを勝手に あたりで 「15分ルール」みたいに言い出しただけ。 言い出したのは の方。 自身が従う必要がある。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:08:26 だから、その「有りうる場合」を具体的に書いてみろよ。 今までの議論の中では書かれてない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:12:56 まとめると、 「/dev/tcpはbashの機能であってLinux独自の機能ではない」 ことを知っている人が、 「/dev/tcpだから犬板」とは言わないし、 「/dev/tcpはbashの機能であってLinux独自の機能ではない」 ことを知っている人が、 「/dev/tcpだから犬板」という場合があるような合理的な例が 1例も示されていない。 よって、 の負け。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 10:14:49 15分ルールを引っ込めたいのか? 特別に許してやっても良いぞ。 自ら言い出しておいて情けない奴だな。 メクラ? > で論証済み。ディストリの問題だから犬板。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:18:02 は や で 論破済み。 よって、 「/dev/tcpはbashの機能であってLinux独自の機能ではない」 ことを知っている人が、 「/dev/tcpだから犬板」という場合があるような合理的な例が 1例も示されていない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:24:24 あと、 は でも論破されてる。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 10:40:12 , , は反論たりえない。 > 元質問者の はディストリもOSも言ってない。 元質問者が言及していない事は予想すればいい。 詳細は /dev/tcpを知らなかったというのはお前の妄想。 結論(犬板への誘導)に対する言いがかり。「objdumpで確認できる」は概ね正しいが、 /dev/tcpを知らない事の論証にはならない。 特殊なバカのケースを持ってきて、の結論(犬板への誘導)に言いがかりをつけ ているだけで、/dev/tcpを知らない事の論証にはならない。 /dev/tcpを知らなかったというのはお前の妄想にすぎないんだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:43:33 /dev/tcpを本当に知ってる人が 「/dev/tcpだから犬板」とは言わない。 ↑これがすべてwww で、「有りうる場合」(そう言う場合)の具体例は? まだ書けないのか? : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 10:45:23 「ディストリの問題だから犬板」 何も矛盾しない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:49:16 >お前の論理wwww はが/dev/tcpを知らなかったという妄想に全面的に >依存してるんだよ。www ↑ とは言うが、「/dev/tcpを知らなかった」とすればすべて自然に説明が付くよね。 逆に「「/dev/tcpを知っていた」と仮定すると、すべてが不自然、 というか実際に論破されてるし。 よって、「/dev/tcpを知らなかった」が事実。 ディストリの問題ではなく、configureの問題。 で、ディストリもOSも関係なく回答できる問題。 で、実際UNIX板で回答して解決してるし。 (逆に誘導先のLinux板では解決していない) : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 10:54:31 不自然と言うのはお前の妄想。妄想だけで論破した気になっているおバカさん。 > で、実際UNIX板で回答して解決してるし。 > (逆に誘導先のLinux板では解決していない) 犬板が情けなかっただけ(見てないから知らないが)で、/dev/tcpを知らなかった論証にはならない。 お前の「論破」とやらはは全て妄想。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 10:59:28 よくよめ。「不自然、というか実際に論破されてる」と言ってる。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:00:33 で、結局 に対する反論はできなかったのですね : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 11:00:56 良く読め、お前の「論破」とやらはは全て妄想。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:03:56 反論するには具体的な反論を書き込むことが必要。 「妄想」とかいう言葉で誤魔化しても反論にはならない。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 11:16:04 既に論破済みでというから放置してたんだが、 が論破されるとまた蒸し返すのか? で書いたとおり、*BSD,Solarisのコンパイル済みバイナリは/dev/tcpが使える。 従って*BSD,Solarisに関する質問では無い。質問の流れと関係の無い事実を持ち出して もなんの論証にもならない。 > 「bashをいくら追求しても、Linuxじゃない限り/dev/tcpは使えない」と > 思い込んでいる。 「/dev/tcpは使えない思っている」という妄想が前提の論証なので、反論不要。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:19:16 > 書いたとおり ↑ は で即攻論破されてる。 に対する有効な反論はまだない。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 11:20:26 「ディストリの問題だから犬板」 これに対するお前の「反論」とやらは「/dev/tcpを知らなかった」という妄想だけ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:22:06 最後の1行 >反論不要 つまり、反論できないことを認めたのですねw : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 11:23:30 アンカーは打っていないが、速攻()で論破済み。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:24:10 よくよめ 「ディストリの問題ではなくconfigureの問題」 って、 とか、もっと前でも言ってるぞ。 ディストリの問題でない以上、Linux板への誘導は間違い。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 11:25:40 ついに小学生レベルに落ちたか www 「する必要のない事」と「出来ない事」の区別はつけようね。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:26:13 がその根拠としている が論破されてるので、 に対する有効な反論はまだない。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 11:31:35 下らん言いがかりなので放置してたが、しつこいのでで論破済み。 全てはお前の妄想と言いがかり。 お前の妄想であって論破になっていない事は論証済み。 お前が論破したと妄想しているのはどのレスだ? : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:32:22 百歩譲って「ディストリの問題」だったとしても、 だったら、 「ディストリの問題だからLiinux板」と言うだろ。 実際には、 「/dev/tcpの問題だから犬板」と言ったのだから、 やっぱり「/dev/tcpはLinux独自」と思い込んでいたことになる。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:35:52 では論破では、「妄想」とか「予想」とかが前提になってるので、 論破できてない。 に対する有効な反論はまだない。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 11:49:16 > 百歩譲って「ディストリの問題」だったとしても、 譲らずとも真実。 > 「ディストリの問題だからLiinux板」と言うだろ。 お前の妄想にすぎない。 お前が「妄想」を並べ立てて論証した気になっているだけ。 お前の「論破」は、「/dev/tcpを知らなかった」事を前提にした妄想の展開が全てであって、 「/dev/tcpを知らなかった」ことの客観的証明は一切ない。事実ではないのだから証明出来るわけが無い。 つまり、お前の論破とやらは「妄想」。 > に対する有効な反論はまだない。 お前が論破したと妄想してるのはどのレスだと聞いているのだ。笑ってやるから答えてみろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 11:55:28 >> 「ディストリの問題だからLiinux板」と言うだろ。 >お前の妄想にすぎない。 ↑ やっぱり、反論できないところになるといつも「妄想」ということにするよね。 お前が「妄想」という言葉を使ってるところはすべて「反論できません」の 降参のサインだと読み換えるよ。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 12:00:10 > 「ディストリの問題だからLiinux板」と言うだろ。 このように、客観的証明を出来ない、お前の一方的な思い込みを「妄想」と言っている。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 12:00:27 おまえ、もともとbashもLinuxも全然知らないんだろ。 知らないなら黙ってろが基本。 なのに、自分のFreeBSDに/dev/tcpが無いことから /dev/tcpをLinuxのデバイスだと勘違いして、 駄目押しにbashのキーワードもあるから、 ただの嫌悪感のみでお前は「犬板行け」と書いてしまった。 それが間違いだとわかったのだから、 今度からbashとか/dev/tcpとか見ても、Linux板に誘導するなよw : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 12:04:26 本当に「ディストリの問題」と思っているなら 「ディストリの問題」と言うはず。 実際には「/dev/tcpの問題」と言った。 これが等価だと主張するなら、 ディストリ=/dev/tcp の等式が成り立たなければならない。 明らかに成り立たない。 よって、 が言う一連のことはすべて論破された。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 12:05:23 ついに妄想全開だな。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 12:07:37 はいはい、また「妄想」←(オマエ定義では「降参」)の言葉を使ったねw で、 にも反論してねw : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 12:29:31 これキャッカンテキ論証のつもりなのかね。笑う。www > 本当に「ディストリの問題」と思っているなら 真実だし、そのように言った。 > 実際には「/dev/tcpの問題」と言った。 言っていない。「/dev/tcpだから」と言った。 前提が捏造なので、これ以下の主張は単なる妄想。 > これが等価だと主張するなら、 > ディストリ=/dev/tcp > の等式が成り立たなければならない。 > 明らかに成り立たない。 「/dev/tcpだから」で練り直してみなよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 12:36:25 本当に「ディストリの問題だから」と思っているなら 「ディストリの問題だから」と言うはず。 実際には「/dev/tcpだから」と言った。 これが等価だと主張するなら、 「ディストリの問題」=「/dev/tcp」 の等式が成り立たなければならない。 明らかに成り立たない。 (余計に成り立たないw) よって、 が言う一連のことはすべて論破された。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 12:45:30 おお、足りないオツムで頑張ったようなので、相手してやろう。 論理学の等価とは二つの命題が共に真、もしくは共に偽の時に真となる演算だ。 「ディストリの問題だから」も「/dev/tcpだから」も命題になっていない。 よって、等価性を論じる事は不可能。 お前が論じたつもりになっているのは「文字列の同一性」。 わかる? www : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 12:46:21 おっと、レス番間違えちまったぜ。 おお、足りないオツムで頑張ったようなので、相手してやろう。 論理学の等価とは二つの命題が共に真、もしくは共に偽の時に真となる演算だ。 「ディストリの問題だから」も「/dev/tcpだから」も命題になっていない。 よって、等価性を論じる事は不可能。 お前が論じたつもりになっているのは「文字列の同一性」。 わかる? www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 12:53:45 「ディストリの問題だから」と思ってる人が、 わざわざ言葉を変えて 「/dev/tcpだから」と言い替える客観的合理性が説明されてない。 断りなしに言葉を言い替えることができるのは、 その言葉同士が「同義」である場合に限る。 「ディストリの問題」と「/dev/tcp」は同義ではない。 よって、 は論破された。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 12:59:13 > 断りなしに言葉を言い替えることができるのは、 > その言葉同士が「同義」である場合に限る。 お前の妄想世界ででっち上げたルール持ってくんなよ。www 小学生以下。www 論破完了。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:04:51 また出た「妄想」、つまり、「降参」するんですねw いずれにしても、この長いやりとりを見た人は が /dev/tcpを理解してなかったと思うのは当然。 は「/dev/tcpを理解してた」と後出しで主張するが、 その根拠は結局示されなかった。 根拠を示せと何度言っても、返ってくる言葉は、 「妄想」と、「反論の必要なし」だけ。(反論自体はなし) よって、 は論壊された。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:07:17 論壊なんて日本語初めて見たw : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 13:07:38 妄想じゃないなら、このルールが一般的であるというソース出せよ。www > 断りなしに言葉を言い替えることができるのは、 > その言葉同士が「同義」である場合に限る。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 13:15:35 お前が客観的論証なしに繰り返している戯言を「妄想」と言っている。 参照。 ところが、お前の論破とやらは、その殆どが「/dev/tcpを知らなかった」という妄想に 基づく戯言なので客観的に論証など出来るわけが無い。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:16:07 今の状況を整理すると、 (/dev/tcpを理解してない人) ↑ は、100%の証拠で論破されてるが、 自身は「妄想だ」とか言って 認めようとしない、という状況。 で、100%の証拠に拘らず、状況証拠も含めて考えても、 が/dev/tcpを理解してないと思うに足りる証拠が多数すでに書かれていて、 圧倒的に が不利。 100%の証拠については議論が硬直してるようだから、 状況証拠でもいいから が/dev/tcpを理解していたと納得できるような 証拠を出してみろよ。 それがない限り、みんな は/dev/tcpを理解していないと思ったままだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:19:55 横レスすまそ は今までにbashで/dev/tcpを使ったことが(質問される以前に)あったの? : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 13:22:01 > 100%の証拠で 妄想を証拠と言っていいのは小学生だけ。www > 状況証拠でもいいから が/dev/tcpを理解していたと納得できるような 知らなかったはずだと主張するお前に客観的な証拠での立証義務がある。 このルールのソースはどうした? 妄想ルールと言う事を認めるのか? おまえはまだ15分ルールの撤回はしていないから から15分以内な。 > 断りなしに言葉を言い替えることができるのは、 > その言葉同士が「同義」である場合に限る。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:26:20 ということは、状況証拠は出せない(実際には/dev/tcpを知らなかったから)と 認めるんだな。 あくまで状況証拠だから、それだけでは はグレーゾーンだが、 「 が/dev/tcpを知っていた」という証拠がないし、 「 が/dev/tcpを知らなかった」という状況証拠が多数あるから、 疑いは晴れないままになるよ。それでもいいならこのままにしとけ。 にも答えてやれよ。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 13:32:44 論点をすり替えるなよ。www > > 100%の証拠で > 妄想を証拠と言っていいのは小学生だけ。www 100%の証拠とやらはどれだよ。www DNA鑑定の精度を超えている。www 妄想ルールのソースはどうした? > 断りなしに言葉を言い替えることができるのは、 > その言葉同士が「同義」である場合に限る。 は流れを読まないバカのようだから相手にする必要は無い。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 13:34:22 100%と言い切るからには、100%で有るという鑑定書もあるんだろうな。 バカはどんどん墓穴を掘っていく。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:35:04 > は流れを読まないバカのようだから相手にする必要は無い。 もし/dev/tcpを使ったことがあるなら「ある」と一言答えられるよな。 やっぱり/dev/tcpを使ったことなかったんだww 知らない分野の質問には口をはさまないほうがいいよ。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 13:40:10 > もし/dev/tcpを使ったことがあるなら「ある」と一言答えられるよな。 はい、妄想。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 13:46:47 ほら、100%の証拠と鑑定書はどうしたんだよ。降参か? www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:56:59 「妄想」=「オマエの降参」 100%の証拠の議論とは別に、状況証拠でいいから の /dev/tcpに関する 知識レベルを聞いてるんだ。 このままだと は /dev/tcpを知らずに「知ったか回答」「誤誘導」をしたという 疑いが晴れない。 100%の疑いではなくても、疑いがあることに変わりはない。 疑いが晴れてない状態でいいなら反論しなくてもいいよw : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 13:57:33 なんか荒れてるな。 しかし/dev/tcpってcygwinのbashでも使えるんだな。勉強になったわ。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:00:04 100%の証拠があると言ったのはお前だぞ。 忘れたならアンカー打ってやる。 その100%の証拠と鑑定書出せよ。www 出したら答えてやるよ。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 14:03:28 おれは答えてなんか要らないよ。 /dev/tcpを知っていたという状況証拠を出すことは、 オマエ自身の利益になること。 それを答えられなかったらオマエ自身の疑いが晴れないんだから。 で、結局答えないのなら、 は/dev/tcpを知らなかったという疑い濃厚なまま 議論が打ち切られました、となる。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:09:28 お前の論理 > つまり、反論できないことを認めたのですねw でいくと、100%の証拠とやらは妄想だったという事を認めたのですねw ことになるが、それで良いんだな? www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 14:13:03 100%の証拠はすでに書いてる。(読み返せば済むこと) で、そっちの議論は終ったので、 次に、 状況証拠レベルでさえオマエは出せないことを指摘してるんだ。 「 は/dev/tcpを知らなかった」という疑いが残ったままになれば のプライドを潰すには十分だからね。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:13:33 の通り、知らなかったはずだと言いがかりをつけるお前が証拠を出し て立証する義務がある。しかし、100%の証拠とやらは唐桟ながら妄想のよう なので、妄想を元にした言いがかりと言う事がこれにて判明した。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:16:02 > 100%の証拠はすでに書いてる。(読み返せば済むこと) どのレスだよ。100%であるという鑑定書は? アンカー位うったらどうか? www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 14:22:55 100%の証拠は、 に対する反論が無かったという事実、 及びその関連レスすべて。 で、100%の証拠の件にかかわらず、 お前のプライドも潰れた。 なぜなら、お前は/dev/tcpを知っていたとか、使ったことがあったとかいう 状況証拠すら出せなかったから、疑われたままになってる。 お前は口ぐせのように「妄想」と言うが、 自分が正しいなら、他人から間違った妄想をされてるだけでも嫌なはずだ。 現在、お前は「/dev/tcpを知らない人」と「妄想」されてる。 これだけでもプライドを潰すには十分。 # 実際には妄想ではなく事実。念のため。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:23:39 しつこいのでも相手にしてやろう。 からのレス読んだ上で、なぜの質問をしたんだ? : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:26:20 妄想を証拠と言っていいのは小学生だけ。ww 100%であるという鑑定書は? > 現在、お前は「/dev/tcpを知らない人」と「妄想」されてる。 キチガイは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:27:29 訂正 × キチガイは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。 ○ キチガイやバカは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 14:29:11 「妄想」してるのはおそらく俺だけではない。 おまえは「/dev/tcpを知らない人」と「妄想」されてても平気なのかw それで十分だ。お前のプライドは潰れたな。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:39:48 > 「妄想」してるのはおそらく俺だけではない。 それ自体が、お前の妄想だから何の痛痒も感じない。 妄想である事を認め逃げ出すようだからまとめておこう。 これまでのまとめ がbashに関する質問をする がlinux板に誘導する が移動する。 (除く)が余計なレスを付ける が再度linux板へ誘導する。 が妄想を元に言いがかりをつけ、以降粘着する。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 14:42:53 なんか、ここ最近、言葉遣いがあれてるよね。 そんなに仕事無いの?>Unix系 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 14:48:55 自身が墓穴を掘ってる。 で正解レスがあったのに、その意味を十分理解せず、 それより「後」の で、再度Linux板へ誘導している。← これが間違い。 が指摘してる致命症発言を再度貼っとく。 >この発言が致命症だね。 >「/dev/tcpだから犬板」とストレートに言ってる。 >弁解の余地なし。 「妄想だ」と言うのは結構。「妄想」であっても のプライドは潰れたのだから。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:52:43 キチガイやバカは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 14:55:42 補足、 は、 の「/dev/tcpの機能がdisableされてコンパイル」を、 bashではなく、Linuxカーネルのコンパイルのことと勘違いしていた。 だからこそ、 で、 「Linuxカーネルのコンパイル時に設定する/dev/tcpの話だからLinux板へ行け」 と言う意味の発言をした : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 14:57:21 > は、 の「/dev/tcpの機能がdisableされてコンパイル」を、 > bashではなく、Linuxカーネルのコンパイルのことと勘違いしていた。 と妄想したが粘着して妄想を書き散らした。 キチガイやバカは妄想するのが仕事なので、お前が妄想しても何の痛痒も感じない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 16:02:21 ものすごいレス応酬を見たけど全部読み飛ばした : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 16:04:58 これだけ仲が良いんだから、メアドでも交換し合えば良いのになw : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 16:11:08 むぅ、たしかに : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 19:18:35 これは質問も出来ない。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 21:27:10 正解。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 21:32:21 /dev/tcp だけ読んだ でもCygwinじゃ使えなかったぜ! : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 22:03:46 に対する反例が出たよ。 が言うように、Cygwinでも/dev/tcpがdisableでインストールされてることもある。 がLinux板に誘導したのは間違い。 : 名無しさん@お腹いっぱい。 [] 2010/05/15(土) 22:07:32 すでに妄想だと認めた()んだから、お前の負け。www : 名無しさん@お腹いっぱい。 [sage] 2010/05/15(土) 22:18:20 よくよめ。 たとえ「妄想」だったとしても、お前のプライドは潰れてる。 実際には「妄想」ではなく事実だから、お前は100%論破されてる。 という、2段階の主張。 とりあえず、お前のプライドが潰れればそれでいいから、 「妄想」でもいいならそのままにしとけ。 たとえ「妄想」でも、「/dev/tcpを知らなかった人」と思われるのは さぞかし悔しいだろうな。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/16(日) 00:30:52 初歩的な質問でアレですが foo='/hoge/spa ce.txt' というようにスペースが含まれるファイルがあったとして、このファイルのbasenameをクォートするにはどうしたらよいのでしょうか? echo "$(basename $foo)" だと spa になってしまうし、 echo $(basename "$foo") だと spa ce.txt (スペース1つ)となって、やはり spa と ce.txt が別トークンとして扱われてしまいます。 要するにダブルクォートをネストしたいということなのですが… : 名無しさん@お腹いっぱい。 [sage] 2010/05/16(日) 00:32:54 2chだとスペースが1つにまとめられちゃうんですね。 本当は foo='/hoge/spa___ce.txt' # _ はスペース のように、スペースが複数入っていると考えてください : 名無しさん@お腹いっぱい。 [] 2010/05/16(日) 01:29:45 お前は「妄想」していると明言している。これが100%の証拠って奴だよ。www その言い訳、惨め過ぎるぞ。www アク禁らしいから、解除されたらまたからかってやるよ。www 15分以上あるから足りないオツムで必死に考えてろ。www > 「妄想」してるのはおそらく俺だけではない。 > > おまえは「/dev/tcpを知らない人」と「妄想」されてても平気なのかw > それで十分だ。お前のプライドは潰れたな。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/16(日) 01:36:20 期待値がわからん。これじゃダメってこと? $ cat a.sh #!/bin/sh foo='/home/spa ce.txt' bar=$(basename "$foo") echo "$bar" $ sh a.sh spa ce.txt : 名無しさん@お腹いっぱい。 [sage] 2010/05/16(日) 01:53:40 あ、変数を経由すればいけるんですね! bar=$(basename "$foo") ここでも外側にダブルクォートが必要だと思い込んでました。ありがとうございます。 アホな質問してすみません>< : 名無しさん@お腹いっぱい。 [sage] 2010/05/16(日) 09:05:29 変数を経由しなくても行ける。 echo "$(basename "$foo")" : 名無しさん@お腹いっぱい。 [sage] 2010/05/16(日) 09:12:28 変数に直接代入する場合は外側のダブルクォートは不要。 変数を使わずに直接 echoなどの引数にする場合は、 外側にもダブルクォートが必要( の方法) ダブルクォートのネスティングみたいになるけど、 $( ) によって別の階層に分かれてるから、 エスケープとかなしにそのままダブルクォートを付けてOK。 もちろん、複数のスペースとかもそのまま保存される。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/16(日) 09:25:57 なん・・・だと・・・ ネストできるわけないと思ってました。何でも試してみないとだめですね。 これができるんだったら色々楽になりそうです。ありがとうございます! : 名無しさん@お腹いっぱい。 [sage] 2010/05/17(月) 21:53:46 へ〜、shのパーザー以外と頭良いな。 勉強になったわ。 bash限定という 事はないかな? : 名無しさん@お腹いっぱい。 [sage] 2010/05/17(月) 21:57:03 bash限定じゃねーよ。 ちなみに、$( ) の代わりに ` ` でもOK。 : 名無しさん@お腹いっぱい。 [sage] 2010/05/17(月) 22:31:26 ちなみにv7shだと… foo='/home/spa ce.txt' で no space って言われるんだが、移植ミスなのか? 他の手段で入れれば"`"のネスト自体はできるけど : 名無しさん@お腹いっぱい。 [] 2010/05/26(水) 00:18:56 ちょっと手が滑ってへんな事がおきた。 bashで $ cd // $ pwd // どういう意味だろう? 3つ以上だと1つになる $ cd /// $ pwd / : 名無しさん@お腹いっぱい。 [sage] 2010/05/26(水) 01:15:22 //がネットワークルートを表すOSがある。それへの対応コードだろう。 emacsも同様に//を知っている。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/03(木) 23:00:02 初心者です。 キーボードからの入力待ちの際、tab保管を有効にするにはどうしたらよいでしょうか? #!/bin/csh set file = $< echo "ファイルは $file だよ" 上記のようなとき、filec+autolistのような挙動をしてくれることを望んでいます。 今日はじめてcshが駄目な事を知ったので、/bin/shでないことは御容赦ください・・・。 よろしくお願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/03(木) 23:43:52 #!/bin/bash read -e file echo "ファイルは $file だよ" : 466 [sage] 2010/06/04(金) 00:34:58 さん bashならできるのですね(ググったらdash、zshとかいうのでもおkなのかな)。 人から貰ったcshスクリプトと組み合わせて使うため、 最初はbashスクを使ってasciiファイルに書き出してから、cshスクで読むとかになりそうですが ゆくゆくは貰ったcshも全部bashに書き換えたいと思います。 ありがとうございました。 : 467 [sage] 2010/06/04(金) 00:43:13 $name++ さんでした。 失礼しました。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/04(金) 07:46:38 そこまでcshを嫌う必要はないだろう 簡単なものならcshの方がいい場合もある : 名無しさん@お腹いっぱい。 [sage] 2010/06/04(金) 10:06:00 ttp://tiswww.case.edu/php/chet/bash/FAQ のE10 : 名無しさん@お腹いっぱい。 [sage] 2010/06/05(土) 01:33:35 質問です。 以下のソースでは入力がhogeかそれ以外の文字列の場合は期待通りに動くんですが、文字列を入力しなかった場合は line 6: [: =: unary operator expected とエラーが出ます。これはどうやれば防げますか? #! /bin/sh echo "input? " read i if [ $i = "hoge" ]; then echo "input is 'hoge'" else echo "other" fi : 名無しさん@お腹いっぱい。 [sage] 2010/06/05(土) 01:37:47 "$i" : 名無しさん@お腹いっぱい。 [sage] 2010/06/05(土) 01:51:39 なんという…ありがとうございます。 : 名無しさん@お腹いっぱい。 [] 2010/06/15(火) 23:04:34 1ヶ月の最初の日曜日を表示させるには・・・・・・ なんかいいコマンドありますか? find /var/www/data -name hoge を毎月1回最初の日曜日に実行して インデックス作りたいんす : 名無しさん@お腹いっぱい。 [sage] 2010/06/15(火) 23:16:56 cronで日曜に起動して日付が7以下かどうか調べれば? 逆でもいいけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/15(火) 23:32:49 0 0 1-7 * * [ "$(date +%a)" == "Sunday" ] && command -args こうですか? : 名無しさん@お腹いっぱい。 [sage] 2010/06/15(火) 23:41:12 date -d `date +%d`' days ago 1 day next sunday' それをやりたくないから質問してるんだろ : 名無しさん@お腹いっぱい。 [sage] 2010/06/15(火) 23:43:36 その発想はいいですね、考え付きませんでした days ago ですか!date は奥が深いですね いろいろとありがとうございますたー! : 名無しさん@お腹いっぱい。 [sage] 2010/06/15(火) 23:49:22 これじゃだめ? cal ${month} ${year} | awk '/^ ?[0-9]+{print $1}' | head -1 : 名無しさん@お腹いっぱい。 [sage] 2010/06/15(火) 23:56:07 ありがd と at を使って何とかなりますたたた cal って便利なんだけど awkで整形して使うのは面白い技ですね みなさんいろいろ技があるんですね、勉強になります そろそろCも覚えなきゃなぁ やることいっぱいですorz : 名無しさん@お腹いっぱい。 [sage] 2010/06/16(水) 00:06:52 こんな環境もある % date -d `date +%d`' days ago 1 day next sunday' usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format] % : 名無しさん@お腹いっぱい。 [sage] 2010/06/16(水) 00:19:06 おお〜 環境依存ですか これ空鼠? : 名無しさん@お腹いっぱい。 [sage] 2010/06/16(水) 00:28:20 いあ FreeBSD. つか, *BSD 全部だと思う. つか, GNU 拡張 date じゃないと通らへんちゃう? : 名無しさん@お腹いっぱい。 [sage] 2010/06/16(水) 00:34:31 days ago なんて知らないと思ったら拡張date だったのですか うちのCentOSでは動いてしまったので気付かなかったw あとで会社のFreeBSDで試して見ます(ヲ : 名無しさん@お腹いっぱい。 [sage] 2010/06/17(木) 03:26:50 FONに入れたOpenWrtからTwitterに投稿したいためだけに シェルスクリプトでOAuth認証できるクライアントを書いたw Perlとか入れなくても標準環境にopensslとcurl入れるだけで動くからいいわ : 名無しさん@お腹いっぱい。 [sage] 2010/06/18(金) 00:25:21 BSDだったら-vの組み合わせで何とか出来そうですね。手元に環境ないから 試せないけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/18(金) 18:29:26 これ見てよ↓ ttp://livedoor.2.blogimg.jp/agomesu/imgs/5/8/58ff257e.jpg ばらまこうぜ! : 名無しさん@お腹いっぱい。 [sage] 2010/06/20(日) 04:42:59 ubuntuでifconfig eth0のMACアドレスを":"を"-"に変えてMACアドレスのみ表示したいのですがどのようにすればよいでしょうか? 初歩的な質問で申し訳ありません。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/20(日) 07:14:26 シェルスクリプト総合@LINUX Part5 ttp://pc11.2ch.net/test/read.cgi/linux/1238764663/ 怒られる前に早く逃げろ : 名無しさん@お腹いっぱい。 [sage] 2010/06/20(日) 10:03:33 ifconfig eth0 | sed -n '/.*HWaddr /{s///; s/:/-/gp}' : 名無しさん@お腹いっぱい。 [sage] 2010/06/20(日) 14:58:13 ありがとうございました。 Linux板で聞くよりこっちで聞く方が早いですね。 : 名無しさん@お腹いっぱい。 [] 2010/06/20(日) 23:49:41 > 421 :名無しの報告 :2010/06/18(金) 18:37:13 ID:wsULoapS0 > おいちゃんこれお願い > > ttp://pc12.2ch.net/test/read.cgi/unix/1266642605/489 2010/06/18 18:29:26 > > 422 :名無しの報告 :2010/06/18(金) 18:39:13 ID:9cXOXF/h0 > > 100618 危険!!外国人参政権画像マルチポスト報告 3 > ttp://qb5.2ch.net/test/read.cgi/sec2chd/1276851966/ > > これだろここに直接持ってくるなよ > > 423 :名無しの報告 :2010/06/18(金) 18:39:51 ID:DZt17tze0 > > 削除人?じゃないならやめなさい > > 424 :名無しの報告 :2010/06/18(金) 18:40:07 ID:wsULoapS0 > はーい > ごめんなさい : 名無しさん@お腹いっぱい。 [sage] 2010/06/21(月) 21:28:31 2ちゃんに自動的に書き込むようなスクリプトは既出ですか nc辺りで書こうかと思うのだけど : 名無しさん@お腹いっぱい。 [sage] 2010/06/21(月) 22:30:52 根性試しでないならcurlとか使えばいいんじゃね? : 名無しさん@お腹いっぱい。 [sage] 2010/06/21(月) 22:34:18 やっぱ/dev/tcp(笑)だろ : 名無しさん@お腹いっぱい。 [sage] 2010/06/21(月) 22:56:57 Age2ch Part14 ttp://pc12.2ch.net/test/read.cgi/software/1118219419/ : 名無しさん@お腹いっぱい。 [] 2010/06/27(日) 01:04:50 wc -lで行数求める場合って、なんで先頭にタブ(空白かも)が入るんだろうね。 おかげで、-eqで比較しようとしてもちゃんと比較できなかったりして困るんだよね。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 01:29:20 awk '{print $1}' とかで切り出せば余分な空白は無くなる。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 01:57:41 $ test ' 0' -eq 0 && echo EQ EQ : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 08:45:20 GNU wc は、wc -l とか wc -c とかの時、余分な行頭スペースは入らない。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 09:17:16 awkなんか使わなくても、 [ `wc -l < file` -eq 123 ] でいいだろ。 "`wc -l .. `" じゃなくて単に `wc -l ...` にする。 シェル依存。 $ test ' 0' -eq 0 && echo EQ test: 0: bad number : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 18:16:27 初歩的な質問だと思うんですが bashでテキストファイルで空欄があるところを改行に変換するシェルスクリプトを作りたいんですが どうすればよいでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 19:18:38 まず服を脱ぎます : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 19:26:54 man tr : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 19:57:24 #!/bin/bash man tr < file.txt ってやってみましたが、動作が変です。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 20:23:38 いいから man tr しなよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 20:25:31 こうですかぁ?? ↓ ---- #!/bin/bash いいから man tr < file.txt ---- : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 20:34:58 粘着キチガイ犬はこのスレにも粘着してるのか? : 名無しさん@お腹いっぱい。 [sage] 2010/06/27(日) 23:28:39 相手すんな。 : >>499 [sage] 2010/06/29(火) 01:20:15 thanks. : 名無しさん@お腹いっぱい。 [] 2010/07/27(火) 03:09:25 初歩的なものですみません。 #!/bin/bash hostname $hostname = `hostname` echo $hostname 上記のシェルスクリプトを実行すると hostnameだけの行はしっかり標準出力にホスト名が表示されるのですが、 $hostname = `hostname`で command not foundと怒られてしまいます。 なぜでしょうか・・・? : 名無しさん@お腹いっぱい。 [sage] 2010/07/27(火) 03:19:29 すみません・・・。 #!/bin/bash hostname hostname = `hostname` echo $hostname でした。結果が = とだけ表示されてしまいます。標準出力の結果が変数に入っていないのでしょうか : 名無しさん@お腹いっぱい。 [sage] 2010/07/27(火) 03:23:09 hostname=`hostname` : 名無しさん@お腹いっぱい。 [sage] 2010/07/27(火) 03:27:38 ありがとうございます。解決しました。 いろいろやってたら、間違ってhostnameに=を設定してしまっていたことも重なっておりました。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/27(火) 13:02:18 nxt .. g@foo.txt r@ n@bar.txt . : 名無しさん@お腹いっぱい。 [] 2010/07/28(水) 21:03:26 xargsの-Pオプションってありますよね。 マルチコアの上で動かすときに重宝しています。 しかし、例えば for i in *.jpeg do convert $i `basename $i .jpeg`.png done のような多少複雑な操作をxargs -Pのような形で簡単に並列実行することはできるでしょうか? "args"だけでなくてリダイレクトにも使用できることを望んでいます。 # 普段はzsh使ってるので for i in *.jpeg; convert $i $i:r.png とか書いてますが zargsのような、zshに依存するやり方でも構いません。 ご存知でしたら教えていただければ幸いです。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/28(水) 21:09:45 単純にバックグラウンドで、 for i in *.jpeg do convert $i `basename $i .jpeg`.png & done wait でいいんじゃないの。 それよりスペースや特殊記号入りファイル名の対応の方が気になる。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/28(水) 21:28:09 それってファイルが何千とあったら醜い事にならんか? : 名無しさん@お腹いっぱい。 [sage] 2010/07/28(水) 21:42:38 ありがとうございます。 変換する元のファイルも基本的に自分で作成するつもりなので、 ファイル名は「行儀のいい」ものと仮定して、スペースや特殊記号は特に意識していませんでした。 その代わり、ファイル数は100?のオーダーを考えているので、 バックグラウンドに全部一気に詰め込むのではなく、 最大並列プロセス数を与えて、その数だけ常に動かしつづけてくれる仕組みが欲しいのです。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/28(水) 21:43:44 すみません、文字化けしてます。 ×ファイル数は100?のオーダー ○、ファイル数は100 - 10000のオーダー です。 : 518 [sage] 2010/07/29(木) 13:56:52 とりあえず自己解決しました。 zsh依存ですが、例えば function jpeg2png(); convert $1 $1:r.png zargs -P4 -n1 -- $(echo *.jpeg|sed -e 's/ /\n/g') -- jpeg2png とか。 ワンライナーで書きたかったのですが、これ以上にいいやり方ありますかね。 あと、$()の中が若干不細工ですが。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 10:29:17 コマンドラインのオプションはgetoptsで処理しますが、--を先頭に付けた 複数文字のオプションの処理はどのようにやるのが一般的なのでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 11:28:10 誘導されてきました。 プログラムで質問があります。 /hoge/test/ の中に 1filename1.gif 1filename2.gif 2filename1.gif 2filename2.gif があるとします。 # sh /hoge/test/*filename* という感じにコマンドを入力すると それらの複数のファイルが command /hoge/test/1filename1.gif -option /aaa/bbb/1filename1.jpg command /hoge/test/1filename2.gif -option /aaa/bbb/1filename2.jpg command /hoge/test/2filename1.gif -option /aaa/bbb/2filename1.jpg command /hoge/test/2filename2.gif -option /aaa/bbb/2filename2.jpg って感じにファイルが無くなるまで全て、コマンドを実行したいのですが どうすればいいのでしょうか?? : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 11:36:52 for f in "$@" do echo command "$f" -option "${f%%.gif}".jpg done : 524 [sage] 2010/07/31(土) 12:29:25 自己解決しました。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 12:51:27 回答しようと思ったけど自己解決したようだからやめるね : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 14:03:44 getopt_long : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 14:07:36 それはC型言語 : 524 [sage] 2010/07/31(土) 14:39:07 getoptに-lオプション付けて使うんですよね。 これって常識でしたか(笑)。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 14:42:34 でも、getoptを使うとスペース入りのファイル名がうまく扱えなくなる問題があるんだよね : 524 [sage] 2010/07/31(土) 14:48:53 -oオプションを付ければ良いようですよ。 それと$@なんかは"で囲う必要あり。 : 名無しさん@お腹いっぱい。 [sage] 2010/07/31(土) 14:52:31 BUGS Arguments containing white space or embedded shell metacharacters generally will not survive intact; this looks easy to fix but is not. : 名無しさん@お腹いっぱい。 [] 2010/08/08(日) 20:39:19 質問です。 リスト化したファイルを読み込んでfind検索の後、圧縮かけて削除 処理させるスクリプト書いているのですが、どう書いて良いのか?? 1)/home/hoge配下に、sample.lstと言うファイルを作成 2)(1)のリストを読み込んで、最終アクセスが7日経過しているファイルを検索 3)(2)に該当したものを圧縮して、元ファイルを削除する。 /*リスト化ファイル内*/ /home/aaa/abc /home/bbb/abc /* バックアップスクリプト*/ #!/bin/sh BACKUPLIST=/home/hoge/sample.lst FIND=`find $BACKUPLIST -type f -daystart -atime +7 ` tar cvzf `date +%Y%m%d`.tar.gz $TARGET && rm $TARGET もちろん、上記では色々と問題がありますがこう言う風な処理をしたいと。 ttp://centossrv.com/backup.shtml ここの処理に、find検索の処理を追加 出来れば解決なのですが・・・。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 20:40:39 失礼、上記スクリプト内 FIND=`find $BACKUPLIST -type f -daystart -atime +7 ` tar cvzf `date +%Y%m%d`.tar.gz $FIND && rm $FIND でした。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 20:57:36 find [パス] [検索条件] -exec tar -czf $(date +%Y%m%d).tar.gz {} + -delete -print : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 21:06:51 -exec + でも、tarは複数回実行されうるんじゃ? rやuじゃなくcで作ってるとはじめのほうのは失われてしまわないかね? : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 21:14:59 ごめん、全然ダメだった 実行すると超危険なので実行しないで! まじでゴメン>< : >>535-536 [] 2010/08/08(日) 21:17:11 アドバイス有難う。 でも、パスにfind $BACKUPLIST ・・・と書くとリストのパスを参照して 中身を参照検索してくれない。 単純にパスを指定すれば、うまくいくのだが??? find /home/aaa/abc ・・・で findの所はループ処理だ回さないと駄目なのでしょうかね?? 危ない、まだ実行していないので大丈夫wwww : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 21:39:25 $BACKUPLISTの中身が/home/hoge/sample.lstなので find /home/hoge/sample.lst ...が実行されちゃう find $(< $BACKUPLIST) ...しないとダメだね : >>535-536 [] 2010/08/08(日) 21:52:07 レス有難う。 試しに、実行させたらとりあえず動いたんだが tarの処理でエラーが出た・・・。 tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました 一応、圧縮は出来ているようだけど。 後、可能であればで良いのですが圧縮元を/home配下からではなく abcフォルダ配下から圧縮出来ればベストなのですが。 一旦cdで/home/abcフォルダに移動しないとやっぱり駄目なのかな?? : >>535 [sage] 2010/08/08(日) 22:09:46 少々問題が発生したけど、動いたのでスクリプトを整理します。 #!/bin/sh BACKUPLIST=/home/genki/backup/sample.lst FIND=`find $(<$BACKUPLIST) -type f -daystart -atime +7` tar cvzf `date +%Y%m%d`.tar.gz $FIND && rm $FIND tarの際、全角ペースが入っているファイルがエラーになってバックアップ 取れなかった以外は、ほぼ思っている処理が出来ました。 tar: ドキュメント.txt: stat 不能: そのようなファイルやディレクトリはありません tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました 本来なら、新規 ドキュメント.txt と言うファイルがあるのだけど・・・。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 22:10:40 失礼、パスが間違ってた・・・・。 BACKUPLIST=/home/hoge/backup/sample.lst : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 22:18:49 えっと、リストは絶対に必要なのかな? スクリプト内に書いとくのでは駄目なのか ファイルから読み込むとなると、どうしてもループさせることになるので色々と困るのだが… のように空白含むパス名の扱いにも問題が出る BACKUPLIST内のディレクトリの数が数千とかじゃなければスクリプト内に書いたほうが楽 /home/abcってのはちょっとよく分からない では/home/aaa/abc、/home/bbb/abcの2つのディレクトリがあるようだけど アーカイブを2つ作りたいってことなのかな : >>543 [] 2010/08/08(日) 22:42:51 なるべく、リスト内で処理したいです。 理由は、数千もディレクトリは無いにしろ数十・数百あるとかなり厳しいです。 後、スクリプト内を簡潔にしたいのもあります。 でも、の言う通り数十・数百位のディレクトリならスクリプト内に 書いた方が楽なら、そちらの方がベスト!?なのかも・・・・。 確かに、両方abcとあるので分かりにくいので/home/aaa/test1と/home/bbb/test2 なら大丈夫ですかね?? /home/aaa/test1配下と/home/bbb/test2配下にあるものを1つのアーカイブで まとめたいって事です。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 22:50:31 書いてみた #!/bin/bash # ${HOME}以下の相対パスを書く l=("foo bar/" "hoge fuga/") cd ~ mkfifo tmp.fifo find "${l[@]}" -type f -daystart -atime '+7' \ -exec tar -cvzf $(date +%Y%m%d).tar.gz {} + -fprintf tmp.fifo '%P\n' & while read f; do rm -f "${f}"; done <tmp.fifo rm tmp.fifo 本当は素直にfindを2回かけて-exec tar、-deleteすればいいんだけど 条件に-atimeが入ってるので1回目と2回目のfindの結果が変わっちゃう (findではatimeは変わらないけどtarすると変わるらしい) なのでnamedpipeを作ってrmをwhileで回すという面倒臭いことをしてる 削除するファイルが増えればそれなりに遅くなるはず 誰かもっと良いやり方あれば教えてください find一発で出来ないものか : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 23:04:24 それじゃあ、ひと手間増えるけど #!/bin/bash backuplistfile="${HOME}/backuplist" fifo="/tmp/backup.fifo" while read p; do backuplist=("${backuplist[@]}" "${p}"); done <"${backuplistfile}" cd /home mkfifo "${fifo}" find "${backuplist[@]}" -type f -exec tar -cvzf testbackup.tar.gz {} + -fprintf "${fifo}" '%P\n' & while read f; do echo rm -f "${f}"; done <"${fifo}" rm "${fifo}" で、backuplistにはaaa/test1等と書いておけばいい 面倒だなぁ…俺てっきりで行けると思ったのに : >>546 [sage] 2010/08/08(日) 23:06:18 スクリプトthx とりあえず、なにかベストなやり方をもう少しググってみます。 他にもっとベストなやり方があればアドバイスよろしくお願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 23:09:52 同じくスクリプトthxです。 明日ちょっと、実行させてみます。 結果はまた報告します。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/08(日) 23:10:52 -fprintfの%Pは%pの間違いでした、ごめんちゃい : 名無しさん@お腹いっぱい。 [sage] 2010/08/09(月) 14:34:41 cpio や pax でも tar 形式のアーカイブは作れるということは知っておいていいと思う。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/09(月) 14:52:50 マジでっ!? : 名無しさん@お腹いっぱい。 [] 2010/08/09(月) 17:37:58 bash の for xxx; do xxx; done のループで、 ループから脱出(break;) したり、次の周回に飛ぶ(continue;) には、 どうするのがよいのでしょうか。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/09(月) 17:42:50 普通にCと同じようにbreakとcontinueが使えるよ : 名無しさん@お腹いっぱい。 [sage] 2010/08/09(月) 17:43:43 自分で答え書いてるじゃん。 break とか continue とか実行すればいいだけ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/09(月) 18:17:38 むしろ一気breakが出来て便利だよな。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/10(火) 17:09:38 起動時のスクリプト実行時に、USBの認識が間に合わないようなので、 mountの実行を5秒程度スクリプトのなかで遅らせたいんですが どのようにすればよいですか? : 名無しさん@お腹いっぱい。 [sage] 2010/08/10(火) 17:43:51 sleep 5 : 558 [sage] 2010/08/10(火) 22:45:52 >559 どうもです : 名無しさん@お腹いっぱい。 [sage] 2010/08/10(火) 23:18:19 起動スクリプトいじるような人がまじでsleep知らなかったの? : 名無しさん@お腹いっぱい。 [sage] 2010/08/10(火) 23:29:09 GNOMEのエディターで編集やってたりして : 名無しさん@お腹いっぱい。 [sage] 2010/08/11(水) 07:33:15 いいえ、サンバでメモ帳です : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 07:22:26 起動スクリプトにsleepが入ってるのは良い設計ではない。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 07:34:16 まあ、RHELでもこんなもんだ: $ grep sleep /etc/init.d/* | wc -l 37 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 07:34:44 そりゃ、RHELだもん。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 07:42:15 ubuntuはSys V initを捨てたからここらへんは掃除されてるのかな? だれがgrepしてみて。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 07:45:06 それ、whileループ中で、あるコマンドを実行し、失敗した時のみ sleepしてからリトライするという記述がメインなので、 通常時はsleepは実行されないし、問題ない書き方なんだよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 12:45:45 そう思うだろ? 実際見てみると、正常ルートなのに笑えるほど寝てるぜ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 12:49:58 ウザス : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 13:19:05 確認したけど、1番目の起動スクリプトが実行開始されてから 最後の起動スクリプトが終了するまでトータルで1秒未満なので、 sleepは1度も実行されてない。 OS起動時は、起動スクリプトの速度はネックになってなくて、 むしろ、カーネル自身のデバイス認識部分とかに時間がかかってる。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 16:30:34 [OK] [OK] ・ ・ ・ ・ が1秒以内に終わる・・・?超進化してるな。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 16:52:40 それよりも、rcスクリプトを捨ててSMFに改良したはずなのに、 未だに起動が激遅なSolarisを何とかしてください。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 18:59:43 なぜだめなの? : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 19:15:53 非同期処理の終了をタイミングで取る→機種依存 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 19:27:44 単純にsleepで待ってるんじゃなくて、実際にはこういう処理だよ ↓ while ! command do sleep 1 done どこにも機種依存要素はないし、 この処理で sleep を外したらそれこそ busy loop で重くなる。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 19:34:39 >どこにも機種依存要素はないし こいつアホ(AAry : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 19:52:37 いや、これ最高にアホだろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 20:14:53 rcスクリプトなんて、そもそも環境依存するもんだろ : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 20:26:06 ここで言う機種依存といのはハードウェア構成依存という事だろう。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 20:50:29 それは分かってるんだが。 大量に同一用途のサーバー管理するんでもなきゃ、 わざわざ可搬性を考慮するのなんて、バカバカしいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 21:19:44 ぜんぜんわかってねぇなw : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 23:02:33 反論も出来ないならひっこんでろよ : 名無しさん@お腹いっぱい。 [sage] 2010/08/12(木) 23:16:36 何イライラしてるんだよw sleep同期君 : 名無しさん@お腹いっぱい。 [sage] 2010/08/13(金) 11:23:11 ハードウェア依存の問題を回避するためのworkarroundとしてsleep入れるんじゃないの? 別に問題ないと思うけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/13(金) 12:03:28 アンチsleep君の主張はよくわからんな そもそも非同期処理じゃないし… : 名無しさん@お腹いっぱい。 [sage] 2010/08/13(金) 12:46:07 SMFやrcngのような同期をとる機構がないのがクソと言いたいのだろう。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/13(金) 13:07:37 この文脈でなぜSMF? あれはタイマ割り込み使って音源鳴らしてるだけだろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/13(金) 13:08:45 この文脈でSMFと言ったら、Service Management Facilityに決ってんだろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/13(金) 13:43:34 GNU sleepだと sleep 0.001 とかできるから、 SMF再生するシェルが書けそうだな。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/13(金) 14:17:12 シェルってゆうな。クズ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 19:16:35 Makefileのなかで、tarコマンドを使いたいんですが、うまくいきません 単純に tar directry/faile.tar tergetdir/ としてみたんですが : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 19:33:45 シェルと関係ない話は別スレでやれよ(Makefileとも関係ないし) まあ、f と -C オプションが落ちてるのが原因だけどな。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 20:07:24 なんでこのスレ選んだんだw : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 20:09:52 directry faile terget 英語初心者スレが適当だね : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 20:37:55 まぁ、ファイル名は別にどうでもいいと思うが オプションがないね man tarオススメ tar cf foo.tar bar tar cfz foo.tar.gz bar tar cfj foo.tar.bz2 bar : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 21:11:10 tar作成じゃなくて、展開じゃないの? : 592 [sage] 2010/08/20(金) 21:29:35 すいません tar xvfp directry/file.tar tergetdir/ でした : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 21:36:30 Makefileにターゲットもなくいきなりtarコマンドを書いたと見た。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/20(金) 22:12:32 だから、 が言うように -C を付けろよ : 592 [sage] 2010/08/20(金) 22:26:50 やっとわかりました。どうも : 名無しさん@お腹いっぱい。 [sage] 2010/08/22(日) 09:15:58 shine : 名無しさん@お腹いっぱい。 [sage] 2010/08/22(日) 09:48:13 シャイン? 輝けって? : 名無しさん@お腹いっぱい。 [] 2010/08/23(月) 22:07:15 OS:FreeBSD passwd(1)をシェルスクリプトでバッチ的に流すにはどうすればいいのでしょうか。 2回聞かれるところとかが、どう書けばいいのかわかりません。 お願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/23(月) 22:13:46 標準ツールじゃないけど、expect使ってみるとか。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/23(月) 22:26:36 chpasswdってBSDには無いの? : 名無しさん@お腹いっぱい。 [sage] 2010/08/26(木) 14:17:56 pw コマンドで -h 0 とすると標準入力からパスワード読み込むよ。 : シェルマスター [] 2010/08/28(土) 00:16:37 シェルスクリプトをシステム管理に活かすなら、 お前らならどんなシェルスクリプトを作る? : 名無しさん@お腹いっぱい。 [sage] 2010/08/28(土) 00:48:13 手作業でやってる作業のうち、繰り返しやるものを折りを見てスクリプト化してくだけ。 : 名無しさん@お腹いっぱい。 [sage] 2010/08/28(土) 03:14:39 起動時に毎回することを自動化 : 名無しさん@お腹いっぱい。 [sage] 2010/08/28(土) 12:19:38 ちょっとした単発のデータまとめとかの下処理用。 ログをcsvに整形してExcelのオートフィルタで分析とか。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/01(水) 09:09:06 以下のようなシェルスクリプトを用いて1つの端末にタブで複数のプログラムを動かすってのをやってます。 ただ、これだとプログラムが終了したりするとタブが閉じちゃうので、終了した後でもまたそこから コマンドが打てるように改変したいのですがどのようにやれば良いのでしょうか? #!bin/sh gnome-terminal \ --tab --working-directory=`pwd`/hoge/ -e "command" \ --tab --working-directory=`pwd`/foo/ -e "command" \ --tab --working-directory=`pwd`/bar -e "command" \ 一応ググってみると gnome-terminal -x bash -c "command1; command2; exec bash" こんな表記を使うとその後もコマンドを受け付けるみたいなのですが、 上のスクリプトとの組み合わせ方が上手くいかず、タブが起動しなかったりプログラムが起動しなかったりします。 OSはUbuntuなのでシェルはbashになると思います。お願いします。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/01(水) 09:34:17 gnome-terminal -e 'bash -c "command1; command2; exec bash"' : 名無しさん@お腹いっぱい。 [] 2010/09/01(水) 17:51:34 複数のプロセスを切るときに、いちいちコマンドでひとつづつ切るのが面倒です。 そこで、シェルで一気にプロセスをきりたいのですが、どのように記述すればいいですか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/01(水) 18:06:22 zshなら kill -KILL {1..99999} みたいな? たぶん argument list too long とかいわれるんで、分割いるけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/01(水) 18:53:26 pkillとかか? 使えるかは環境によるけど。 : 名無しさん@お腹いっぱい。 [] 2010/09/01(水) 19:55:10 説明ぬけててすみません。 そうですpkillです。 であとシェルの種類はbashでやりたいんです。 んで流れ的には612のように、1つの端末にタブで複数のプログラムを動かします。 んで複数のプログラムのプロセスをシェルを実行するだけですべてを切りたいんです。 そのようなシェルを作るにはどうすればよいですか? ちなみに環境はubuntu10.04です : 名無しさん@お腹いっぱい。 [sage] 2010/09/01(水) 20:05:56 おまえ か? には礼なしかよw はできたんだな? だったら、pkill -HUP gnome-terminal とかすれば、 その gnome-terminal から派生したプロセスは(普通は)まとめて終了する。 ただし、個々のプロセス側でシグナルを無視してたり、 setsid()とかで別セッションを開始してる場合(デーモン類等)は 終了しないけど、これは仕方ない。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/01(水) 20:30:05 シェル作っちゃう人だし : 名無しさん@お腹いっぱい。 [sage] 2010/09/01(水) 23:06:53 killすることを「切る」って言うもんなん? : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 00:01:55 うまい事言うなと思ったが単に変換エラーかもしれんなw : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 07:31:04 >シェル作っちゃう人だし えっ? ここの住人は自分でシェル作れないんですか? ネットからのコピペ(+改変)専門ですか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 08:46:53 シェルスクリプトスレだからね。 シェルスクリプトは書けるけど、シェル作れる奴なんてここにはいないよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 08:54:34 難しく考えずにまずは自分でシェル作ってみたら? ハローワールドのシェルなんてたった2行で作れるよw : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 08:55:03 ネタはいいから。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 09:56:23 その2行のソース読ませてくれない? 何万文字で2行なんだ? : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 09:57:46 2行だとこれで終わりなんだけど。 #include <stdio.h> #include <stdlib.h> : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 10:07:46 シェルを書いても「スクリプト」で使うことはないなぁ。 スクリプトにするならperlだし。 シェルはスクリプトにはせずにコマンドとして使う。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 10:11:26 70文字で2行だよw #!/bin/sh while echo -n 'myshell> '; read line; do eval "$line"; done : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 10:22:08 オマエくらい知能が低く生まれたかったわ マヌケな2行でご満悦か 毎日幸せだろ?ww : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 10:30:44 だよな。 whileの後に echoなんて書いても動くわけないし、 doより前に ; なんて書いてるからここでエラーになるはず。 試さなくてもわかる。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 10:38:00 見下したつもりの相手よりレベルが低いって……。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 11:44:48 > すべてを切りたいんです。 とか言ってるから変換ミスではないと思う。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 12:09:58 $ cat 2sh.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <sys/types.h> #include <unistd.h> void child(int argc, char **argv); int main() { int argc, n = 0; int status; char input[10000], *argv[256], *cp; const char *delim = " \t\n"; : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 12:11:09 while (1) { ++n; printf("[%s@2ch]$ ", getenv("USER")); if (fgets(input, sizeof(input), stdin) == NULL || input == 4) { exit(0); } cp = input; argc = 0; while (argc < 256) { if ((argv[argc] = strtok(cp,delim)) == NULL) break; cp = NULL; argc++; } : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 12:12:14 if(strcmp(argv[0], "exit") == 0) { exit(0); } pid_t pid = fork(); if(pid == -1) { perror("fork"); exit(1); } else if(pid == 0) { child(argc, argv); } else { wait(&status); } } } void child(int argc, char **argv) { execvp(argv[0], argv); } : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 17:50:53 おまいらって変なとこで意固地になるよなw : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 17:54:12 てゆーか、 input == 4 ← inputは char *型なのに とか、 execvp(argv[0], argv) の引数が足りないとか、 間違いがあるとネタにもならんな。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 18:02:38 シェルぐらい1行で書けよw int main(){char b[256];while(printf("hoge> "),gets(b)){system(b);}return 0;} コンパイル、動作確認済み。warning無視 : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 19:07:59 万能ソース #include </dev/tty> : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 19:18:51 634涙目w : 名無しさん@お腹いっぱい。 [sage] 2010/09/02(木) 19:22:23 /bin/sh のラッパーである system() を使って 「シェルできました」と言うのはちょっとなぁ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/03(金) 08:44:51 ここはシェルスクリプトスレなんで シェルを書く話はよそでやってください。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/03(金) 14:59:28 じゃあ、system()なしで書いたよ↓ main(){char b[256];while(printf("hoge> "),gets(b)){fork()?wait(0):_exit(execlp(b,b,0));}} : 名無しさん@お腹いっぱい。 [sage] 2010/09/03(金) 15:14:23 とんちやってるんじゃないんだから、exec系も無しだろう。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/03(金) 15:18:17 えぅ? おまえ のプログラムの動作理解してないだろ : 名無しさん@お腹いっぱい。 [sage] 2010/09/03(金) 19:38:51 は実際のシェルはexec使わずに実装されてるとでも思ってるのだろうか : 名無しさん@お腹いっぱい。 [sage] 2010/09/03(金) 20:12:21 printf("hoge> "),gets(b) カンマ区切りの実行順は確定だっけ? : 名無しさん@お腹いっぱい。 [sage] 2010/09/03(金) 20:41:07 カンマ演算子は左が先。 関数引数のカンマで区切られた各項の評価順序は不定。 「副作用完了点」でぐぐろう。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/05(日) 19:15:10 そんなに上げ足とらなくても、シェルスクリプトとシェルの誤用くらい文脈でわかるだろ。 SQL ServerをSQLって呼ぶのに比べりゃ大したことない。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/05(日) 19:44:10 じゃあPC98をさして一太郎といってもいいんですか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/05(日) 19:51:18 そもそも誤用でもないし : 名無しさん@お腹いっぱい。 [sage] 2010/09/05(日) 20:53:42 揚げ足ってどのレスのことだよ : 名無しさん@お腹いっぱい。 [sage] 2010/09/05(日) 21:11:54 に対するから始まったシェルを作るって話のこと。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 00:34:26 俺は50ccATミッション車を総合的に「ラッタッタ」と呼ぶ。 異論は認めない : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 08:56:24 俺は JIS規格のステープラのことを総合的にホッチキスと呼ぶ 異論は認めるw : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 16:07:08 俺は、白い綿シャツを「ホワイトシャツ」と呼ぶ、ネイティブな 発音は認めない : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 16:14:46 もういいです。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 16:21:04 俺はPCなどのコンピュータハードウェアのことをミシンと呼ぶ(サーバーミシン等) 縫製機械のことを連想してしまうやつは認めない。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 18:58:16 うちのおかんはゲームコンソールは全てファミコンという : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 20:06:12 for file in * do mv "$file" "${file/hoge/piyo}" done : 名無しさん@お腹いっぱい。 [] 2010/09/06(月) 20:48:12 同時に8スレッド走るCPUで大量のシェルスクリプトを実行したくてxargsつかっているのですが、 うまく動かなくて困っています。分かる人教えてください。 やりたいことは、数値計算の実効シェルスクリプト(300個くらいある)を同時に最大8個走らせ、 一つ終了したら次が始まるようにしたい。 args.listファイルにシェルスクリプトの絶対パスを1行ずつ書き並べて xargs --arg-file=args.list --max-procs=8 -L 1 としましたが、topコマンドで確認しても全く動いている気配がありません。 クラスター用のjobマネージャは使わず、あくまでlinuxで一般的に使えるコマンドで済ませたいです。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 20:57:54 犬板に(・∀・)カエレ!! : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 21:32:30 --arg-file はあくまで「引数」リストだから。 実行するシェルスクリプトを書き並べても引数になるだけで実行されない。 実行するには xargsのコマンドとしてシェルを書かないと。 xargs --arg-file=args.list --max-procs=8 -L 1 sh : 名無しさん@お腹いっぱい。 [sage] 2010/09/06(月) 23:46:45 そんなに時間が惜しいなら、最低限LLでやるべきだろ。 : 662 [sage] 2010/09/07(火) 01:41:39 おお、できました! 自分も引数リストであることは引っかかっていたのですが、どう解決すればいいか分かりませんでした。 ありがとうございました。 これは私に対するレスですか?LLというのはAWKとかParlとかのことですか? 『LLを使うと時間短縮になる』というイメージが湧かないのですが、具体的にどんな方法があるんでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 01:43:34 実際Perlとかで書いてみて時間計って、 シェルスクリプトと比べてみるといいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 06:33:27 > シェルを書かないと。 ↑シェルを書いちゃう回答者現るw : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 08:15:01 shってシェルじゃないの? : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 08:15:29 そこはシェルでおけ : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 09:37:54 一般的な呼び方だと、ボーンシェル、Bシェル(ビーシェル)と 呼ぶんで、シェルとは呼ばない。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 09:47:45 指定したシェルスクリプトを実行するシェルなんだからいいじゃんか そのうちshと想定して回答しただけだろ 字面で反応した恥ずかしいミスを指摘されてキョドるなよ : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 09:59:19 スクリプトの前にアンカー覚えろよ : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 12:29:12 > 数値計算の実効シェルスクリプト(300個くらいある) これって「数値計算」をシェルスクリプトでやってるのかなあ? : 666 [sage] 2010/09/07(火) 12:30:37 科学計算についてどの程度知った上でのレスでしょうか? 300個ある実行シェルスクリプトは全て、中でFortranのプログラムを呼び出しているだけです。 シェルスクリプトは初期値や環境変数の設定に使うだけであって、それで数値計算しているわけではないです。 『Perlで書いてみて』というのは、具体的にどの部分を言っているのですか? : 666 [sage] 2010/09/07(火) 12:32:32 レスがかぶった。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 12:55:12 さー 情報後出し祭りに突入してきましたよ : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 12:59:10 情報後出しじゃないだろ の質問は で解決してる。解決報告は 質問の解決後に の Perl厨が余計なことを言い出した。 それに対する反論として が書かれただけ。 Perl厨はきっと今ごろ赤面w : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 14:21:26 そうか? 別に深く追求しないで 「単純に時間を計って比べてみな」ってだけなんだから 「現状が速いです」で済む話なんだが? : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 15:07:59 >300個ある実行シェルスクリプトは全て、中でFortranのプログラムを呼び出しているだけです。 なんで、ここもプログラムにしないの? 普通は、函数化はしてあるだろうから、それを呼び出すようにするだけじゃん。 わざわざシェル経由して、xargsでこねくり回す意味がわからんわ。 完全に情報後出しの下手ないい訳だなw : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 15:13:56 よくよめ xargs使うのは、-max-procs=8 を指定したいから。 同時に動くプロセスを常に8個に保った状態で回したい。 これはFortranだけではできない。 -max-procs=8については最初の質問の に書かれている。 全く持って「後出しではない」 : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 15:17:44 >普通は、函数化はしてあるだろうから、それを呼び出すようにするだけじゃん。 ↑ それを呼び出すようにするだけだとシングルスレッドにしかならないよ。 8スレッド使いたいという質問だったのでは? : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 15:43:23 だから、並列化の部分のところを含めてプログラムにすれば? と、言ってると思うんだが? >>これはFortranだけではできない。 数値計算の並列化なんて、Fortranの最も得意とするところじゃん。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 15:44:00 特定のパラーメータ振ったデータを生成して、fortranの解析プログラムを起動する スクリプトなんだろ。そもそもそういう解析プログラムはコマーシャルソフトや別 部門が作ったソフトの場合が多く、それを呼び出すようになど出来ない場合が多い。 他にも、解析プログラムに、汎用でない特定の用途のパラメータ振りを組み込む事 は嬉しくないから、スクリプトで対応する可能性もある。 を読んでその程度を推測できないアマチュアはネチネチと絡むんじゃねーよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/07(火) 16:21:55 >>これはFortranだけではできない。 >数値計算の並列化なんて、Fortranの最も得意とするところじゃん。 話をすり替えてはイカン。 数値計算の並列化の話ではなくて、 既存の複数のFortranプログラムを「プロセスをちょうど8個に保ったまま並列起動」したい という話。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 07:17:49 長い文字列を変数に代入するとき読みやすいように、その文字列を複数行に 分けたいのですけど、お勧めの方法はなんでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 07:24:23 普通にバックスラッシュで改行すればいい。 「バックスラッシュ+改行」は消えてなくなって代入される : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 08:46:11 つまり declare str="xxx"\ "yyy"\ "zzz" ということですか。 ちょっと見辛いのですよね。 他にありませんでしょうか? C++だと declare str="xxx"\ "yyy"\ "zzz" のように書けるのですが。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 09:30:34 こんな馬鹿もプログラマーなのか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 09:30:45 おいおい、C/C++ならそんなことしなくても、 str = "hoge" "boke" "aho"; と書けるだろw : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 09:52:25 データ上はあくまで1行の文字列を、 文字列が長過ぎる(たとえば100文字以上)だから、 スクリプト上では2行以上にわけて記述したいという話だろ? だったら、2行目以降はインデントせずに 行頭から記述した方が、前の行からデータが継続していて 実際は1行であることがわかりやすい。 (変にインデントするとスペースやタブや改行がデータに入ってるように誤解する) よって、 の言う方法で良い。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 09:59:25 str="xxx yyy zzz" : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 10:02:42 質問良く良め。それだと改行が入るだろw (質問は な) : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 10:16:11 そういうのは最低限LLでやるべきだろ。 実際Perlとかで書いてみて、 シェルスクリプトと比べてみるといいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 10:31:54 意地悪ですねw。 LLってなんですか? 学がなくて申し訳ないです。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 10:35:47 むかし英語の教材であったな。ステレオトラックの片chに自分の発音を重ねて録音できる。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 11:23:06 バックグランドで動いているプロセスが吐き出すメッセージを スクリプトで取得したいのですが、上手くいきません $ hoge.sh > log & とのようにすれば可能なのは理解しているのですが、 $ hoge.sh & > log を実現したいのです hage.sh内でhoge.sh &を実行しているのですが、 どちらも改変不可なのでhige.sh->hage.sh->hoge.sh と呼び出さざるを得ません コマンドラインからhage.shを実行するとhoge.shの出力が画面上で 得られますが、hige.shから呼び出すと、なにも出力されなくなります このようなことは可能でしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 11:39:30 (hoge.sh &) > log : 697 [sage] 2010/09/10(金) 12:31:26 できました! サブシェルを使うんですね : 697 [sage] 2010/09/10(金) 14:52:39 引き続きですいません どうも出力がバッファリングされているようで、 hoge.sh終了までファイルに書き込まれません ぐぐるとsttyで制御するようなので stty raw; ( hoge.sh & ) > log ; stty sane; tail -f log とか ( stty raw ; hoge.sh & ) > log ; stty sane; tail -f log とかやってみましたが、バッファリングが止まりません 解決するための設定・コマンドはありますでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 16:41:21 (hoge.sh &) > log hoge.sh > log & そもそも、前者によって何を実現したくて、それが何故後者では実現できないのかが分からない。 hage.sh, hoge.shが改変不可で、そのラッパーであるhige.shを作る(のですよね?)、そして > コマンドラインからhage.shを実行するとhoge.shの出力が画面上で > 得られますが、hige.shから呼び出すと、なにも出力されなくなります のようにしたい(のですよね?)って言う話と、最初の話がいまいち繋ってこないんだけど。 ってか exec > log hoge.sh & じゃ駄目なんだろうか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 16:49:27 stty無関係。 仮にhoge.shが下のようなのだと、ちゃんと出てくるはず。 #!/bin/sh echo 1 sleep 5 echo 2 sleep 5 echo 3 hoge.shの中で動かしているプログラムが端末以外に出力するときに 勝手にバッファリングするようになってるんじゃないか? : 697 [sage] 2010/09/10(金) 17:49:17 それです! さらにこの先に、1分間だけ出力ログを監査して問題なければlogoutというのが待っていまして、 そのため第一弾としてログに吐かせようとして、なんだか山にぶつかってたというところです 上手くいけばログをパイプ変更して監査スクリプトに渡すところを作って完了です 土日で終わるといいな。。。 > exec > log > hoge.sh & これ、あっさりいけました! execって引数なしだとリダイレクトなんですね この使い方初めて知りました その通りでした hoge.shの中でいろいろコマンド呼び出してるんですが、 それがバッファリングしてました こっちは改変できそうなのでなんとかなりそうです これで先に進めますm(__)m : 名無しさん@お腹いっぱい。 [sage] 2010/09/10(金) 23:52:06 > この使い方初めて知りました シェルの基本ですよ。 ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node62.html 他にも以下を知ってることを確認しておくと良いです。 ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node31.html ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node40.html ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node64.html ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node65.html ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node66.html また、時間があるときにでも、全部読んでおくべきです。 ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/sh.html : 名無しさん@お腹いっぱい。 [sage] 2010/09/11(土) 00:02:24 ttp://www.google.com/search?q=csh+whynot : 名無しさん@お腹いっぱい。 [sage] 2010/09/12(日) 04:53:07 シェルスクリプトで、変数値を変数名として使用したいのですが可能でしょうか? 例えば、 =============== VAR1="ABC" VAR2="DEF" VAR3="GHI" AAA1="VAR1" AAA2="VAR2" AAA3="VAR3" =============== として、通常であれば、$VAR1・$VAR2・$VAR3となると思うのですが、 これをAAA1〜3の値を変数名としてfor文で「$i」使用してVAR1〜3の値を参照したいのです。 よろしくお願い致します。 : 706 [sage] 2010/09/12(日) 04:55:33 書き忘れました。bashスクリプトです。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/12(日) 05:16:42 for i in AAA1 AAA2 AAA3; do i=${!i} echo ${!i} done かな。もちろん/bin/shでは動かないけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/12(日) 06:45:55 bash依存じゃなくてできる。(純正/bin/shでも動く) ↓ VAR1="ABC" VAR2="DEF" VAR3="GHI" AAA1="VAR1" AAA2="VAR2" AAA3="VAR3" for i in AAA1 AAA2 AAA3 do eval echo '$'$i done : 名無しさん@お腹いっぱい。 [sage] 2010/09/12(日) 06:53:48 2重間接だよ。もう1段 evalが必要。 eval eval echo '"$"''$'$i : 名無しさん@お腹いっぱい。 [sage] 2010/09/12(日) 20:32:49 そういうのは最低限LLでやるべきだろ。 実際Perlとかで書いてみて、 シェルスクリプトと比べてみるといいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/12(日) 21:26:47 つまらん。やめとけ。 : 697 [sage] 2010/09/13(月) 18:49:51 shで入力待ちのタイムアウト処理をしようと ttp://www.edu.ics.saitama-u.ac.jp/~j0114ky/first/html_enshu/10.4.html のタイムアウト処理を実行したところlinuxで動きませんでした ttp://www.nurs.or.jp/~sug/soft/super/bash.htm#sec7 の例も動かず、二日悩んでsolaris10で動かすとちゃんと動く bashのバージョン違いで挙動が変わるのかと思いつつ、 /bin/配下を眺めてると/bin/bshを発見、あっさり動きました。。。 あんまりこういう使い方はしないと思いますが備忘録的に残しておきます ありがとうございます shはrcを眺めて覚えたんですが、一度はちゃんと仕様から勉強するべきですね : 名無しさん@お腹いっぱい。 [sage] 2010/09/13(月) 19:00:50 せっかく bashがあるんならもっとスマートにタイムアウト処理できるよ。 こっちがお勧め(5秒待ちの例) ↓ read -t 5 hoge : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 00:20:51 参考になったぜ。thx! : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 22:11:42 指定した年月の月末&その先月末をあっさりと出す方法はないでしょうか。 e.g. 200909 -> 20090931 & 20090831 date -d "1 month 1 day ago YYYYMMDD"でいけると思っていましたが、 「-dなんてネーよバーカ」とSunOSに怒られました。 閏年を考慮しない方法で無理矢理書きはしましたが、 なにかスマートな方法があればお教え下さい。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 22:13:37 200909 -> 20090930 & 20090831 でしたねスミマセン : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 22:40:14 SunOS知らんけど俺の環境では YYYYMM=200909 date -j -v+1m -v1d -v-1d ${YYYYMM}010000 +%Y%m%d date -j -v1d -v-1d ${YYYYMM}010000 +%Y%m%d -v1dは冗長かも : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 22:47:26 FreeBSDの話なんかしてねーよ : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 22:53:40 perl入れてperlで書けや : 716 [sage] 2010/09/14(火) 22:55:40 そんなべんりーなオプションはなく、 ttp://docs.sun.com/app/docs/doc/819-1210/date-1?l=en&n=1&a=view こんな感じのオプションしかなかったです : 716 [sage] 2010/09/14(火) 23:00:17 その処理だけPerlで書いて外部コマンドとして呼ぶことも候補には入れていますが やっぱりできればシェルスクリプトで書きたいと思っていました。 (モジュールを追加できないので標準モジュールでどこまでできるかも不明ですし) : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 23:02:28 文字列を年と月に分けて閏年をまじめにチェックするしか方法ないんじゃない? if文とexprのいい練習課題だね : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 23:05:27 そういうのは最低限LLでやるべきだろ。 実際Perlとかで書いてみて、 シェルスクリプトと比べてみるといいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 23:08:23 配列とか使うわけじゃないし、どっちで書いても大差ないだろうね とマジレステスト : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 23:08:54 Solarisのdateコマンドって、現在時刻以外を指定できないんだよ。 だから が言うような if や expr では解決しない。 Solarisのdateで現在時刻以外を指定するのに、 環境変数TZをいじって 24時間を超える大きなタイムゾーンを捏造するという 裏技があるが、そういう変な方法しかない。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 23:12:17 は date自体を使わずに、日付の数値を自分で計算しろと言ってるのでは? : 名無しさん@お腹いっぱい。 [sage] 2010/09/14(火) 23:54:36 閏年とか面倒ならその辺はcalに任せればいいのでは。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 00:04:20 参考: 指定月の月末日を求める set `cal 8 2010`; shift `expr $# - 1`; echo $1 : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 01:02:19 おもしろいやり方してるな。 俺は普通にgrepとtailとsedあたりでやることを考えてしまうんで、ちょっと新鮮だ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 01:07:27 可搬性はあまり確かめてないけど、Mac(BSD系)では動いてる気がする。 cal 8 2010 | tr -s ' ' '¥012' | sed -n '$p' : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 01:23:18 Solaris 10, Ubuntu 10.04はokだった。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 02:32:21 arg配列のそんな使い方があったのか。 自分が思いつくのは普通の 配列だな。 $ DAYS=(`cal 8 2010`); echo ${DAYS[`expr ${#DAYS[*]} - 1`]} : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 16:35:01 grepとかsedみたいにshで出力を処理したいんだけど ./example | while read x do なんか処理して変数代入とか done 変数を利用して後処理 というのをパイプ(サブシェル)を使わずにできない? 変数相当の値を一旦外部ファイルに書き出さないと駄目かな exampleの出力を自身の入力にできるといいんだけど : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 16:51:27 RESULT=`./example | while read x do なんか処理して echo 処理結果 done` "$RESULT" を利用して後処理 : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 17:44:06 ./example |{ while read x; do ... done; echo $hoge;} のようにすれば、while の外に出ても {} の内側にいるかぎりは変数の値が見える。 以下のようにすればそもそもサブシェルが生成されないが、 何やってるのかひじょーにわかりにくいのでオススメはしない。 while read x; do ... done <<_EOF_ `./example` _EOF_ bash 限定。 while read x; do ... done <<<"`./example`" : 名無しさん@お腹いっぱい。 [sage] 2010/09/15(水) 19:46:27 #!/bin/sh [ -z "$HOGE" ] && { ./example | HOGE=hage exec $0; } while read x; do なんか処理して echo 処理結果 done : 716 [sage] 2010/09/16(木) 01:30:00 cal…正にこれが求めていたものです! UNIXを初めて触ったころには使っていましたが、 それ以来一切関わることなく脳内から完全に抜け落ちていました。 cal出力の最後を月末とすることでうまくいきそうです。 レスくれた方ありがとうございました! : 名無しさん@お腹いっぱい。 [sage] 2010/09/16(木) 19:10:11 cal はK&Pの「環境」のシェルスクリプトを作成する例で使用されていて、 斯界のおっさんたちは皆一度は試してるんだぞぉ : 734 [sage] 2010/09/16(木) 19:11:08 thx! 737は思いもつかなかったが、こういう書き方もあるのか : 名無しさん@お腹いっぱい。 [sage] 2010/09/16(木) 19:23:19 って環境によってはハングして動かないよ。 ネタで書いてると思ったよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 07:42:06 どんなヘボシェルだよ。ww : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 08:09:55 FreeBSDの/bin/shで、 動かないよ。 たしかにFreeBSDはヘボだな。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 08:31:55 これならヘボいのでも動くだろう。 [ -z "$HOGE" ] && { ./example | HOGE=hage $0; exit; } : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 08:41:25 逆に、 が動くようなシェルなら、 わざわざこんなことしなくても、 command | while ... がサブシェルにならないから、 最初から command | while ... と書けばいいんだな。 よって、 は全然解決になってない。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 08:51:57 改訂版が出てるんだから、言いがかりならそっちに付けろよ。w : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 09:09:00 採点が終ってから答を直しても単位はあげられないんだよ : 名無しさん@お腹いっぱい。 [] 2010/09/17(金) 09:15:55 同じサブシェル問題だと、後付けで気付いて言いがかり付けでもダメ。ww : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 09:18:43 同じサブシェル問題だと、後付けで気付いたのはお前の方だろw 俺は最初からわかってたよ。 : 名無しさん@お腹いっぱい。 [] 2010/09/17(金) 09:22:05 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 09:36:12 少なくとも >どんなヘボシェルだよ。ww ↑って書いてる時点で 742 はサブシェル問題だと気付いてないよね。 FreeBSDだけじゃなく、フツーのbourne shでは動かないことに この時点でまだ気づいてないww : 名無しさん@お腹いっぱい。 [] 2010/09/17(金) 09:38:58 わかっていなくても、試すだけでは書けるからな。 > 俺は最初からわかってたよ。 と言いたいのだったら最初から書くべきだったな。ww : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 09:43:14 最初からわかってたのは本当だ。 でも答を書いてしまうと面白くないから 他の反応を見るために書かなかった。 「ネタで書いてると思ったよ」という言葉に、 「サブシェル問題の解決なのにサブシェル問題に引っかかってるという笑いネタかw」 というニュアンスを含ませたつもりだが、読みとれなかったかい? : 名無しさん@お腹いっぱい。 [] 2010/09/17(金) 09:45:10 涙ぐましい渾身の後付け言い訳。ww : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 09:48:05 はっきり言えることは、 自身が 737 を書いた時点で、 「全然問題の解決になってない」ということを理解していなかったということだ。 これだけは紛れもない事実。 : 名無しさん@お腹いっぱい。 [] 2010/09/17(金) 09:52:19 事実は > 俺は最初からわかってたよ。 と、が後付けで必死に言い張っている事。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 09:54:04 741 をいくら叩いても の恥ずかしさを弁解できないことは理解してますか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 09:56:58 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 10:10:47 バグはそんなに恥ずかしくない。後付けで↓と言い張るよりは。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 > 俺は最初からわかってたよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 10:20:59 じゃあ、バグを認めずに(バグの原因を理解せずに) 「どんなヘボシェルだよ。ww」 って言うのはどれくらい恥ずかしいですか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 10:39:20 子供かよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 10:42:05 それより、 自身は動作確認したんだろうか? それとも、/bin/sh -> zsh みたいにリンクされたOS使ってたのか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 11:51:22 そういう質問が出ることも最初から分かっていました : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 11:59:58 で、762の質問への回答は? (1)動作確認してなかったのか、(2)/bin/sh -> zsh にしてたのか?(その場合はOS名も) : 名無しさん@お腹いっぱい。 [] 2010/09/17(金) 17:52:57 ↓これの100分の1くらいかな。w > 俺は最初からわかってたよ。 確認してないが何か? : 名無しさん@お腹いっぱい。 [sage] 2010/09/17(金) 17:57:23 >確認してないが何か? >確認してないが何か? >確認してないが何か? >確認してないが何か? あーあ。自爆、敗北宣言乙w : 名無しさん@お腹いっぱい。 [] 2010/09/17(金) 18:01:20 確認してない事と、お前が後付けで知ったかぶりした事は全く独立なんだが。 どこが敗北宣言なんだろう。ww : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 00:37:33 すみません、質問させて下さい。 シェルスクリプトの練習の為、練習用のシェルスクリプトを作成しており、 Cygwin上にて #!/bin/sh var1=100 var2=0 num1=`expr 10 + 30` num2=`expr $var1 - 30` num3=`expr 100 % 30` num4=`expr $var2 && 1000` echo $num1 $num2 $num3 $num4 という、上記内容のシェルを実行しました。 下記のような結果が出力される予定でした。 $./script2 40 70 10 0 ところが、 expr: non-integer argument test02.sh: line 7: 1000: command not found 00 という内容が出力されてしまいました。 $var1、$var2が認識されていないようなのですが、原因が分かりません。 シェルはbash、OSはWindowsXPSP3です。 何卒、御教授お願い致します。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 00:43:05 dash on Debian だと 40 70 10 0 てなったよ。 set -x してみたらどう? : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 00:58:52 改行コードが CR+LF になってるだろ。LFのみにしろ。 var1=100^M とかになって実行されるから、正しく数値として実行されない。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 01:17:44 御回答、ありがとうございます。 set -x var1=100 set -x var2=0 としましたところ、今度は下記の結果が出力されました。 $ sh test02.sh + set -x $'var2=0\r' ++ expr 10 + 30 + num1=$'40\r' ++ expr - 30 expr: syntax error + num2=$'\r' ++ expr 100 % 30 + num3=$'10\r' ++ expr expr: missing operand Try `expr --help' for more information. + num4=$'\r' + echo $'40\r' $'\r' $'10\r' $'\r\r' 10 御回答、ありがとうございます。 Meadowにて改行コードをLFのみにしようとしたのですが、メニューが英語で、 どこを触ればいいのか分かりませんでした… メニューを日本語化できないかと検索してみたのですが、403エラーでサイトに 入ることが出来ませんでした。 質問ばかりで恐縮ですが、LFのみにする為、どこを触ればよいか教えていただけないでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 01:28:30 だめだこりゃw 改行コードの問題ということがはっきりして、 このスレ的には問題解決したので、 次の方どうぞ ↓ : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 01:33:31 $ tr -d '\r' < in > out あと、 set の使い方が違うよ。man 見てね。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 01:37:53 メニューとか言ってる奴がMeadowなんて使うなよ。 C-x RET f で, sjis-unix とか指定すればいい。 分からなかったら禿丸とかでも改行コード変更できるだろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 01:52:09 cygwin なら dos2unix : 名無しさん@お腹いっぱい。 [sage] 2010/09/18(土) 08:28:48 Don't say "shell", idiot ! あ、こっちは日本語スレだった、、 : 名無しさん@お腹いっぱい。 [sage] 2010/09/21(火) 17:22:43 質問です。 起動したアプリケーションの終了を待たずに、次のステップを実行するにはどう書けばいいのですか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/21(火) 17:34:57 & : 名無しさん@お腹いっぱい。 [sage] 2010/09/21(火) 17:50:04 ありがとう。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 08:13:01 質問です ・ findで見付かったファイルに対してそれぞれ複数のコマンドが必要な処理を行いたい ・ ディレクトリ名にスペースが含まれる可能性がある ・ 複数コマンドと言っても mv $f $f.org;sed -e '....' <$f.org >$f;rm $f.org みたいなワンライナーな処理で 汎用的に使いまわすようなものでも無い。 以上の条件をふまえると、思い付くやり方は 1. 複数のコマンド部分をシェルスクリプトにして、find -exec 2. 複数のコマンド部分をシェルスクリプトにして、find -print0 |xargs -0 3. 一時的にIFS='\n'にして、for f in `find ...`;do .... という3つが思い付くんですが、1,2はわざわざスクリプトにするのは億劫で、3はちょっとトリッキーな感じで どれもしっくり来ません。 割と良くある処理だと思うんですが、標準的なやり方って他に何かありませんかね? : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 09:14:00 -exec sh -c 'mv "{}" "{}.org";sed -e ... < "{}.org" > "{}";rm "{}.org"' : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 10:01:27 二つのファイルがあります。 一列目に日付が二列目に数字が入っているのですが fileAにない日付のデータがfileBにはあります。 fileAになければfileBのデータを補完して新たなfileを作成したいのですが、 簡単な方法ありますでしょうか? file A 199901 10 199902 15 199903 16 199004 17 file B 199901 18 199902 13 199903 13 199004 13 199005 18 file NEW 199901 10 199902 15 199903 16 199004 17 199005 18 というようにしたいのですがどうすればよいでしょうか。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 10:31:02 出力順違うけど、ダメ? $ sort -u -k 1,1 filea fileb 199004 17 199005 18 199901 10 199902 15 199903 16 : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 12:01:48 それはちょっと面倒だなぁ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 12:07:30 応用力の無い奴だな。 -exec sh -c 'f="{}"; mv "$f" "$f.org";sed -e ... < "$f.org" > "$f";rm "$f.org"' : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 13:17:19 それはもっと面倒だなぁ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 13:42:32 タイプ数増やして応用力とはこれ如何にw findで見つかったファイル名の中に $ を含むもの( $hoge という名前のファイルとか) があったら、f="{}" のところで展開されちゃうから、エンバグしてるじゃん。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 14:11:13 そのバグは に既に含まれてるから、「エンバグ」ではない。 あと、$だけじゃなくて " ` とかがあってもコケるな。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/25(土) 14:27:21 ありがとうございます! 試してみます! : 名無しさん@お腹いっぱい。 [sage] 2010/09/26(日) 19:42:22 出力順を変えない方法もあるよ: $ cat file_A file_B | awk '!a[$1]++' : 名無しさん@お腹いっぱい。 [sage] 2010/09/26(日) 20:09:55 フォルダ内のdebパッケージを連続で dpkg -x xxx.deb xxx するスクリプトを作りたいんですが、 xxx.deb から .debを削除するには? : 名無しさん@お腹いっぱい。 [sage] 2010/09/26(日) 21:08:35 basename xxx.deb .deb : 791 [sage] 2010/09/26(日) 22:09:55 >792 sedを使うのかと思ってました。 basenameってこう言う使い方ができたんですね。 ありがとうございました。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/27(月) 00:00:54 普通は、 for f in *.deb;do dpkg -x $f ${f%.deb};done だけどな。 : 793 [sage] 2010/09/27(月) 06:55:47 >794 おー スマートですね : 名無しさん@お腹いっぱい [sage] 2010/09/29(水) 18:50:18 あるプロセスの稼働をチェックするため PROC=`ps ax | grep "process"` if [ -n "$PROC" ] then として見たら、grep processがあるからダメなのね どうすりゃいいの? : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 18:54:03 pgrepないの? : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 18:55:07 grep -v grepはできない? : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 18:56:12 見たいプロセスが logreport.sh とかだった場合に困る。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 19:00:16 grep '[p]rocess' みたいなテクよくみかけたけど : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 19:03:33 そういう小技こねくりまわすよりpgrep使う方が楽だと思うけどな。 ない環境ならしょうがないけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 20:45:17 そりゃ、PerlやRuby、Pythonなどが普及しても 「どこでも通じるからawkは覚えておいたほうがいい」なんてのがUNIX文化。 そこにおいて >801 は異質に見える。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 20:48:45 awkがどこでも使えるとは初めて知った : 名無しさん@お腹いっぱい。 [] 2010/09/29(水) 20:52:30 必死だな。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 20:53:03 awkが使えないOSがあるなんていう奴初めて見た : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 21:10:00 理論馬鹿が振りかざす「どこでも」はいったいどこまで広がるんだろう。 : 名無しさん@お腹いっぱい [sage] 2010/09/29(水) 21:15:56 ごめん、言いだしっぺだけど pgrepは使えませんでした で、板が代わって、そういう小技こねくりまわした方法が見れない もう一度、書いてもらえる雰囲気じゃない? : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 21:23:48 awk使えばいいよ : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 21:23:54 組み込み系のbusyboxでもawkは欠かせないからな。 いまいじっているシステムは全部で16Mぐらいの/ だけど、awkはある。pgrepはない。 perlもpythonもbashもない。 こういうシステム上でもinitスクリプト等にawkは必須。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 21:24:54 必死な屁理屈野郎にはなに言っても無駄だと思うよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 21:59:51 そういうのは最低限LLでやるべきだろ。 実際Perlとかで書いてみて、 シェルスクリプトと比べてみるといいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/29(水) 22:03:17 が定石だと思う. : 807 [sage] 2010/09/29(水) 22:15:12 >812 ありがとう : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 00:48:34 nawkかgawkか確認すべき : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 10:48:54 ガウォーク : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 18:11:46 条件がそろった時にメールを送る このスクリプトをcrondで1時間ごとに起動する 1度メールすると次は送らない とするなると、メールを送ったかどうかの、何らかのフラグが必要でけど 一般的には、何をフラグとすればいいでしょうか? ファイルの有無? ファイルの中身の有無としたとき、ファイルのテキストを空にするコマンド ってありました。? : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 18:16:59 > : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 18:18:11 > 1度メールすると次は送らない 生涯で1回しかメール送らないってこと? > ファイルの中身の有無としたとき、ファイルのテキストを空にするコマンド > ってありました。? :>file みたいな : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 18:37:44 の勝ち コロンが無駄です : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 18:53:06 あ、そう言うことですか サンキュー : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 19:13:37 > は zsh とか csh とかでは違う動作になるので どこでも動く :> の方が安心といえば安心。 まあ、sh と zsh をごっちゃにする人はあんまりいないと思うけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 22:01:22 cat /dev/null > file などとやってた俺はダサイな。 ':' って初めて知ったが他にどんな使い方があるのなか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 22:03:02 while : : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 22:05:11 while : で無限ループとか : ${FOO:=bar} で変数のデフォルト値設定とかか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 22:44:52 cp /dev/null file派 は俺だけか? : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 22:46:07 そんなダサいことしてるのは流石にお前だけだろ… : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 22:53:06 そっちの方が、誰が見てもわかりやすいってのはあるがな。 : 名無しさん@お腹いっぱい。 [sage] 2010/09/30(木) 23:10:03 条件の否定形が見易い形に書けなくて if 肯定の条件; : else 本来やりたいこと fi みたいなの書いたことがある。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/01(金) 00:38:18 長い行を折り返すために、キリがいいからって、>file の前で折り返したスクリプトを見たことがあるw : 名無しさん@お腹いっぱい。 [sage] 2010/10/01(金) 01:02:16 if ! ( 肯定の条件 ); 本来やりたいこと fi じゃだめ? : 名無しさん@お腹いっぱい。 [sage] 2010/10/01(金) 06:13:44 純正シェルで動かない : 名無しさん@お腹いっぱい。 [sage] 2010/10/01(金) 10:44:57 :<<'_' 複数行のコメント _ : 名無しさん@お腹いっぱい。 [sage] 2010/10/01(金) 10:54:38 それもコロンが無駄です : 名無しさん@お腹いっぱい。 [sage] 2010/10/01(金) 13:34:00 内部的にTMPファイルまたはパイプを作る動作は起きるから、 完全なコメントアウトになってないのが問題だな。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/02(土) 18:57:00 皆様のお知恵を拝借したく Linux bash3.2.25 の環境です 関数がいくつかあって、ある関数内(Aとします)の条件式(if)で分岐した結果、異なる関数(Bとします)を 呼び出したとします。 その呼び出された関数Bの処理が終わった後、直前に実行してた関数Aに戻る方法はないでしょうか? 何をしたいかというと、Aで実行したコマンドの結果の判定を行い正だった場合に 関数Bに移動してそこでwhileを使ってカウンタを増やし、また関数Aに戻ってコマンドを実行し 偽になるまで繰り返したいのです。(偽になったら関数A内のif文で抜けて次の関数Cへと進みます) どなたか良い方法を教えていただけると助かります : 名無しさん@お腹いっぱい。 [sage] 2010/10/02(土) 19:02:53 関数というのは、処理が終れば呼び出し元に戻る。 だから何もしなくても関数Aに戻るよ。 逆に、関数A「以外」に戻ることはできない。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/02(土) 19:08:25 わぁ、すみません・・・ 仰る通りでした。途中で別の所を呼んでたのをすっかり忘れておりました。 お手数おかけしました・・・ : 名無しさん@お腹いっぱい。 [sage] 2010/10/04(月) 15:12:52 次はLinux板で聞いてね。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/04(月) 16:19:30 別にLinux依存の質問じゃないし、こっちで聞いていいよ。 あと、Linux板のシェルスクリプトスレは落ちて終了したから、こっちで聞くしかない。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/04(月) 16:43:16 くだ質で聞けばいいんじゃね。 : 名無しさん@お腹いっぱい。 [] 2010/10/06(水) 11:17:31 出力をしたくないときによく ./hogehoge >/dev/null 2>&1 とやりますが、なぜリダイレクトは後ろから評価されるのですか? この順序に例外はありますか? : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 11:36:15 後ろから評価されてないよ。 2>&1 は 標準エラーを標準出力と同じところに出力するということ。 ./hogehoge >/dev/null 2>&1 の場合は 2>&1 が評価された時点で、標準出力が /dev/null に設定されている ので、標準エラーも /dev/null に設定される。 ./hogehoge 2>&1 >/dev/null この場合は 2>&1 が評価された時点で、標準出力が画面に表示される設定になっ ているから、標準エラーが画面表示される。 分かり難い説明だと思うので、検索したほうがいいかも。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 11:38:50 後ろからじゃ無くて前からだよ。 1 >/dev/null 標準出力を/dev/nullにリダイレクトする。 2 2>&1 標準エラーを(さっき/dev/nullにリダイレクトした)標準出力にdupする。 感覚に合わないのは、./hogehoge 2>&1 | hagedebu これは、標準出力をパイプにリダイレクトするのが先。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 11:43:35 まぁ dup2 について調べろってことだな : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 11:46:57 もうちょっとお母さんみたくやさしく : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 12:06:42 「リダイレクトは後ろから評価される」と、 間違いを堂々と書いてるサイトや文章が結構存在するから注意。 正しくは「前から評価される」 「ファイル記述子の複製」を理解すれば理解できる。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 12:19:14 うちの社員研修では「リダイレクトは後ろから評価される」と教えてます。 正しいかどうかよりもわかりやすさ優先なので。 何か問題でも? : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 13:13:08 ここでわからないとされるのは、前から評価されるなら 2>&1 で標準エラー出力(2)を標準出力(1)にしたときに そのあと >/dev/null にしたときに なぜ元標準エラー出力は 釣られないのか というところだろ。 ここを簡潔に説明するのに必要なのはdupの勉強ではない : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 14:02:53 ,847 なんで、マニュアルに書いてあることを無視するん? : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 20:27:44 テンプレにある、これが元凶だなw >/bin/shプログラミング入門 > ttp://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/ ? つぎのスレから、削除するべき。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 20:33:17 , 後ろから評価されるって思うには、どういう風に解釈すればいいの? 普通、2>&1 を「stderrにstdoutと同じにする」って読むと思うけど これだと、前から後ろに順番に読まないと意味が合わないよね 読み方が違う?もっと根本的なところが違う? : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 20:34:18 >>普通、2>&1 を「stderrをstdoutと同じにする」って読むと思うけど の間違い・・・ : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 20:54:30 foo 1>file 2>file として、書き出される順番が揃わなくて考えこんだ日を思い出した : 名無しさん@お腹いっぱい。 [sage] 2010/10/06(水) 23:17:59 言い直したところでその説明だと致命的におかしいのぜ。 ls -e 2>&1 >hoge.txt のとき、標準エラー出力はhoge.txtに吐かれない。 「stderrにstdoutと同じにする」 と読んでしまったら 評価順序的にhoge.txtに吐かれないとおかしいだろ。 同じになったんだから。 「同じにする」という理解方法が間違い・ : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 00:11:24 1とか2は、「ファイルディスクリプタ」 (ハンドルみたいなものかな?) に対して、stdoutとかstderrは、「ファイル」そのもの。 これらを混同するから、わからなくなるだけ。 さらに、バファリンが絡んできて、わけわかめ? : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 06:40:07 >stdoutとかstderrは、「ファイル」そのもの。 ↑違うよ。 stdoutとかstderrはそれぞれファイル記述子1と2の別名。 例えば、hoge 2>&1 と、 hoge 2> /dev/stdout は同じ動作。 ファイルそのものはまた別。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 12:22:41 「FILEそのもの」と書きたかったのかな。 FILEは「ファイル」じゃなく「ファイルハンドル」 ファイルでスクリプタも、UNIX固有の特殊なファイルハンドル for システムコール。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 14:08:17 そういえば、標準エラー出力と標準出力を入れ替える手段って無くね? : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 14:25:35 hoge 3>&2 2>&1 1>&3 じゃ駄目? : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 14:36:36 うまくいった・・・ となると今までの評価順序の話は根底から崩れる予感。 &3 って誰だよって話 : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 14:38:14 もう面倒くさいから「後ろから評価される ように 動作する」でいいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 14:47:10 「後ろから評価される ように 動作する」と考えると、 で stderrとstdoutを入れ換える動作が説明できない。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 14:50:32 > となると今までの評価順序の話は根底から崩れる予感。 > &3 って誰だよって話 最初から全然理解できてないだけじゃん。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 16:46:04 説明よろしくお願いします : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 17:38:30 3>&2 : dup2(2,3) 3を2と同じところにつなぐ 2>&1 : dup2(1,2) 2を1と同じところにつなぐ(3は元の2の先(stderr)のまま) 1>&3 : dup2(3,1) 1を3と同じところにつなぐ(2は元の1の先(stdout)のまま) : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 21:44:59 そんなことより、どう考えれば後ろから評価されるように 見えるのか教えてくれ : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 23:06:21 自分で考えろよ : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 23:13:57 (man 2 open , man 2 dup2 じゃ) いかんのか : 名無しさん@お腹いっぱい。 [sage] 2010/10/07(木) 23:55:23 がdupを理解してないことはよくわかった。 これを簡潔に説明するのに必要なのはdupの勉強だから、 もう一度勉強し直せよw : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 00:21:39 むしろ、なんで「釣られる」という発想になるのか俺には分からない てきとーなプログラミング言語で b = a a = 1 としたときに、bにも1が代入されると思う? それと全く理屈は同じなんだけどね 上の式のbをfd2、aをfd1と考えて欲しい 後でaに別の値を代入(リダイレクトによってfd1が参照するものを変える)したところで、b(fd2)の中身はかわらないよ : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 00:24:05 後ろからとか前から評価とか意味がわからんから、 右結合とか左結合とか文法の言葉で語ってくれ。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 00:49:44 hoge 3>&2 2>&1 1>&3 &1,&b,&3をそれぞれa,b,cと置き換えると b=c, a=b, c=a; だろ。評価順に考えればこうなる。簡単な話だ。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 00:52:44 c=b b=a a=c の間違いでは? 代入の向きが違う 3>&2 は、fd3にfd2をdupする(3に2を代入する)わけでしょ : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 11:37:20 逆だろ・・・ : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 11:51:00 何いっての : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 14:06:12 馬鹿だろ・・・ : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 14:38:12 なるほど、評価順以前に これすら理解していない人が話をひっかきまわしていたのか : 名無しさん@お腹いっぱい。 [sage] 2010/10/08(金) 19:21:10 (ハード) リンクの喩えのほうがいいかもな 発想の元は同じなわけだし : 名無しさん@お腹いっぱい。 [sage] 2010/10/14(木) 16:51:17 初歩的な質問で申し訳ありません bashです whileが入れ子になってる関数で、2段目のwhileの中でセットされた変数が、その2段目のwhile のループを抜けた時にクリアされてしまうのですが、これはそういう仕様なのでしょうか。 また、抜けても変数の値を保持するにはどうしたらよいでしょうか。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/14(木) 17:40:41 意味がわかんないけど、 #!/usr/local/bin/bash func () { while :; do while :; do var=$1 break done echo $var break done echo $var } func value echo $var で、valueが3回表示されないってこと? : 名無しさん@お腹いっぱい。 [sage] 2010/10/14(木) 17:50:06 エスパーカが足りない。どうせサブシェル問題だろ : 名無しさん@お腹いっぱい。 [sage] 2010/10/14(木) 17:50:09 そうです。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/14(木) 17:54:35 あ、サブシェル問題だったんですね。よくわかりました。解決しました。 : 879 [sage] 2010/10/14(木) 17:56:23 解決してません : 名無しさん@お腹いっぱい。 [sage] 2010/10/14(木) 17:57:03 は嘘か : 879 [sage] 2010/10/14(木) 18:00:55 ttp://search.luky.org/linux-users.9/msg06099.html 解決しました : 名無しさん@お腹いっぱい。 [sage] 2010/10/14(木) 18:02:00 まーたサブシェル問題か : 879 [sage] 2010/10/14(木) 18:02:48 ケチケチすんなよなぁ兄弟 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 15:46:10 bashの関数なんですが function change_oppai { if [ 〜 ];then sed 's/AAA/oppai/g' else sed 's/BBB/oppai/g' fi } この関数 change_oppai を標準入力に対応させるにはどうすればいいのでしょうか? echo "AAA" | change_oppai -> oppai : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 16:02:07 そのままで標準入力に対応してるけど。エスパー召喚? : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 16:24:19 >function change_oppai { bash でしか動かん。 昔からの関数定義と比べて機能が強化されたわけでもないのに、 なんで bash はつまらない非互換を導入したがるんだか。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 16:39:13 zshでもkshでも動きますが。何言ってんだか。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 17:29:28 bashで質問です。 ifで正規表現を使った判別を行っていますが、複数条件の時はどうすれば良いのでしょうか? if [[ $i =~ ^foo ]]; then echo foobar elif [[ $i =~ ^bar ]]; then echo foobar fi これのifとelifの条件式を一つにしたいのです、エラーになりますが、例えばこんな感じです。 if [[ $i =~ ^foo ] -o [ $i =~ ^bar ]]; then echo foobar fi よろしくご教授お願い致します。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 17:40:03 if [[ $i =? ^foo || $i =? ^bar ]]; then : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 17:49:04 functionってわざわざ書くのが抵抗感あるかな。 函数って言うより、ただのサブルーチンだし。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 17:57:07 ありがとうございました。できました。 -oでなく、CやJavaで用いる||で良かったのですね。これなら覚え易いし、使い易いです。 =~と=?は同じでしょうか。これについては未だ不明なので調べてみます。 本当にありがとうございました。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 18:00:28 の「?」は文字化け。チルダーがなぜか化けてしか書き込めん。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 18:02:25 ありがとうございます。 なるほど、ではチルダで良いのですね。 重ね重ね本当にありがとうございました。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/15(金) 18:53:41 , , は同じやつか? : 名無しさん@お腹いっぱい。 [sage] 2010/10/18(月) 11:38:08 そう思った根拠は何だ? : 名無しさん@お腹いっぱい。 [sage] 2010/10/18(月) 12:00:23 同じやつだったら何だというんだ。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/18(月) 13:29:47 発言の趣旨を問いたい : 名無しさん@お腹いっぱい。 [] 2010/10/24(日) 22:35:24 スクリプトの記述とは直接関係はしないけど 実務でシェルスクリプトを書く皆さんはコメントって結構意識して書いてますか? : 名無しさん@お腹いっぱい。 [sage] 2010/10/24(日) 22:53:01 面白いと思って書いてるんだろうけどツマラン : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 00:00:11 やる気と関係者のレベル次第。 素のUnixなんかでVimが入っていない場合だと、めんどくさい上にミスしやすくなるし。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 00:31:41 シェルに限らず業務用ソースはコメントを意識して多めに入れる シェルに限って言えば・・・ascii(英語)でコメント書くことかな : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 19:34:17 シェルはソースが読めてしまうので、 外に出すシェルは当然難読化処理してから出すよな。 コメントなんて論外。難読化のためのオトリコメントはアリだけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 19:39:31 は? : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 19:43:50 難読化ツール何使ってる? perl用みたいにぐちゃぐちゃになる奴ある? : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 20:53:27 難読化というか、コードが汚いだけなんだけどね : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 21:00:17 シェルスクリプトのコンパイラがあると 昔何かで読んだ記憶があるが 実物を目にした事はない : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 21:25:19 configureの難読度ってどんなレベル? : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 22:10:47 難読化って例えばこういうのだろ 実行すると hogeと表示 ↓ #!/bin/sh h==;i=';';a=' ';t=e;e=v;s=a;q=l $t$e$s$q$a"a${h}e${i}b${h}c${i}c${h}h${i}d${h}o${i}e${h}' '${i}f${h}g" $a$b$c$d$e$c$d$f$a : 名無しさん@お腹いっぱい。 [sage] 2010/10/25(月) 22:45:10 超絶に遅くなりそうだなw java scriptなんかだと、難読化しながらサイズもコンパクトになるという二重のメリットがあったりするが。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/29(金) 23:54:27 変数に*(アスタリスク)を入れるにはどうしたらいいでしょうか。 HOGE="\* foo" として、 echo $HOGE * foo と出て欲しいのですが、 \* foo になっちゃいます。 ヒアドキュメントのパターンもためしてみましたがうまくいかず・・・。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/29(金) 23:57:20 困ったらeval : 名無しさん@お腹いっぱい。 [sage] 2010/10/29(金) 23:58:19 echo "$HOGE" は? dashとbashでは期待通り。 : 916 [sage] 2010/10/29(金) 23:59:35 俺アホス : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 00:26:15 HOGE='* foo' echo "$HOGE" : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 02:20:22 HOGE="* foo" echo "$HOGE" : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 04:43:59 thanx ヒアの場合は HOGE=`cat <<'EOF' * foo * bar EOF` echo "$HOGE" でいいのね。助かりマスタ。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 05:36:46 aaa bbb ccc というテキストがあるとしてcatして変数にx="aaa bbb ccc"と入れたいんだけどどうやればいいですか? シェルはbusyboxのashです。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 06:31:56 x="$(cat foo.txt | tr '\n' ' ')" : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 07:48:54 x=`cat hoge.txt` x=`echo $x` わざとダブルクォートを付けずに echo $x して xに代入しなおすのがポイント はtrコマンドが無駄。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 12:12:46 か のどちらが視認性があるか分かりますか? > あと、一旦 x に格納するだけ、無駄ですよね? > : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 12:31:59 xなんて使わずに、set -- `cat bar.txt`でいいじゃん。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 12:33:07 もちろん の方が視認性がある 一旦 x に格納は無駄じゃない。 外部コマンドの trを起動するオーバーヘッドの方がよっぽど無駄。 元質問はbusybox環境だから、trのないbusyboxだったらそもそも実行できない。 どうしても一旦 x に格納したくなければ x=$(echo $(cat hoge.txt)) とすれば良いが、この方が視認性が落ちる。 よって、 が最適解。 : 923 [sage] 2010/10/30(土) 12:54:58 色々方法があるんだな 。 の場合、最後に改行があるとcccの後にスペース入っちゃうし、改行が \r\nだったら動かないとかあるんで、あんまりよくないとは思ってた。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 14:27:46 スクリプトを作れと頼まれればコメントを書くけど 何かの仕事を頼まれて、それ用にスクリプトを書いて 作ったときは書かない : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 14:37:47 ashって$()使えるん? : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 18:07:30 Kシェルでlsとかfindとかの返り値をもらえる方法があったら教えてください。 (検索に成功したら1とか) : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 18:12:03 普通に $? : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 18:54:04 そんな低レベルな質問であるはずがない。 もっと深読みするんだ。 : 名無しさん@お腹いっぱい。 [sage] 2010/10/30(土) 19:15:33 ありがd : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 10:07:56 ファイルの中に一列 hoge1 hoge2 hoge3 hoge4 hoge5 というデータがあり、これを読んで hoge1 hoge2 hoge3 hoge4 hoge5 と1行で出力するshシェルスクリプトを教えてください。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 10:16:29 echo `cat filename` : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 10:54:01 > shシェルスクリプト ちょっと斬新。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 11:49:54 ファイルサイズがでかい時は、 while read x; do echo -n "$x "; done < filename | sed 's/ $//' : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 11:59:54 tr '¥012' ' ' < text じゃだめなん? あ、最後の改行まで落ちるか。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 12:11:01 paste -sd' ' filename : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 12:13:07 pasteとかtrなんて存在すら忘れてた : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 21:22:51 shがシェルの1つだから、shスクリプトのほうがわかりやすいな : 923 [sage] 2010/11/01(月) 23:22:06 x="$(cat test.txt | tr '\n' ')" 打ち間違えて ' が一つ足りませんでした。 > が延々と出てCtrl+Cでも終了できません お助けください orz : 923 [sage] 2010/11/01(月) 23:24:33 >)" と打ったら終了できました。 とりあえずスレ汚しすいません。。。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 23:25:48 たぶん Ctrl-D(End of File) でもイケた気がする。 Ctrl-Cは動いてるプロセスに 止まれよ! と通知するやつだから、 まだコマンド発行してない段階では通用しないわさ。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 23:26:23 だから 視認性(笑) がある の方を使えとあれほど、、 普通のシェルなら Ctrl+Cで終了できるよ。 クォートの途中を表す > プロンプトが出てるだけだから。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 23:29:13 zshもbashもCtrl-Cで止まったわ。 : 922 [sage] 2010/11/01(月) 23:30:54 あ。自分はでした orz ,924さんの方の両方で出来ました。 さん詳しい解説と環境のご配慮までありがとうございます。 busybox-1.17.1で tr のアプレットまで入っているようです。 オプションは -c -d -s しかありませんでしたけど。 皆さん本当にありがとうございました。 またスレ汚しすいませんでした。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/01(月) 23:34:25 おおう、そういえばbusyboxのシェルだったか。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/02(火) 01:53:36 grep(egrep)でCRLFの改行コードの検索をやりたいのですが、 od -c hoge.txt | egrep '\\\n \\\r' だと 0000000 a a a a a a a a a a a a a a a \n 0000020 \r のように改行をまたいだ場合に検索できません。 この場合もCRLFを検索するにはどうすればいいのでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/11/02(火) 02:11:06 以下のようなバックアップスクリプトを作ってみたんだが 圧縮したあとに展開したら元ファイルとファイルサイズが全然違う どうしてかわかるエロイ人いませんか #!/bin/sh PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin KEEPDAY=90 BK_DIR=/home/hoge/www PUT_DIR=/home/hoge/backup/www MKFILE=www.`date +'%y%m%d'` TGZFILE=$MKFILE.tar.gz RMFILE=www.`date -v -"$KEEPDAY"d +'%y%m%d'`.tar.gz cd $BK_DIR echo "Packing to $MKFILE" tar cvzf $TGZFILE ./ echo "Checking to $TGZFILE" if [ -f $TGZFILE -a -f $RMFILE ]; then rm -f $RMFILE echo "Removed $RMFILE" exit 0 fi : 名無しさん@お腹いっぱい。 [sage] 2010/11/02(火) 08:27:22 バックアップしたいディレクトリの中にバックアップファイル作っちゃうの? : 名無しさん@お腹いっぱい。 [sage] 2010/11/02(火) 08:48:16 nとr逆じゃね? CRLF = ^M^J なので、少なくとも改行が CRLFかLF だと分かっていれば grep "^M$" < hoge.txt でいいんじゃ? (^MはCtrl押しながらmを打鍵) : 名無しさん@お腹いっぱい。 [sage] 2010/11/02(火) 08:59:21 環境(エディタ、端末)にもよるけど、普通 Ctrl+m = Enter じゃね? Ctrl+v Ctrl+m で入れる環境が多いと思うけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/02(火) 09:05:38 すまん、確かにCtrl-Vの前置を書き忘れていた。 : 935 [sage] 2010/11/02(火) 17:55:13 レスありがとうございます。 勉強になりました。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 00:00:04 ありがとうございます。 出来ました。 nとr逆ですね。 cat -v hoge で見える改行コードの入力の仕方がわからなかったので助かりました。 しかし、grepって複数行の検索出来ないんですね。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 00:02:35 バックアップしたいディレクトリをフルパスで指定すると tarのエラーで/を先頭に付けるな と、怒られてしまったので cdでバックアップ元のディレクトリに移動 ↓ ./でバックアップ元を指定して、バックアップ先へtar.gzで圧縮 という流れにしました もっと良い書き方があるんだろうけどターミナル触るのが久々 過ぎてこんなぐらいしか思いつかなかった もっと良い書き方はございますか : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 00:11:01 ございます : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 00:46:05 manぐらい読めよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 02:03:21 (cd /hoge/hoge; tar cf - *) はいろいろ応用が利く。 最近はcdできるtarもいろいろあるけど。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 09:21:44 -C ってSolarisにさえあるし、相当古いtarからなかったっけ : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 12:08:56 じゃあかなりポータブルだと思っていいのか。 今更だが、 tar cf - -C /hoge/huga * とサブシェル内cdだと*の展開タイミング が違うので、同じ投稿に並べて書いたのは不適切だったな。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/03(水) 19:05:58 >(cd /hoge/hoge; tar cf - *) はいろいろ応用が利く。 ; じゃなくて && にすべし。; だと間違えて権限のないディレクトリに cd しようとして失敗しても、カレントディレクトリのまま tar が実行されてしまうので、 場合によっては意図しないファイルを上書きして消すなんて事故が起きることがある。 というか、そういう事故を起こさないためにも -C を使ったほうがいい。 : 951 [sage] 2010/11/05(金) 00:11:31 確かにその方がいいですね 仕事でやってる時は事故を起こさないようにそうしてた気がします ところでファイルサイズ違う件について心当たりある方いま(ry その後もググって見たけど相変わらずわからずで 何回もスレ汚しスマソ : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 00:59:32 もっと具体的に書けや : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 08:36:34 複数のマシンを一度に再起動をかけたいのですが、どのような方法があるでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 12:06:27 何のファイルサイズがどう違うの? : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 12:07:10 for i in host1 host2 host3; do ssh $i /bin/shutdown; done : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 12:11:33 それだと host1 が落ちてた時に host2 移行が再起動できません。 あと、shutdown で、再起動できるんですか? : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 12:29:13 for i in host1 host2 host3; do ssh $i /bin/shutdown& done : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 13:13:17 for i in host1 host2 host3; do ssh -f $i /sbin/reboot done : 名無しさん@お腹いっぱい。 [sage] 2010/11/05(金) 13:21:57 ふぉーっ 愛 淫 ホスト1 ホスト2 ホスト3; どエスエスエッチ -ぇふ $愛 /エス便/り豚 ドーン : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 02:00:10 kshで特定の日時を表示させたい場合、 date 20000101 のYMD形式は可能だけど date 20000101000000 のYMDHMSになるとエラーになるので困っています。 なにかオプションが必要ですか? : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 06:30:38 それ、ksh関係ない。dateコマンドの話。 で、そもそも指定が間違ってる。 date mmddHHMMYYYY.SS が正しい。 2000年01月01日00時00分00秒なら、 date 010100002000.00 : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 07:13:58 ありがとうございます。 まさか.SSとは…いらないよってオプションはないんですかね? なんかスッキリしないなぁ… : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 07:18:12 いまどきdateで時刻設定することなんてないし。ふつーntpだろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 07:30:10 表示させたいって書いてないか? : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 07:42:24 質問のように「date 20000101」とか実行したら「設定」される。 「表示させたい」って書いてあるのは、設定した結果、以降OS時刻として その時刻で表示させたいという意味だろ。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 08:13:22 自作プログラムに、コマンドラインから&を渡したのですが、 バックグランドと解釈されてしまいます。 \でエスケープしてもダメだったのですが、 どうすれば渡せるのでしょうか? : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 10:46:17 自分の環境では出来るな。 $ cat hoge.sh #!/bin/sh echo $* $ ./hoge.sh ¥& & $ : 974 [sage] 2010/11/17(水) 10:46:18 何度もすいません 実際に行いたい動作は 引数として渡されたYMDHMS形式の文字列が日時として妥当であるかチェックする です 実装として date "+%Y%m%d%H%M%S" -d 引数文字列 の結果と引数文字列が一致するかチェックするロジックを組みました。 ですが肝心の date -d 20000101000000 がエラーを吐いてしまうため上手く行かず… (-dは記述が漏れてました。すいません) 何か方法はありませんかね? : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 11:35:26 info coreutils すると Date input formats という項目に date -d で食える書式が書いてある。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 11:37:16 perlか何かで書いた方がいいんじゃね。 : 名無しさん@お腹いっぱい。 [] 2010/11/17(水) 11:54:23 GNU dateってことは bash限定でいいよな。 ほらよ ↓ TIME=20000101000000 date +%Y%m%d%H%M%S -d "${TIME:0:8} ${TIME:8:2}:${TIME:10:2}:${TIME:12:2}" : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 12:03:37 BSDのdateならもっと楽できるのに : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 12:31:22 coreutils確認しました やはりロジック上でフォーマット変換をしないといけないようですね フォーマット変換すれば実現可能なのはわかっていたのですが、直感的にdateの使い方で対処出来ると思っていました ご提示頂いたスクリプトも参考に対処したいと思います : 名無しさん@お腹いっぱい。 [sage] 2010/11/17(水) 18:47:42 man date BSDのdateなら楽勝なのに : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 07:53:37 小6の算数の応用問題を解けなかった奴が 「方程式を使えば解けたのに」 と負け惜しみを言ってるみたいだな : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 09:28:13 しかし日付、時刻なんて結構シェルで扱いたいデータなんだけど やりにくいよね。 低レベルでそれらを扱える便利なコマンドが無い。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 13:56:30 awk/sedの訓練をさせるため。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 14:24:41 どう扱うかってけっこう場面場面で違うから 「便利なコマンド」を作りにくいんじゃないかな。 LLでやっちゃった方がてっとり早いと思うよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 14:36:18 いまどきのユーザーはみんなLLに転向しちゃったし、 シェルの話題は出尽くしたので、 次スレはナシでいいよ。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 15:02:59 LLって何? : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 15:07:45 ttp://ja.wikipedia.org/wiki/%E8%BB%BD%E9%87%8F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 20:35:23 シェルスクリプトもはいってんじゃん : 名無しさん@お腹いっぱい。 [sage] 2010/11/18(木) 21:59:27 VBSとshしか書けないがVBSはコード長くなるしコーディング時間もshの倍以上かかる。 が、日時の扱いがめっちゃ楽。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/19(金) 09:27:00 ありがとう。 : 名無しさん@お腹いっぱい。 [sage] 2010/11/20(土) 00:00:48 999!! : 名無しさん@お腹いっぱい。 [sage] 2010/11/20(土) 00:01:34 プログラミング質問すれ Part1 ttp://hibari.2ch.net/test/read.cgi/unix/1127388574/ : 1001 [] Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。