シェルスクリプト総合 その16at UNIX
シェルスクリプト総合 その16 - 暇つぶし2ch1:名無しさん@お腹いっぱい。
10/02/20 14:10:05
シェルスクリプトの総合スレです。 
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。 

□お約束 
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 
 Linuxユーザは/bin/shの正体がbashなので特に注意。 
 FreeBSDユーザは/bin/shの正体がashなので注意。 
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 
  URLリンク(src.opensolaris.org) 
  URLリンク(heirloom.sourceforge.net) 
・csh/tcshのシェルスクリプトは推奨されません。 
 (理由は「csh-whynot」でググれ) 
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 
 manや参考リンクを見ましょう。 
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 
・シェルスクリプトのことをシェルってゆーな 
・シェルで使えるワイルドカード等は正規表現ではありません。 
 正規表現の話題はスレ違い(正規表現スレへ) 

□初心者へのアドバイス: 
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも 
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 
・知らないコマンドが出てきたらmanを引きましょう。 
・思い通りに動かないときは、まずは sh -x でトレースしましょう。 

前スレ 
シェルスクリプト総合 その15
スレリンク(unix板)l50

2:名無しさん@お腹いっぱい。
10/02/20 14:10:58
□関連スレ: 
sed 
スレリンク(unix板) 
正規表現 
スレリンク(unix板) 
おまえら! shell は何を使っているんですか? 
スレリンク(unix板) 
Eshell の使い方とか設定とか【Emacs Shell、Lisp】 
スレリンク(unix板) 

□初心者向けリンク 
「誰にでも」シリーズ 
URLリンク(kanji.zinbun.kyoto-u.ac.jp) 
/bin/shプログラミング入門 
URLリンク(freebooks.info.nara-k.ac.jp) 
シェルを使おう - 導入からプログラミングまで - 
URLリンク(www.netfort.gr.jp) 

□入門者向け書籍: 
プロフェショナルシェルプログラミング 
URLリンク(www.amazon.co.jp) 
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界 
URLリンク(www.amazon.co.jp) 
UNIXシェルプログラミング徹底解説 
URLリンク(www.amazon.co.jp) 
入門Kornシェル 
URLリンク(www.amazon.co.jp) 
入門bash 
URLリンク(www.amazon.co.jp) 

3:名無しさん@お腹いっぱい。
10/02/20 14:12:03
□参考リンク: 
UNIXの部屋 (沢山のコマンドの簡単な紹介など) 
URLリンク(x68000.q-e-d.net) 
POSIX: Shell & Utilities (標準規格) 
URLリンク(www.opengroup.org) 

□最近のシェルスクリプト本(1) 

(2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著) 
URLリンク(amazon.co.jp) 
(2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著) 
URLリンク(amazon.co.jp) 
(2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著) 
URLリンク(amazon.co.jp) 
(2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著) 
URLリンク(amazon.co.jp) 
(2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著) 
URLリンク(amazon.co.jp) 
(2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著) 
URLリンク(amazon.co.jp) 
(2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著) 
URLリンク(amazon.co.jp) 
(2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著) 
URLリンク(amazon.co.jp) 

4:名無しさん@お腹いっぱい。
10/02/20 14:12:54
□最近のシェルスクリプト本(2) 
(2005/07) UNIX シェルスクリプト辞典 川井 義治 (著) 
URLリンク(amazon.co.jp) 
(2005/08) シェルスクリプト ポケットリファレンス bash編 宮原 徹 (著), 川原 龍人 (著) 
URLリンク(www.amazon.co.jp) 
(2005/12) 図解でわかるLinuxシェルスクリプト・正規表現 小泉 修 (著) 
URLリンク(www.amazon.co.jp) 
(2006/01)詳解 シェルスクリプト アーノルド ロビンス (著), ネルソン・H.F. ベーブ(著), Arnold Robbins (原著), Nelson H.F. Beebe (原著), 日向 あおい (翻訳) 
URLリンク(www.amazon.co.jp) 
(2007/3) Linuxシェルスクリプトユーザー便利帳―bash2/bash3対応 伊藤 幸夫 (著), 寒川 陽美(著) 
URLリンク(www.amazon.co.jp) 
(2007/9) ゲームで極める シェルスクリプトスーパーテクニック 山森 丈範 
URLリンク(www.amazon.co.jp) 
(2007/10) UNIX/Linuxシェルスクリプトマスタリングハンドブック 野川 准子 
URLリンク(www.amazon.co.jp) 

5:名無しさん@お腹いっぱい。
10/02/20 14:13:05
シェルブリットはいいからゴチックメイドはどうなったんだよ

6:名無しさん@お腹いっぱい。
10/02/20 14:13:36
□関連書籍と関連リンク: 
FreeBSD Hypertext Man Pages 
URLリンク(www.freebsd.org) 
Linux JF (Japanese FAQ) Project. 
URLリンク(www.linux.or.jp) 
Unix Programming Frequently Asked Questions 日本語訳 
URLリンク(www.adl.nii.ac.jp) 
UNIXプログラミング環境 
URLリンク(www.amazon.co.jp) 

□人間初心者へのお願い: 
・このスレはシェルスクリプトについてのスレです。 
 シェルの対話的な利用についての話やスクリプトと関係ないコマンドの 
 使い方の質問などはスレ違いなので無用に願います。 

□シェルスクリプトでよく使うコマンド: 
制御・条件判定系: [,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 

7:名無しさん@お腹いっぱい。
10/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 ...)
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします

8:名無しさん@お腹いっぱい。
10/02/20 15:50:45
>>7
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'

9:名無しさん@お腹いっぱい。
10/02/20 17:18:45
>>7
宿題は自分でやれ。

10:名無しさん@お腹いっぱい。
10/02/20 17:45:49
>>8
行数が10万行近くあって、レポート用紙が何枚あっても足りません><

11:名無しさん@お腹いっぱい。
10/02/22 01:05:10
>>7 はマルチだから。

12:名無しさん@お腹いっぱい。
10/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

13:名無しさん@お腹いっぱい。
10/02/22 20:54:25
>>12
read a のところで aを入力すると、誤動作するようですが・・

14:名無しさん@お腹いっぱい。
10/02/22 21:34:43
# read a の次にこれを追加すれば解決。
echo "$a" | grep '^[[:digit:]]....$' >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo 'Error'
exit 1
fi

15:名無しさん@お腹いっぱい。
10/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

16:名無しさん@お腹いっぱい。
10/02/23 01:07:12
>>12
jkl.sh: Command not found.

ワザワザbashをインスコしなきゃ、UNIXじゃ使えないじゃん。

17:名無しさん@お腹いっぱい。
10/02/23 07:34:27
今時の「UNIX」はbashが標準で付いてるから無問題

18:名無しさん@お腹いっぱい。
10/02/23 14:34:21
セツ子、それUNIXちゃう。犬糞や。

19:名無しさん@お腹いっぱい。
10/02/23 14:52:34
いや、Linuxじゃなくて、今時のUNIXはbashが標準で付いてるという話をしてるんだが

20:名無しさん@お腹いっぱい。
10/02/23 15:34:49
AIXとかHP-UXってbash標準なの?


21:名無しさん@お腹いっぱい。
10/02/23 15:48:25
>>19
の言う今時のUNIXはやっぱLinuxなんだよな

22:名無しさん@お腹いっぱい。
10/02/23 16:24:16
だれもLinuxの話なんかしてないよ

で、ちょっと前だとbashはLinuxのものとして叩けたけど、
今はUNIXでもbashが標準になっちゃったから、その線では叩けなくなったんだよ。

23:名無しさん@お腹いっぱい。
10/02/23 16:48:16
>>22
だからそのUNIXって何だよ(w

ぱちょこんウニックスか?
なんとかベーエスデーか?


24:名無しさん@お腹いっぱい。
10/02/23 19:01:47
ここで華麗に PDP7 と 7th edition が登場

25:名無しさん@お腹いっぱい。
10/02/23 23:38:31
OS Xならついてくるが標準でbashが起動するかどうか忘れた

26:名無しさん@お腹いっぱい。
10/02/24 00:27:15
>>25
Tigerあたりからbashが標準。

27:名無しさん@お腹いっぱい。
10/02/24 00:33:37
AIX 5Lまでは、kshが標準
bashはオプション
6.1は知らん

28:名無しさん@お腹いっぱい。
10/02/24 01:41:34
>>20
無いよ。

>>23
*BSDにも無い。

Mac OS Xは全然UNIXとは程遠い。
kernelにFreeBSDが使われてるってだけ。
Solarisでも/opt扱いだったな。

29:名無しさん@お腹いっぱい。
10/02/24 02:27:31
>Mac OS Xは全然UNIXとは程遠い。
>kernelにFreeBSDが使われてるってだけ。
??????

30:名無しさん@お腹いっぱい。
10/02/24 02:30:29
ちょっと釣り針がでか過ぎるんじゃないか?

31:名無しさん@お腹いっぱい。
10/02/24 02:37:35
へえ釣りなんだw

32:名無しさん@お腹いっぱい。
10/02/24 04:54:25
あぁ、伝説のUNI+よ。。。

33:名無しさん@お腹いっぱい。
10/02/24 06:55:36
>>28
おいおい、*BSDはUNIXじゃないよw

あと、今のSolarisではbashは必須扱い。

34:名無しさん@お腹いっぱい。
10/02/24 07:04:41
>>28
Solarisのbashは、/optじゃなくて、/usr/bin/bash。
しかも、symlinkじゃなくて、/usr/bin/bashにバイナリ本体がある。
SUNWbashに入ってる。

35:名無しさん@お腹いっぱい。
10/02/24 08:20:19
ここ何のスレ?

36:名無しさん@お腹いっぱい。
10/02/24 09:37:59
まとめると
>>19
「今時のUNIX」はLinuxと決定されました。

37:名無しさん@お腹いっぱい。
10/02/24 09:41:33
>>36
LinuxはUNIXじゃないよ。*BSDもUNIXじゃないよ。

「今時のUNIX」は主にSolarisとかのこと。

Solaris10 -> bash標準
OpenSolaris -> bash必須

38:名無しさん@お腹いっぱい。
10/02/24 09:50:50
>>28
> Mac OS Xは全然UNIXとは程遠い。
UNIX認証を得てるので名はUNIX。
ユーザランドはFreeBSDベースに作られたDarwinなので、実も伝統的なu**x

> kernelにFreeBSDが使われてるってだけ。
kernelはMach

>>37
>LinuxはUNIXじゃないよ。
分かった上で言ってるんだと思うよ。

39:名無しさん@お腹いっぱい。
10/02/24 11:29:55
>>37
主にだったら他に何があるの?

主も糞もSolarisのみの話なら、今時のUNIXという
括りは間違ってるんだが

40:名無しさん@お腹いっぱい。
10/02/24 14:37:00
>>37
OpenSolarisもUNIXじゃないよ。

41:名無しさん@お腹いっぱい。
10/02/24 16:01:46
なんとかLinuxを正当化しようと今時のUNIX
なんて書いてみたものの、結局Solarisしかなくて

やっぱり今時のUNIX=Linuxに戻ってしまうという循環

42:名無しさん@お腹いっぱい。
10/02/24 16:03:13
だから、LinuxはUNIXじゃないって、、

43:名無しさん@お腹いっぱい。
10/02/24 18:28:06
>>24
第7版はPDP11です、とセルフつっこみ

44:名無しさん@お腹いっぱい。
10/02/24 21:26:34
>>12 って、bash独自なところは一つもないじゃん。
/bin/shに変更しても「今時のUNIX」ならすべて動く。

それはそうと、>>12 は無駄が多い記述だな、もうちょっと簡単に書ける。

45:名無しさん@お腹いっぱい。
10/02/24 21:40:54
>>44
うちの freebsd (/bin/sh = ash) と debian (/bin/sh = dash) では動きませんでした。
まあ、どっちも今どきの UNIX じゃないけど。
# ksh で拡張された機能が必要


46:名無しさん@お腹いっぱい。
10/02/24 23:06:02
>>45
FreeBSDはUNIXじゃありません。

今、話をしてるのは「UNIX」だけです。

47:名無しさん@お腹いっぱい。
10/02/24 23:33:26
OpenSolarisとか言ってるからUNIXじゃなくてもいいんだろ

48:名無しさん@お腹いっぱい。
10/02/24 23:36:02
>>46
おまえのいう「UNIX」の定義を述べよ。

49:名無しさん@お腹いっぱい。
10/02/24 23:53:32
UNIXかUNIXじゃないかってそんなに大事なことなの?

50:名無しさん@お腹いっぱい。
10/02/25 01:27:11
OS XもUNIXでつ

51:名無しさん@お腹いっぱい。
10/02/25 10:33:42
>>49
今時のUNIXと言い放ったバカと
それを受けとめる人間には重要

52:名無しさん@お腹いっぱい。
10/02/25 10:35:17
なんで重要なんだろう。

53:名無しさん@お腹いっぱい。
10/02/25 11:07:28
そんなに疑問に思うことなの?

54:名無しさん@お腹いっぱい。
10/02/25 11:08:53
うん。

55:名無しさん@お腹いっぱい。
10/02/25 14:58:09
改めて定義を聞かれて慌てているの図

56:名無しさん@お腹いっぱい。
10/02/25 19:35:24
とりあえずわからないから
UNIXの定義は来世紀への課題と致します

57:名無しさん@お腹いっぱい。
10/02/25 20:24:31
以下の結果を出力するスクリプトを,UNIXシェルで書け.
(基本仕様)
・コマンドとして実行できる.(UNIXシェルである.)
・コマンドラインの第1引数で数字を指定する.
・第1引数が数字以外だった場合はエラーメッセージを表示する.
・第1引数の数字以下の自然数のうち,素数をすべて見つけてリスト表示する.
・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.
(ポイント)
☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く.
☆コマンドラインの第1引数は,$1に格納されている.
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします

58:名無しさん@お腹いっぱい。
10/02/25 20:28:21
オウ、デジャブー

59:名無しさん@お腹いっぱい。
10/02/25 21:37:45
#!/bin/sh
/usr/games/primes 1 "$1"


60:名無しさん@お腹いっぱい。
10/02/25 22:23:21
>>57
『UNIXシェルである』という表現は有効なの?

61:名無しさん@お腹いっぱい。
10/02/25 22:46:26
前スレでマルチしてた人でしょ。
相手しちゃだめだよ。

62:名無しさん@お腹いっぱい。
10/02/26 06:56:02
>>59
>>57
>・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.

63:名無しさん@お腹いっぱい。
10/02/26 09:20:17
>>57
その頭の悪そうな問題書く人は駆け出しの厨房?
もし師と仰いでるなら、即刻師匠を変えた方が良い

64:名無しさん@お腹いっぱい。
10/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
}

65:名無しさん@お腹いっぱい。
10/02/26 20:54:41
>>64
偶数を表示してどうするw

>>57
>素数

66:64
10/02/26 20:55:01
失礼、書きかけのやつをカキコしちまった。
粗相。

67:名無しさん@お腹いっぱい。
10/02/26 20:57:40
「すべてUNIXシェル内部で処理し,..」だから、
grepも使っちゃ駄目だそうですよ

68:名無しさん@お腹いっぱい。
10/02/26 20:57:53
ってゆうか、微妙に長すぎてカキコめない・・・

早い話、素数かどうかわかれば良いだけなら
判定対象の数値をそれより小さい数値全てで割り算してみればいいだけ。
ようするにループで回せばいいだけ。

69:名無しさん@お腹いっぱい。
10/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
}

70:名無しさん@お腹いっぱい。
10/02/26 21:18:53
以下の結果を出力するスクリプトを,UNIXシェルで書け.
(基本仕様)
・コマンドとして実行できる.(UNIXシェルである.)
・コマンドラインの第1引数で人間の手番(○側か×側か)を指定する.
・人間とコンピュータが対戦するようにする.
・3x3マスのマルバツゲームのボードを作成する.
・○側と×側が交互に2次元座標上の位置を入力する.
・入力後、毎回ボードを表示する.
・たて、よこ、斜めのいずれかに○か×が3つ並んだ時点でプログラムを終了する.
・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.
(ポイント)
☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く.
☆コマンドラインの第1引数は,$1に格納されている.
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします

71:名無しさん@お腹いっぱい。
10/02/26 21:19:32
すっかり糞スレになったな

72:名無しさん@お腹いっぱい。
10/02/26 22:48:25
以下の結果を出力するスクリプトを,UNIXシェルで書け.
(基本仕様)
・コマンドとして実行できる.(UNIXシェルである.)
・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する.
・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする.
・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする.
・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる.
・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する.
・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密になれないバッドエンディングになるようにする.
・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する.
・ゲームの操作方法はコマンド選択式またはコマンド入力式とする.
・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.
(ポイント)
☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く.
☆コマンド選択方式のゲームにする場合、select文を使用できる。
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします

73:名無しさん@お腹いっぱい。
10/02/26 22:48:28
なったっていうか元から

74:名無しさん@お腹いっぱい。
10/02/26 22:55:02
>>73
おにいちゃん、寂しいこと言わないで・・・

好感度 :-2
ストレス:+5

75:名無しさん@お腹いっぱい。
10/02/26 23:10:47
くだらねえからもっとネタとしておもしろいお題提供してくれ

76:名無しさん@お腹いっぱい。
10/02/28 00:22:12
コマンドとかBシェルはいろいろ使っていましたし、使いこなせますって言ったら
うちはKだしなって言われました。
個人的にはコマンドとか多少は違っていてもBシェル知っていたら、
それなりにKシェルとかでも対応できるじゃんと思っていますが


いまいち違いがわからないのですが
具体的にBシェル、Cシェル、Kシェルの決定的な違いってあるのでしょうか?
たとえばこれがあるからこれを採用しているとか

77:名無しさん@お腹いっぱい。
10/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シェルのことは忘れていい。


78:名無しさん@お腹いっぱい。
10/02/28 00:39:50
>>76
URLリンク(www.nurs.or.jp)

79:名無しさん@お腹いっぱい。
10/02/28 01:11:10
シェルスクリプトとVBA、どちらが簡単ですか?

80:名無しさん@お腹いっぱい。
10/02/28 01:16:28
シェルスクリプト

81:名無しさん@お腹いっぱい。
10/02/28 01:43:14
>>80
シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか?

82:名無しさん@お腹いっぱい。
10/02/28 10:29:39
処理系の入手が有償なとこ

83:名無しさん@お腹いっぱい。
10/02/28 12:33:50
>>50
今時でつまつ調はキモい

84:名無しさん@お腹いっぱい。
10/02/28 13:17:02
3日も前の事を今時って…

85:名無しさん@お腹いっぱい。
10/02/28 17:10:20
bashの '-ne' は '=' ですか?

86:名無しさん@お腹いっぱい。
10/02/28 17:21:11
bashじゃなくても -ne と = は違います。

87:名無しさん@お腹いっぱい。
10/02/28 17:38:23
bashで '-eq' は '==' ですよね。
'=' はどう書くんでしょう?

88:名無しさん@お腹いっぱい。
10/02/28 17:45:24
何を意味する = だ?


89:名無しさん@お腹いっぱい。
10/02/28 17:49:33
bashじゃなくても -eq と = は違います

ついでに、-ne と != も違います

90:名無しさん@お腹いっぱい。
10/02/28 17:51:42
bashでは比較の '=' と '==' は同じ。
しかし、'='または'==' と -eq は違う。

91:名無しさん@お腹いっぱい。
10/02/28 17:58:53
今時の「UNIX」はbashじゃなくても'=='が使えるから無問題

92:名無しさん@お腹いっぱい。
10/02/28 18:25:42
で、今時の「UNIX」の定義にループ

93:名無しさん@お腹いっぱい。
10/02/28 18:27:07
ったく…今時の若いモンは…ブツブツ

94:85,87
10/02/28 18:30:09
混乱中...

95:名無しさん@お腹いっぱい。
10/02/28 18:40:42
その混乱してる行をコピペしてみろよ

96:名無しさん@お腹いっぱい。
10/02/28 19:45:24
rpmの.specの中で

%preun
if [ "$1" -eq "0" ]; then

97:名無しさん@お腹いっぱい。
10/02/28 19:48:38
>>96
"$1"が 0 でも 00 でも 000 でも一致するのが -eq

98:名無しさん@お腹いっぱい。
10/02/28 20:00:19
if [ "$1" = "0" ]; then

こうすれば0のみの一致になる?

99:名無しさん@お腹いっぱい。
10/02/28 20:06:40
if [ x"$1" = x0 ] ; then
と、xをつけたくなってしまうバッドノウハウ

100:名無しさん@お腹いっぱい。
10/02/28 20:10:19
>>90
kwsk

101:名無しさん@お腹いっぱい。
10/02/28 20:14:10
>>99
その xを付けるバッドノウハウが必要になるような "$1"の例が、
今時のUNIXシェルには存在しないんだな。

よってxを付けるバッドノウハウは不要。

102:名無しさん@お腹いっぱい。
10/02/28 21:04:27
ash(またはdash)だと、$1 が ! のとき、[ "$1" = 0 ] でコケる。

bash/ksh/zsh だとコケない。確かにUNIXシェルならコケないな。

103:名無しさん@お腹いっぱい。
10/03/09 04:37:55
>>100
文字として比較するか、数値として比較するか

104:名無しさん@お腹いっぱい。
10/03/09 04:39:31
UNIXシェルと言っているが、HP-UXなんかはPOSIXだお
bashに似ているが、微妙に違う罠

105:名無しさん@お腹いっぱい。
10/03/11 23:38:01
ファイルから1レコード読み込んでそのバイト数を取得したいのですが、レコードの最後にスペースがあると上手く行きません。

echo $record | wc -c
で取得できると思ったのですが、echoが末尾のスペースをカットしてしまい、上手く行かず…

どんな工夫で解決できるでしょうか?

106:名無しさん@お腹いっぱい。
10/03/11 23:46:46
$record に格納する時点でスペースが落ちてるんじゃないの。
$record にはどうやってデータ格納してるの?

107:名無しさん@お腹いっぱい。
10/03/12 06:46:57
>>106
まだテスト段階で、本格的なコーディングはしていないのですが、

record=`head -1 ファイルパス`
echo "${record}@" …ここではスペースが入っているのを確認
echo ${#record} …スペース込みの文字数が出力されるのを確認
echo $record | wc -c …バイト数が足りず

ということで、パイプする前のechoでスペースが落ちてるんじゃないかと…

108:名無しさん@お腹いっぱい。
10/03/12 06:59:52
なんで " を使ったり使わなかったりするのかに興味あるわ

109:名無しさん@お腹いっぱい。
10/03/12 18:33:15
で、今度は

echo "$record" | wc -c …バイト数が1個多い、、

、、と言うと予想。

110:名無しさん@お腹いっぱい。
10/03/12 21:01:22
>>107
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

111:名無しさん@お腹いっぱい。
10/03/12 21:07:44
>>110
$ bar="space "
$ /bin/echo -n "${bar}" | wc -c
10

???

112:名無しさん@お腹いっぱい。
10/03/12 21:21:03
>>>111
-n オプション(出力後改行しない)を持たないecho実装だとそうなる。
- n 空白 s p a c e 空白 改行


113:名無しさん@お腹いっぱい。
10/03/12 21:30:41
>>112
知ってるよ。だから >>110 じゃ不完全だって指摘してるんだろ。

114:名無しさん@お腹いっぱい。
10/03/12 21:35:42
そういうのってストレートに性格が出るよな。

115:名無しさん@お腹いっぱい。
10/03/12 21:42:52
$ bar="-n"
$ /bin/echo -n "$bar" | wc -c
0

116:名無しさん@お腹いっぱい。
10/03/13 10:29:32
>>105 >>107
echo ${#record} で目的の結果が得られているのに、
なぜ echo -n "$record" | wc -c とかわざわざ外部コマンドでやろうとするの?

(ダブルクォートと -n は付けておいたよ)

117:名無しさん@お腹いっぱい。
10/03/13 14:53:17
まず service httpd configtest して syntax OK が出た場合のみ
service httpd graceful を実行する

という処理を一行で可能でしょうか?

118:名無しさん@お腹いっぱい。
10/03/13 15:02:21
一行で可能です

119:名無しさん@お腹いっぱい。
10/03/13 16:09:53
わかってくださいよ

120:名無しさん@お腹いっぱい。
10/03/13 16:22:25
わかりました。

121:名無しさん@お腹いっぱい。
10/03/13 16:26:00
ありがとうございます。
今環境がないので、今度客先に行った時に試してみます。

122:名無しさん@お腹いっぱい。
10/03/15 01:02:16
環境変数に配列の宣言文を入れておいて、子シェルで配列を使いたいんですけど、上手くいきません。

export HOGE="(A B C D)"
hoge=${HOGE}

export HOGE=(A B C D)
hoge=${HOGE}

の両方試してみたのですが、どちらもhogeには文字列ががが

要素が10個近くあるので、それぞれ別の変数に入れて渡すとごちゃごちゃしそうで…
なにか良い方法はないですかね?

123:名無しさん@お腹いっぱい。
10/03/15 02:39:42
>>122

bash なら
hoge=("${HOGE[@]}")

これでどうでしょうか。

124:名無しさん@お腹いっぱい。
10/03/15 04:23:21
ががが

125:名無しさん@お腹いっぱい。
10/03/15 07:03:40
>>122
export HOGE="(A B C D)"
(子プロセスで)
eval hoge=${HOGE}


>>123
同じシェルだとうまく行くが、
配列はexportできないので、
それでは駄目。

126:名無しさん@お腹いっぱい。
10/03/15 17:36:54
function grepall(){
find . -name "*" -exec grep $1 {} /dev/null \;
}
findとexecを毎回打つのがめんどいんで
こんなのを書いたんですが

grepall "int main"とかやると
"int main"を含む行じゃなくて
intかmainを含む行が出力されてしまうんですが
そうならないようにできたりしますか?

127:名無しさん@お腹いっぱい。
10/03/15 17:41:53
>>126
function grepall(){ find . -exec grep "$1" {} /dev/null \;;}
か?

つーか GNU grep の -r 使えばいいんじゃね。

128:名無しさん@お腹いっぱい。
10/03/15 17:48:22
おお、どちらでもいけますた!ありがとう

129:名無しさん@お腹いっぱい。
10/03/17 22:16:20
cat ${file} |while read line
do
echo "${line},1"
done

でファイルの中身をグルグル回すシェルを作りたいのですが、ファイルの改行コードが落ちてしまうのはどうにかならないでしょうか?

読み込むファイルがCRLFなので、LEだけ落ちてCRだけ残るというなんとも半端なことに…
どうせならCRもまとめてなくなるか、CRLFのまま残るかして欲しいんですが…

130:名無しさん@お腹いっぱい。
10/03/17 22:36:30
>>129

echo "${line},1"
ってやってるなら、行末に ",1" が付くわけだけど、
${line}に ^M が含まれてるなら、"...^M,1" ってなるわな。

それ、LFが落ちてるわけじゃないよ。

131:名無しさん@お腹いっぱい。
10/03/17 22:37:25
cat file | tr -d '\r' | while

132:名無しさん@お腹いっぱい。
10/03/18 01:33:45
dos2unixコマンド使えば?

133:名無しさん@お腹いっぱい。
10/03/18 07:19:29
そんな、baseにない非標準コマンド使われてもねぇ

134:名無しさん@お腹いっぱい。
10/03/18 07:38:43
>>130
しかし、Windowsに持ってきてエディタで開いたり、バイナリエディタで見てもCRだけ残っているのですが…

>>131
やはりそういう形になりますかね…試してみます。

135:名無しさん@お腹いっぱい。
10/03/18 08:21:57
>>134
おまえ、>>130 の言ってる意味わかってないな。

CR+LFのLFが落ちてCRだけ残ったのではなく、
もともとCRが普通の文字とみなされて、
その後に「,1」が追加されただけのことで、
LFが落ちたわけではないんだと言ってるんだけど。

136:名無しさん@お腹いっぱい。
10/03/18 08:23:16
シェルって言ってるクズを相手にすんなよ。

137:名無しさん@お腹いっぱい。
10/03/18 08:24:35
tr とか dos2unix(笑)とかの外部コマンドを使うより、

IFS= の中に ^M を入れておくと readの際に自動的に CR を落してくれる。
これが最適解。

138:名無しさん@お腹いっぱい。
10/03/18 17:02:54
デフォルトのIFSって何だっけ?

139:名無しさん@お腹いっぱい。
10/03/18 17:08:36
スペース・タブ・LF

140:名無しさん@お腹いっぱい。
10/03/18 17:32:38
IFSって?

141:名無しさん@お腹いっぱい。
10/03/18 17:45:17
International FreeBSD School

142:名無しさん@お腹いっぱい。
10/03/18 17:51:24
OK, 願書もらってくる!

bakanisareta... orz

143:名無しさん@お腹いっぱい。
10/03/21 14:17:59
>>76
BシェルもKシェルも大して変わらんよ


144:名無しさん@お腹いっぱい。
10/03/21 18:14:29
というか、Kシェルはclassic Bシェルの拡張の一つ
ただ、Bashとは違う

145:名無しさん@お腹いっぱい。
10/03/22 23:29:11
質問させてください。

関数に渡す引数の中に、5C問題を起こすコードとスペースが混じっている可能性があるとき、どうやって渡せばいいんでしょう?

Fanc '${hoge}'
だと${hoge}が文字列になってしまうし、

Fanc "${hoge}"
だと5C含みの文字がエスケープされて文字化ける

146:145
10/03/22 23:31:14
変なところで改行してしまいました。申し訳ないです。

上手く変数を展開しつつ、さらにエスケープを抑止する方法はないでしょうか?

よろしくお願いします。

147:名無しさん@お腹いっぱい。
10/03/23 12:49:02
>>143
いや ksh は bourne sh とぜんぜん違うでしょ。
機能的には bash の方がよほど近い。

bsh は ${hoge%fuga} とか ${#hoge} とか $((1+1)) とかどれも使えない。
~ がホームディレクトリに展開されないぐらいだし。


148:名無しさん@お腹いっぱい。
10/03/23 13:05:31
>>147
今現在 B-shと言ったら、*BSDの ash または debianの dash相当のシェルを指す。
で、その B-shでは、${hoge%fuga} とか ${#hoge} とか $((1+1)) とか
すべて使える。

ちなみに、OpenSolarisからはBourne-shが消えて、
/bin/shは kshへのsymlinkになってる。

149:名無しさん@お腹いっぱい。
10/03/23 13:23:37
bash > ksh > {d,}ash

150:名無しさん@お腹いっぱい。
10/03/23 13:30:22
「Bourne Shellの文法の範囲内でのみ記述すること」の主張の
最大の根拠がSolarisに現存していたBourne Shellだったわけだが、
SolarisのBourne Shellがなくなったことで、
Bourne Shell互換で記述する意味がなくなってしまったな。。

151:名無しさん@お腹いっぱい。
10/03/23 13:33:30
>>145


152:名無しさん@お腹いっぱい。
10/03/23 15:11:32
>>150
OpenSolaris にも bourne sh はあるよ。
パスが /usr/has/bin/sh に変わったけど。

>>148
>今現在 B-shと言ったら、*BSDの ash または debianの dash相当のシェルを指す。

これ、ふつー posix shell といわない?
>>144 は classic Bシェルという言葉を出してるわけだし、
昔からの bourne sh の方を言ってると考えるのが妥当じゃないかと。


153:名無しさん@お腹いっぱい。
10/03/23 15:22:19
シェル雑談はいいから

154:名無しさん@お腹いっぱい。
10/03/23 15:53:36
>>152
ashやdashぱ posix shellじゃないよ。

たとえば、[[ ]] とかが使えないし、、

155:名無しさん@お腹いっぱい。
10/03/23 15:56:03
つーか、あれが使えないとか、コレが欠陥なんて
かんけーねーだろ。
自分が求める仕事が完結すれば、シェルは何だって良い。

酸いも甘いも理解して使えばいいんだよ


156:名無しさん@お腹いっぱい。
10/03/23 15:57:41
>>152
/usr/has/bin/sh は歴史的遺物として置いてあるのであって、
実際のスクリプトで使われていないし、使ってはいけない。

157:名無しさん@お腹いっぱい。
10/03/23 16:03:34
言えてる。別システムで使う予定も無いくせにな
アホくせ

158:名無しさん@お腹いっぱい。
10/03/23 16:06:38
一昔前ならいざ知らず、未だにこんな事言ってる化石がいるから衰退すんだよ。

159:名無しさん@お腹いっぱい。
10/03/23 16:48:01
さーて
夕飯までにcshでちょろっと組むかな

160:名無しさん@お腹いっぱい。
10/03/23 23:18:15
[[ ]] はPOSIX shellの仕様に無いと思ったが

161:名無しさん@お腹いっぱい。
10/03/24 00:22:06
こまけぇことはいいんだよ

162:名無しさん@お腹いっぱい。
10/03/24 01:17:36
ごもっとも。

163:名無しさん@お腹いっぱい。
10/03/24 01:51:48
このスレからこまけぇことを取ったら何が残るんだよ

164:名無しさん@お腹いっぱい。
10/03/24 01:56:59
>>163
はいいんだよ

165:名無しさん@お腹いっぱい。
10/03/24 02:04:55
敗因…

166:名無しさん@お腹いっぱい。
10/03/24 02:07:00
イーンダヨ!

167:名無しさん@お腹いっぱい。
10/03/24 05:51:17
グリーンだよ

168:名無しさん@お腹いっぱい。
10/03/24 06:46:53
ashみたいに、posixシェルでもBourneシェルでもないBシェルを
総称して何と呼べばいいの?

169:名無しさん@お腹いっぱい。
10/03/24 08:25:51
糞シェル

170:名無しさん@お腹いっぱい。
10/03/24 15:41:51
ラルク・アン・シェル

171:名無しさん@お腹いっぱい。
10/03/24 16:29:35
クミコ・タケダ・オン・シェル

172:名無しさん@お腹いっぱい。
10/03/24 16:42:41
シェル・ファントムハイヴ

173:名無しさん@お腹いっぱい。
10/03/24 16:49:49
★お待たせしました★ユーズド&B級ユーズド販売復活!

URLリンク(www.ioplaza.jp)
ユーズドアイテム公開日: 3月24日 (水) 19:30~

URLリンク(www.ioplaza.jp)
B級ユーズドアイテム公開日: 3月24日 (水) 20:15~

I-O OUTLET はアイオープラザ会員様限定の特別販売コーナーです。
アイオー製品のワケあり掘り出し物がタイムセールスで大放出。是非ご来店をお待ちしております。

※なお、ご利用には会員登録が必要です(登録無料)。

174:名無しさん@お腹いっぱい。
10/03/24 16:50:39
エコール・デュ・シェル

175:名無しさん@お腹いっぱい。
10/03/24 16:53:50
マイヨ・アルカンシェル

176:名無しさん@お腹いっぱい。
10/03/24 16:54:51
銀と真紅のアルカンシェル

177:名無しさん@お腹いっぱい。
10/03/25 00:58:36
>>160
あるよ。
if [[ ${1} = AAA]] ;then
とか可能

178:名無しさん@お腹いっぱい。
10/03/25 01:18:04
>>177
URLリンク(www.opengroup.org)
The KornShell-derived conditional command (double bracket [[]]) was removed
from the shell command language description in an early proposal.

179:名無しさん@お腹いっぱい。
10/03/25 07:39:10
ashには、$(( )) はあっても、(( )) がないな。
letコマンドの動作も変だし。

180:名無しさん@お腹いっぱい。
10/03/26 01:06:03
仕事の時は細かいことはどーでもいーが、
それ以外なら細かい話もよしではある。

181:名無しさん@お腹いっぱい。
10/03/26 06:53:42
(( )) はPOSIX shellの仕様に無いと思ったが

182:名無しさん@お腹いっぱい。
10/03/26 07:08:17
こまけぇことはいいんだよ

183:名無しさん@お腹いっぱい。
10/03/27 21:42:06
教えていただきたい
例えば以下のようなテキストファイル、file.hoge1があるとします。

AAA111ZZZZ
BBB222ZZZZ
CCC333ZZZZ
DDD444ZZZZ

これに対して、先頭CCCで始まるレコードの4カラム目から3カラム
つまり「333」を「XXX」にしたい。
AAA111ZZZZ
BBB222ZZZZ
CCCXXXZZZZ
DDD444ZZZZ

しかし「333」の位置には半角3バイトではあるが必ずしも「333」が入っている訳ではなく
何が入ってるかは一定でない。

これの解をお願いします。

184:名無しさん@お腹いっぱい。
10/03/27 21:49:03
sedでいいんじゃね?


185:183
10/03/27 22:01:24
333が固定なら

sed "s/^CCC333/CCCXXX/" file.hoge1

でいけると思ったのですが。。。

solarisのsh,kshです

186:名無しさん@お腹いっぱい。
10/03/27 22:03:32
s/^CCC.../CCCXXX/
ならCのあと何でも3文字いけるお

187:183
10/03/27 22:08:50
その記述だ!
ありがとう!

188:名無しさん@お腹いっぱい。
10/03/28 12:50:53
POSIX?shellとBourneShellって同じものでしょうか?

189:名無しさん@お腹いっぱい。
10/03/28 12:52:00
全然違います

190:名無しさん@お腹いっぱい。
10/03/28 12:58:36
>>189
返信thx!

POSIXシェル、Cシェル、キーシェル、コーンシェル
のどれかを今日中にある程度使えるようになりたいんだけど
何か良い方法ないですかねw

参考サイトや本と、実行環境が整えば・・・

191:名無しさん@お腹いっぱい。
10/03/28 13:13:36
環境なんてどこにでもあるし
サイトなんてぐぐればたくさん出てくる。

192:名無しさん@お腹いっぱい。
10/03/28 13:15:21
キーシェルってなんだろう。昭和シェルなら知ってる

193:名無しさん@お腹いっぱい。
10/03/28 14:36:10
>>191
そうなのですか
家のfedoraでコーンシェルが動かないっぽくて絶望してました
探してみます

>>192
keysh?らしいです
何かはよくわかりません><

194:名無しさん@お腹いっぱい。
10/03/28 15:10:10
>>193
fURLリンク(ftp.kddilabs.jp)

195:名無しさん@お腹いっぱい。
10/03/28 15:20:17
>>194
有難うございます!
超助かりました。

196:名無しさん@お腹いっぱい。
10/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の表示結果の数値を変数に格納する方法を教えて下さい

197:名無しさん@お腹いっぱい。
10/03/28 17:22:33
status=`uustat -q|wc -l`

198:196
10/03/28 17:53:58
>>197
できました!
本気でありがとう

199:名無しさん@お腹いっぱい。
10/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にしたい

何か工夫が必要なんでしょうか?

200:199
10/03/30 07:28:56
間違えました…

× awk {'print $1,$2,$3'}
○ awk -F , {'print $1,$2,$3'}

201:名無しさん@お腹いっぱい。
10/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


202:名無しさん@お腹いっぱい。
10/03/30 21:39:41
>>201
IFSって上書きした時の影響範囲ってスクリプト内だけなんですね…全体だと思ってました。
教えていただいたソースで実現できました。
ありがとうございます。

が、もう一度処理を見直した結果、ARRAYの加工と同時に元の${line}も使用するので、
一度lineに格納してから改めてARRAYに分割・格納する必要があることが分かりました。

条件が後出しになってしまって申し訳ありませんが、何か方法はないでしょうか?

203:名無しさん@お腹いっぱい。
10/03/31 01:35:39
set - $line

204:名無しさん@お腹いっぱい。
10/04/01 06:57:16
>>203
setを使ってみましたが上手くいかず…

ARRAY=`set - ${line}`
でいけるんですか?

205:名無しさん@お腹いっぱい。
10/04/01 09:17:38
>>204
set は $1 $2 $3 ... に値をセットする。


206:名無しさん@お腹いっぱい。
10/04/01 11:45:07
あぁ、釣りか。

つられちゃったw てへっ?☆

207:名無しさん@お腹いっぱい。
10/04/01 19:42:04
>>202

line=',aaa,bbb'
IFS=,
ARRAY=($line)

208:名無しさん@お腹いっぱい。
10/04/08 06:05:00
シェルスクリプトで2つのジョブを同時に実行した後、両方が終了するのを待つにはどうのようにしたらよいのでしょうか?

./a &
./b
これだと、2つめのジョブの終了は待ちますが、1つめはまだバックグランドで実行されている可能性が出てしまいます

209:名無しさん@お腹いっぱい。
10/04/08 06:19:10
./a &
./b
wait

210:名無しさん@お腹いっぱい。
10/04/08 06:41:22
または
./a &
./b &
wait


211:名無しさん@お腹いっぱい。
10/04/08 09:57:16
>>210
まじ?

212:名無しさん@お腹いっぱい。
10/04/08 10:03:25
まじ。

213:名無しさん@お腹いっぱい。
10/04/08 22:52:39
>>208
前スレか前々スレに確かそんな話題があった

214:名無しさん@お腹いっぱい。
10/04/28 14:12:30
質問です。
シェルスクリプト(bash)内で、非同期で他のシェルを呼び出したり、
javaコマンドを実行したりしたいのですが、どのように書けばよいのでしょうか。
(戻り値は必要無いです。)

215:名無しさん@お腹いっぱい。
10/04/28 14:12:54
&

216:名無しさん@お腹いっぱい。
10/04/28 14:29:50
>>215
bashのmanpageみたら確認できました。
(非同期、で検索してたので見落としてました。)
ありがとうございます。

217:名無しさん@お腹いっぱい。
10/05/05 04:29:57
bashとksh使ってます。

if文で以下、括弧の違いを教えてくれませんか?
ぐぐっても分からなかった・・・
2重も1重も同じとおもってよいのでしょうか?

if [[ xxxx ]];then

if [ xxxx ];then


218:名無しさん@お腹いっぱい。
10/05/05 05:17:13
おはようございます。教えて下さい。

シェルスクリプトの中で、
ls /honya/* >> list.txt をしたファイル名使いたいのですが、
Directory や Filenameにメタキャラやらスペースがいっぱい
あります。そんなの作るなって言えれば、いいのですが、ユーザ
さんは、Windowsだし。見てるとそれなりに規則性があって
運用してるんだなってわかります。
話がそれましたが、シェルの中での処理を教えて下さい。
よろしくお願いします。

219:名無しさん@お腹いっぱい。
10/05/05 07:05:17
>>217

[[ hoge -a boke ]] は文法エラー
[[ hoge && boke ]] と書く

[ hoge && boke ] は文法エラー
[ hoge -a boke ] と書く

-o と || についても同様。


[[ hoge = h* ]] は真
[ hoge = h* ] は偽(ただしカレントディレクトリにhogeというファイルがあると真)

220:名無しさん@お腹いっぱい。
10/05/05 07:15:24
>>218

ファイル名に改行コードが含まれていないなら、

ls /honya/* >> list.txt

while IFS= read -r hoge
do
echo "$hoge"
done < list.txt

の形で処理できる(メタキャラやらスペースもOK)

変数を参照する時には "$hoge" のように必ず " " を付けること。

221:名無しさん@お腹いっぱい。
10/05/05 08:25:45
>>217,218

ありがとうございます。さすがです。
読み込んだファイルを sed か tr 一つづつ 変換して書き出すしか
ないかなぁって思ってました。
こんな方法があるのですね。勉強させていただきました。


222:名無しさん@お腹いっぱい。
10/05/05 09:29:01
>>221
>>220のようにlsの結果を使うのは素人。↓こういう仮定を勝手に設定してはいけない。
> ファイル名に改行コードが含まれていないなら、

for fname in /honya/*;do echo "$fname";done
が正しい。

223:名無しさん@お腹いっぱい。
10/05/05 09:38:47
>>222
おまえ、もっとアホ

それではファイル名のスペースがもろに分離されてしまって
全く動作しない。


まあ、釣りだろうけど

224:名無しさん@お腹いっぱい。
10/05/05 09:41:43
>>222
質問自体が、
「lsの結果のファイルがすでにあって、それを処理するスクリプトが欲しい」
ということなのだから、lsの結果を使うことまでは「前提条件」かと。

225:名無しさん@お腹いっぱい。
10/05/05 10:55:07
>>223
分離されねーよ。
恥をかきにのこのこ出てきて… これほどのバカはめったにいない。

>>224
ダメな前提の質問なのだから、正しく処理するスクリプトを作成する事は不可能。が正解。

226:名無しさん@お腹いっぱい。
10/05/05 11:39:49
>>223
笑殺させられたくないから、もうひとつ先に言っといてやる。
「ARG_MAX超えたら動作しない」とか言い出すなよ。
確実に5人は笑い死にするぞ。

227:名無しさん@お腹いっぱい。
10/05/05 13:21:18
>>219
ありがとうございます。
括弧の数によって、&&や-aの使い方が変わるのですね。
一般的には、二重括弧でよいのでしょうか?



228:名無しさん@お腹いっぱい。
10/05/05 13:27:30
>>227
一般的には [ ] の方が良い。
[[ ]] は互換性がないので使わない方がよい。

229:名無しさん@お腹いっぱい。
10/05/05 18:09:03
218です
僕の質問が悪くて、申し訳ありません。
取り敢えず、シェルは完成して、今テスト中です。

結局、シェルの中で、Find -type f して、コマンドに
渡しました。

ここにアップしたら、見てもらえるかなぁなんて都合
良すぎ?
エラー処理とか全然してないんですが・・・。

230:名無しさん@お腹いっぱい。
10/05/05 18:18:34
シェルってゆうな。クズ。

231:名無しさん@お腹いっぱい。
10/05/05 21:51:50
>>230
人のことくずとか言うな。
何様?

232:名無しさん@お腹いっぱい。
10/05/05 21:54:43
つスルーカ

233:名無しさん@お腹いっぱい。
10/05/05 22:26:27
>>231
引っ込んでろ。クズ。

234:名無しさん@お腹いっぱい。
10/05/05 22:36:54
>>233
おまえさぁ、ここUnix板だぜ。
技術系の板で、あほか。

235:名無しさん@お腹いっぱい。
10/05/05 22:42:52
つルーカ

236:名無しさん@お腹いっぱい。
10/05/05 23:10:59
>>234
意味不明。引っ込んでろ。クズ。

237:名無しさん@お腹いっぱい。
10/05/05 23:21:52
つ スツーカ

238:名無しさん@お腹いっぱい。
10/05/06 04:01:37
>>235
新参乙です(悪いとは言ってない)
さんざんガイシュツ。
ま、ここの人は優しいから俺以外のシッタカが教えてくれます。

239:名無しさん@お腹いっぱい。
10/05/06 04:30:31
先生、頭のおかしい人がいます

240:名無しさん@お腹いっぱい。
10/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で行いたいのです。
どのようにすればうまく一つの変数に入れられるでしょうか?


241:名無しさん@お腹いっぱい。
10/05/06 12:48:38
まず配列を用意します

242:名無しさん@お腹いっぱい。
10/05/06 12:50:58
ごめん嘘
普通に空白区切りの変数でいいじゃないか

243:名無しさん@お腹いっぱい。
10/05/06 13:06:20
/bin/shがブレース展開してくれるOSは板違いです。

244:名無しさん@お腹いっぱい。
10/05/06 13:08:32
>>240
eval

245:名無しさん@お腹いっぱい。
10/05/06 13:15:37
>>243
その判断基準だとOpenSolarisも板違いになってしまいますな。

246:名無しさん@お腹いっぱい。
10/05/06 13:16:01
OpenSolarisってbashだろ?

247:名無しさん@お腹いっぱい。
10/05/06 13:17:58
>>246
OpenSolarisの /bin/sh の正体は ksh93 (Solaris10以前とは違う)

OpenSolarisの bashは /bin/bashで、/bin/shとは別。

248:240
10/05/06 13:36:52
>>242
空白区切りだと hoge.example.net:を全てに付与できなさそうなのです。

>>243
wwwwwww
Mac OS XなのでUNIXですけどwwww

>>244
とりあえず 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}` .

こういう感じでしょうか
ありがとうございました。


249:名無しさん@お腹いっぱい。
10/05/06 13:39:14
Mac OSはbash七日?

> rsync -avzu -e ssh `eval echo hoge.example.net:${FILES}` .
こっちはeval不要。

250:240
10/05/06 13:50:49
>>248
% 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
となって{}を展開してくれませんでした。

251:名無しさん@お腹いっぱい。
10/05/06 14:00:10
Macなら新Mac板で聞けば。

252:名無しさん@お腹いっぱい。
10/05/06 14:01:45
>>250
rsync -avzu -e ssh hoge.example.net:${FILES} .

ところで、FILESじゃなくてDIRSだろ。

253:名無しさん@お腹いっぱい。
10/05/06 14:04:08
ディレクトリもファイルだと教わらなかったか?

254:名無しさん@お腹いっぱい。
10/05/06 14:27:32
>>251
なぜ?

255:名無しさん@お腹いっぱい。
10/05/06 22:19:46
>>249
$ 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.


256:名無しさん@お腹いっぱい。
10/05/07 12:22:19
お前のログインシェルなんて誰も聞いちゃいない

257:名無しさん@お腹いっぱい。
10/05/07 21:52:57
>>256
お前バカだろ

258:名無しさん@お腹いっぱい。
10/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*

てっきりハードリンクだろうと思ったらちがったので驚いている。


259:名無しさん@お腹いっぱい。
10/05/07 22:03:23
>>255
Mac OS Xの /bin/shは Bash七日? と聞いてるんだから、
$ /bin/sh --version の結果を貼らないと。

260:名無しさん@お腹いっぱい。
10/05/08 00:10:32
まーどうでもいいけど

261:名無しさん@お腹いっぱい。
10/05/09 04:44:03
mencoderって知ってますか? 下記のような表示が流れるのですが
Ex.
Pos: 0.3s 10f ( 0%) 4.88fps Trem: 15min 14mb A-V:0.023 [0:0]

こういったコマンドの表示を必要な部分だけ切り出して表示したり、
プログレスバーを作ったりしたいのですが可能でしょうか?
Bashでエスケープシーケンスを使うんだろうなぁって思うのですが、とっ
かかりが分からなくて。

ご存じであれば、ご教授お願いします。



262:名無しさん@お腹いっぱい。
10/05/09 10:17:47
教授はあげません

263:名無しさん@お腹いっぱい。
10/05/09 10:36:48
「お願い」であって「下さい」では無い。

264:名無しさん@お腹いっぱい。
10/05/09 11:07:02
>>261
bash仮定していいのかな、この場合。

* IFSとset
* ${var#pattern} # のほかに ## % %% など。
* sedのような外部コマンド


265:名無しさん@お腹いっぱい。
10/05/09 11:15:18
>>264
mencoderだということをわかって回答してる?

mencoderが出してくるメッセージは改行なしで1行を書き換えたりしてるので、
行単位に処理する方法では対応できないし、画面に見える文字のまま取り出せる
わけではないんだよ。

266:名無しさん@お腹いっぱい。
10/05/09 11:24:15
             /)
            ( i )))
     / ̄\  / /
     |  ^o^ | ノ / < いみがわかりませんなぁ
     \   /  ,/
     / _   /´
    (___)/

267:名無しさん@お腹いっぱい。
10/05/09 11:36:33
単にCRで同一行に重ね書きしてるだけだよ。それ以上のカーソル制御しているわけじゃない。
でも、mencoder改造した方が楽だよね。

268:名無しさん@お腹いっぱい。
10/05/09 11:45:22
>>267
いや、少なくとも ESC [ J とかのシーケンスは含まれてる。

269:名無しさん@お腹いっぱい。
10/05/09 11:49:43
TERM=unknownで実行すればいい。正しく作られているならそんなコードは出なくなるはず。

270:名無しさん@お腹いっぱい。
10/05/10 16:00:31
超初心者です。入門UNIXshるプログラミングという本で勉強中ですが、
バッククォートによるコマンド置換の説明で以下のコマンドが出てきました。

STRING=`echo "abc \`echo def\` ghi"`
echo $STRING

期待値は abc def ghi ですが、
\`echo def\` 部分が `echo def` という文字列にならずコマンドとして
認識されるい理由がわかりません。
かといってバックスラッシュ取っちゃうと動かないわけで。


271:名無しさん@お腹いっぱい。
10/05/10 16:16:21
>>270
外側の ` ` で囲まれている時点で、
たとえ " " で囲んでも、" " の中のバッククォートの意味は消えない。
よって、` ` のネスティングとみなされてコマンド置換される。

バックスラッシュを取ると動かなくなるのは、
そうすると最初の `echo "abc ` まででクォートとみなされて
解釈が期待通りにならないから。

272:名無しさん@お腹いっぱい。
10/05/10 16:22:33
>>270
バックスラッシュの部分は、シェルと、外側のechoコマンドとによって
2回解釈されるので、解釈の結果コマンド置換が実行される。

273:名無しさん@お腹いっぱい。
10/05/10 16:28:16
>>271

大外の `` がポイントということですか。納得です。
バックスラッシュ取ると動かなくなる理由は、そいういう
ことなんだろうなと思ってました。

即レスTHXです。

274:名無しさん@お腹いっぱい。
10/05/10 16:56:17
STRING=$(echo "abc $(echo def) ghi")

275:名無しさん@お腹いっぱい。
10/05/10 16:58:04
ブルースブリンの本か?あの本は古臭いな、色々と

276:名無しさん@お腹いっぱい。
10/05/10 17:11:09
>>275
まだ最初の数十ページしか読んでないけど、丁寧に説明してくれてて
読みやすい。tips的な解説もあるし。
どういうところが古臭いと感じるん?

>>274
( ) の説明はまだ数ページ先だ!笑

277:名無しさん@お腹いっぱい。
10/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等で接続可能な状態です。

278:名無しさん@お腹いっぱい。
10/05/14 13:45:41
犬板に行きなさい。

279:名無しさん@お腹いっぱい。
10/05/14 14:01:13
ああ、UNIXにはbashなかったんだっけ?失礼しました。
Linux板に行ってきます。

280:名無しさん@お腹いっぱい。
10/05/14 14:02:41
>>277
エスパーすると、bashを使ってるつもりでbashではないのでは?

接続されない場合は、connect: Connection refused と表示され、
No such file or directory とはならない。

bash以外のシェルだと、No such file or directoryになるので。

281:名無しさん@お腹いっぱい。
10/05/14 14:07:11
>>277
間違えて csh(笑) で実行するとそのメッセージになるな。

282:名無しさん@お腹いっぱい。
10/05/14 14:31:11
bash-1.x というオチもあるな。

283:名無しさん@お腹いっぱい。
10/05/14 14:45:01
ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。

284:名無しさん@お腹いっぱい。
10/05/14 14:48:16
実はbashだけどlinuxでなかったとか

285:名無しさん@お腹いっぱい。
10/05/14 14:54:18
バカ? /dev/tcpだから犬板行けって言ったんだよ。

286:名無しさん@お腹いっぱい。
10/05/14 14:56:05
>>284
linuxじゃなくても bashなら /dev/tcp は使えるよ。デバイスファイルじゃないし。

>>285
おまえあほ。
/dev/tcpなんてデバイスファイルはない。
これは Bashの機能。

FreeBSDでも bashを使えば /dev/tcp は使える。

287:名無しさん@お腹いっぱい。
10/05/14 15:11:54
バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言ったんだよ。

288:名無しさん@お腹いっぱい。
10/05/14 15:15:28
>>287
言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに
見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww

289:名無しさん@お腹いっぱい。
10/05/14 15:30:24
>>288
必死だな。バカ。
そのように見えたというソース出せよ。ww

290:名無しさん@お腹いっぱい。
10/05/14 15:42:30
>>289
>>285

291:名無しさん@お腹いっぱい。
10/05/14 15:59:19
へ~、/dev/tcp初めて知った。 /dev/tcpなんてファイルは無いのに
ソケットを開くという特別解釈をbashの中でしてるんだ。 キモイ。

292:名無しさん@お腹いっぱい。
10/05/14 16:01:29
必死だな。バカ。他人の揚げ足とる事だけ考えてるから、
> 言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに
> 見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww
こういうバカな思いつきをするんだろうな。
お前、昨日FreeBSDスレに居たJava厨だろ。バカさ加減が同レベルだ。ww

293:名無しさん@お腹いっぱい。
10/05/14 16:09:27
>>285 さんからの遺言です

>バカ? /dev/tcpだから犬板行けって言ったんだよ。
>バカ? /dev/tcpだから犬板行けって言ったんだよ。
>バカ? /dev/tcpだから犬板行けって言ったんだよ。

とても恥ずかしいことなので3回言いましたwww

294:名無しさん@お腹いっぱい。
10/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
...


295:277
10/05/14 16:20:58
すみません解決しました。
>>283さんのおっしゃるとおりでごわした。

296:名無しさん@お腹いっぱい。
10/05/14 16:25:14
最近は awk でも同じような方法で tcp にアクセスできる世の中なんだよなぁ。
/dev/tcp じゃなくて /inet/tcp だけど。


297:名無しさん@お腹いっぱい。
10/05/14 19:17:20
>>293
お前本当に頭が弱いな。

> *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

298:名無しさん@お腹いっぱい。
10/05/14 19:22:04
>>297
お前本当に頭が弱いな。

bashで /dev/tcpが使えるはずなのに使えなかったから質問してたんだろ。
(もともと使えないものならそもそもそういう使い方をしないから質問もしない)
(オチは、./configure 時に --disable してただけ)


ところが、>>285 は、/dev/tcpというデバイスファイルがLinuxにはあって、
Linuxでしか /dev/tcpが使えないものと勘違いしたんだよ、、、

299:名無しさん@お腹いっぱい。
10/05/14 20:20:13
>>298
お前かわいそうなくらい頭が弱いな。

> ところが、>>285 は、/dev/tcpというデバイスファイルがLinuxにはあって、
> Linuxでしか /dev/tcpが使えないものと勘違いしたんだよ、、、
それはお前の妄想。

*BSD(のports, pkgsrc)、Solaris(のコンパイル済みの奴)は使えるように
コンパイルしてある。従って使えないのは>>283の指摘通りそのようにコ
ンパイルしているから。

従って、>>285

> *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

300:名無しさん@お腹いっぱい。
10/05/14 20:42:33
>>299
お前かわいそうなくらい頭が弱いな。

>>283 は俺だ。で、>>283 = >>298 = 俺だ。
結局俺の指摘が正しかった。

ちなみに、>>286 も俺。
だから、>>286 に指摘されるまで、 >>285 は /dev/tcp がLinux特有だと勘違いしていた。

301:名無しさん@お腹いっぱい。
10/05/14 20:48:37
>>285 = >>283 が、仮に /dev/tcpのことを理解していたなら、
bashの/dev/tcpの質問に対して、「Linux板に行きなさい」と言った理由が
合理的に説明できないな。

よって、>>285 = >>283 は bashの/dev/tcp について知らなかった。
ここまでは決定的事実。
で、そこから演繹される事実として、
Linuxには/dev/tcpというデバイスファイルがあって、
Linuxカーネルによって/dev/tcpが処理されてる→Linux特有だからLinux板行け、
と誤って言ってしまったと言える。

302:名無しさん@お腹いっぱい。
10/05/14 20:50:51
>>301

安価おかしくない?
>>285 = >>278 だろ?

303:名無しさん@お腹いっぱい。
10/05/14 20:56:37
>>301
> bashの/dev/tcpの質問に対して、「Linux板に行きなさい」と言った理由が
> 合理的に説明できないな。
既に楽勝でしている。お前の低性能なJava脳がそれを理解できないだけ。ww

304:名無しさん@お腹いっぱい。
10/05/14 21:14:27
>>303
>既に楽勝でしている。

って、


>>287
>バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言ったんだよ


これのことだよね。

これって、俺が >>283
>ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。

って正解言った後の、後出しじゃん。

つまり、>>287>>283 を見るまでは /dev/tcpについて知らなかったwww

305:名無しさん@お腹いっぱい。
10/05/14 21:25:46
お前ら今日も全力だなw
わざわざ見に来る甲斐があるわ

306:名無しさん@お腹いっぱい。
10/05/14 21:37:56
>>304
低脳全開だな。犬板への誘導はオレ(>>278)が真っ先にしている。
一々理由を説明する必要は無い。

> *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

307:名無しさん@お腹いっぱい。
10/05/14 21:39:00
おまいら味噌汁ぶっかけんぞゴラァ!

308:名無しさん@お腹いっぱい。
10/05/14 21:55:53
ぶっかけはオプションですよ。

309:名無しさん@お腹いっぱい。
10/05/14 22:01:55
>>306 の主張ポイントがズレまくりで何を言いたいのかわからん。

「使えてりゃ質問しねーんだよ。」って何度も言ってるけど、
じゃあ、「*BSDでもSolarisでも bashで /dev/tcpは使えない」と主張したいの?

だとすると違うよ。実際使えるし。

ああ、やっぱり「Linuxのみで使える機能」と未だに思ってるんだな。
だから >>278 「犬板に行きなさい。」なんて言ったんだな(笑)

310:名無しさん@お腹いっぱい。
10/05/14 22:05:01
>>306
> 犬板への誘導はオレ(>>278)が真っ先にしている。

↑っ言ってるけど、「犬板への誘導」自体が間違い、というのが結論なんだけど。
つまり、>>306 は、「真っ先に間違いを書き込みました」って
自分で認めてることになる。

よって、>>306 の負け。

311:名無しさん@お腹いっぱい。
10/05/14 22:08:55
>>283
> ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。

が正解だけど、補足すると、「ディス鳥によっては」の部分は重要じゃなくて、
「/dev/tcpの機能はbashのコンパイル時に無効にすることもできる」
ってのがポイント。*BSDでもSolarisでも、/dev/tcp無効のbashは作れる。

よって、>>283 はLinux板に誘導はしていないし、Linux特有とも言ってない。

Linux板に誘導した >>278 、Linux特有と勘違いした >>278 が間違い。

312:名無しさん@お腹いっぱい。
10/05/14 22:12:08
>>309
お前がバカで理解できないだけ。

>>310
> 「犬板への誘導」自体が間違い、というのが結論なんだけど。
お前の妄想。

> *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

313:名無しさん@お腹いっぱい。
10/05/14 22:12:58
たぶん、
>>285
> バカ? /dev/tcpだから犬板行けって言ったんだよ。
を書いてる時点で、

>>283
>ディス鳥によっては /dev/tcpの機能がdisableされてコンパイルされてるらしい。

はすでに読んでたはずだけど、この「コンパイル」というのが、
bashのコンパイルじゃなくて、Linuxカーネルのコンパイルのこどだと
>>285 が誤解したんだろうな。

だから、>>283 を読んだ時点でもまだ「Linux特有の機能」と思い込んでいたからこそ、
>>285 みたいなことを書いたと説明がつく。

314:名無しさん@お腹いっぱい。
10/05/14 22:14:08
>>313
壊滅的にバカだな。

> *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

315:名無しさん@お腹いっぱい。
10/05/14 22:17:00
>>312
>> 「犬板への誘導」自体が間違い、というのが結論なんだけど。
> お前の妄想。


ということは、「犬板への誘導が正しい」と主張するわけ??

だったら、/dev/tcp が Linux独自のデバイスファイルであると
まだ思い込んでるの??

あと、試しに手元のFreeBSDとかのbashで試してみろ。
ちゃんと/dev/tcpが使えるから。
それでLinux板への誘導が間違ってたことが理解できたかい?

316:名無しさん@お腹いっぱい。
10/05/14 22:24:16
>>315
ディストリよっては無効にされている場合がある。これはお前も言っている事だ。
この板で「XXというディストリです」と言われても「おそらく無効になっている」事しか
わからない、犬板なら「そのディストリは無効になっている」事までわかる。
だから犬板で聞くのが正しい。


> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
> ということは、「犬板への誘導が正しい」と主張するわけ??
お前、バカすぎる。考える事を止めた方が良い。www

317:名無しさん@お腹いっぱい。
10/05/14 22:28:48
>>314
「*BSDでもSolarisでも bashで /dev/tcpは使える」は正しい。
「*BSDでもSolarisでもLinuxでも bashで /dev/tcpは使える」も正しい。

「*BSDでもSolarisでもLinuxでも、bashの./configureで/dev/tcpを無効にできる」も
正しい。

よって、どこにもLinux特有の事項がない。

元質問の >>277 にはOSは書いてなくて、
bashで/dev/tcp云々としか書いてないから、

これだけだと FreeBSDやSolarisで、bashを自分で./configureして
使っている可能性もある。

よって、>>277 の質問だけで >>278「犬板に行きなさい。」と言ったということは、
>>278 が /dev/tcpがLinux独自の機能だと誤解していたからに他ならない。

318:名無しさん@お腹いっぱい。
10/05/14 22:32:29
>>316
>この板で「XXというディストリです」と言われても

↑言ってないことを仮定するな。事実を曲げるな。

元質問者の >>277 はディストリもOSも言ってない。

それから、>>283 「ディス鳥によっては /dev/tcpの機能がdisable…」を
見るまで正解を知らなかったくせに、後出しで >>283 が言ったことを
最初から知ってたようなふりするのをやめろ。

319:名無しさん@お腹いっぱい。
10/05/14 22:36:24
>>316
UNIX板的には、bashを objdump -T してみて、
socket()などのネットワーク系の関数が呼び出されているかを確認して、
本当に /dev/tcpの機能が compile in されてるかどうか確認する方法を
教えることもできたはずだ。

これも、OSもディストリも関係なく行なえる方法だ。

なのに、>>278「犬板に行きなさい。」 がすべてを台無しにした。

320:名無しさん@お腹いっぱい。
10/05/14 22:44:05
>>317
記述されていなくてもわかる。
デフォルト有効なのだから、野良コンパイルした場合に、知らずに無効になっている事はない。
従って、コンパイル済み(もしくはmake一発のports, pkgsrc)と予想できる。
そして、ports,Solarisは有効になっているのだから、残りはLinuxと予想できる。

バ カ に は 予 想 出 来 な い ら し い が。 w w w

>>318
知らなかったというのはお前の妄想。www

> 元質問者の >>277 はディストリもOSも言ってない。
犬臭さが漂ってるから楽勝でわかる。事実あたっている。

321:名無しさん@お腹いっぱい。
10/05/14 22:44:22
>>316
>「XXというディストリです」と言われても「おそらく無効になっている」事しか
>わからない

>>319 が言うように、objdump -T で、/dev/tcpが無効になってるかどうか
確認する方法を知らなかったんですね(笑)

322:名無しさん@お腹いっぱい。
10/05/14 22:47:42
>>320
>野良コンパイルした場合に、知らずに無効になっている事はない


知らずに無効になっている事は「ある」

野良コンパイルの参考に、Web等から ./configureのオプションをコピペして、
本人も忘れてることなんて普通にある。

323:名無しさん@お腹いっぱい。
10/05/14 22:47:45
>>320
この予想プロセスはちょっと感心した

324:名無しさん@お腹いっぱい。
10/05/14 22:49:49
>>319
後出しの言い訳。必死だな。

> *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

325:名無しさん@お腹いっぱい。
10/05/14 22:51:14
>>323
後出しジャンケンだから何でも言えるよな。
実際そんな予想ができてたわけないのに。

326:名無しさん@お腹いっぱい。
10/05/14 22:55:20
今北産業

327:名無しさん@お腹いっぱい。
10/05/14 22:56:16
>>324 が何度もコピペしてる
「*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww」
って、誰への反論なの?

実際*BSDでもSolarisでも bashで /dev/tcpは使えるし、
>>324 自身は使えないと思ってたんだとすると、
>>324 が言ってることは「自分が間違ってたと」自分に言ってることになるだけど、、

328:名無しさん@お腹いっぱい。
10/05/14 23:03:24
まとめ: >>278 = >>285 が知らなかった(そして恥をかいた)こと。

・/dev/tcpはLinux独自のデバイスファイルだと思っていた
・bashが/dev/tcpを特別扱いすることを知らなかった
・FreeBSD等でも、bashで/dev/tcpを使えることを知らなかった
・bashのコンパイル時に/dev/tcpを無効にすることができることを知らなかった
・OSやディス鳥がわからなくても、bashバイナリをobjdump -Tして調べる方法を知らなかった。

329:名無しさん@お腹いっぱい。
10/05/14 23:08:17
今日はやけに盛り上がってるな

330:名無しさん@お腹いっぱい。
10/05/14 23:12:38
俺も嬉しいよ

331:名無しさん@お腹いっぱい。
10/05/14 23:17:18
>>327
>>288に決ってんだろ。

> *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

>>328
バカが、必死すぎる。www

332:名無しさん@お腹いっぱい。
10/05/14 23:19:13
>>328
>・/dev/tcpはLinux独自のデバイスファイルだと思っていた

俺も最初そう思っちゃった。 で、自分のシステムには無いから
一生懸命カーネルオプションをあさり始めたw

333:名無しさん@お腹いっぱい。
10/05/14 23:27:55
>>331
それを >>288 に言ってるなら、全然反論になってないじゃん。
>>288 の言ってることが正しいんだし。

334:名無しさん@お腹いっぱい。
10/05/14 23:31:47
>>331
質問と回答は、質問者だけのものではない。
その質問と回答を読んだ第3者にとっても有益であるべきものだ。

質問がLinux独自のもので、Linux以外のUNIXユーザーに無益なものなら
Linux板への誘導が適当であろう。

ところが、>>288 が言うように、
「*BSDでもSolarisでも bashで /dev/tcpは使える」

よって、bashの/dev/tcpに関する質問と回答をUNIX板で行なうことは
UNIXユーザーにとって有益である。

335:名無しさん@お腹いっぱい。
10/05/14 23:38:09
>>333
>>277が使用しているのが*BSDやSoalrisであるならば動くのだから、
*BSDでもSolarisを持ち出すのは的外れ。
そんな単純な事に気付かない>>288を大笑いしている。

> *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

336:名無しさん@お腹いっぱい。
10/05/14 23:43:48
>>334
後付け&&自演乙

個々のディストリのコンパイルオプションなんて興味ねーんだよ。
しかもスクリプトに関する質問じゃねーし。

337:名無しさん@お腹いっぱい。
10/05/14 23:44:06
>>335
> >>277が使用しているのが*BSDやSoalrisであるならば動くのだから、


その仮定が間違い。
>>322 で言ってるように、*BSDやSoalrisの野良コンパイルで、
知らずに /dev/tcpを無効にしてしまってることはある。


それから、
>>288 は質問者に対して答えてるんじゃなくて、
>>287 が/dev/tcpのことについて知らなかったみたいだから、
「*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww」
と教えてあげてるんだよ。

いずれにしても、キミが最初から本当に /dev/tcpのことを知っていた上で
Linux板に誘導したのではないことはバレバレ何だから、
見苦しい言い訳はやめとけ。

338:名無しさん@お腹いっぱい。
10/05/14 23:46:57
>>336
>しかもスクリプトに関する質問じゃねーし。


ハイ、ここ間違い。/dev/tcpはスクリプトに関する質問。
インタラクティブにも使おうと思えば使えるが、
インタラクティブならtelnetとかnetcatが使えるからそんなことしない。
/dev/tcpでやろうとするのはスクリプトの場合。

339:名無しさん@お腹いっぱい。
10/05/14 23:48:49
>>337
お前にはわからなかっただけで高い確率で予想出来ていた。事実合っている。
お前の言いがかりは既に論破されてる。低性能な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

340:名無しさん@お腹いっぱい。
10/05/14 23:49:05
>>294
このファイルディスクリプタの3がwww.google.comに対して
開かれているというのを調べる方法を教えて下さい。
lsofで調べてみたけど分かんなかった

341:名無しさん@お腹いっぱい。
10/05/14 23:51:52
>>340
ls -l /proc/プロセスID/fd/3
でわかるでしょ?

342:名無しさん@お腹いっぱい。
10/05/14 23:58:45
>>341
それだとsocketだということしかわからない。

>>340
lsof -i で接続先のホスト名まで出るけど

343:名無しさん@お腹いっぱい。
10/05/15 00:10:19
>>341,342
ありがとうございます。
lsof -i
で出ました;-)


344:名無しさん@お腹いっぱい。
10/05/15 00:11:23
>>339 が、「Linuxの一部の鳥のbashでは/dev/tcpが使えないものがある」なんて
知っていた可能性はゼロ。
実際には、/dev/tcpというLinuxのデバイスだのbashだののキーワードに
脊髄反射して「Linux板池」と言った。

ところが、>>283 によって/dev/tcpのことを説明され、
恥をかいた >>339 は、最初から/dev/tcpのことを知っていたかのように
装い始めた、というのが真相。


本当に最初から/dev/tcpのことを知っていたなら、
>>278 で「犬板に行きなさい」なんて言わずに、
たとえば「うちのFreeBSDでは >>277 でうまく行くけど」とか、
「bashのバージョンは?」とか、
そういう反応になっていたはず。

そういう反応になっていなかったということは、
>>278 は /dev/tcp を知らなかった、が結論。

345:名無しさん@お腹いっぱい。
10/05/15 00:16:31
>>344
すでに論破された妄想を繰り返すな。見苦しい。
お前のバカを基準にして言いがかりをつけていただけ。

↓バカの証
> *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

346:名無しさん@お腹いっぱい。
10/05/15 00:18:31
>>295
で、結局どのUnixなのか気になるから教えてくれません? 

347:346
10/05/15 00:29:08
手近のシステムいくつか試して見たらRH系には全部あるけど、
ubuntuでは出来なかった。 deb系では無い? 
ぐぐったらこんなの見つけたw

Debian Bug report logs - #146464
bash: /dev/tcp should be enabled by default
URLリンク(bugs.debian.org)

最初にレポートされたのが2002年でずっと無視されてるw

348:名無しさん@お腹いっぱい。
10/05/15 01:45:57
何だ、もう終わっちゃったのか。寂しいな。

349:名無しさん@お腹いっぱい。
10/05/15 07:16:25
>>345
何言ってるの?

>>345 はすでに論破されている。
というか、>>333 が言ってるように、
何度もコピペしてる >>345 等は最初から論点がズレていて
反論になってない。だから何回コピペしてもほとんど相手にされてない。

もう一度まとめると、
>>278 = >>285 が知らなかった(そして恥をかいた)こと。

・/dev/tcpはLinux独自のデバイスファイルだと思っていた
・bashが/dev/tcpを特別扱いすることを知らなかった
・FreeBSD等でも、bashで/dev/tcpを使えることを知らなかった
・bashのコンパイル時に/dev/tcpを無効にすることができることを知らなかった
・OSやディス鳥がわからなくても、bashバイナリをobjdump -Tして調べる方法を知らなか
った
・野良ビルドでも、Web上のコマンドラインをコピペして知らずにdisableオプションを付
けていて本人が忘れてることが良くあることを知らなかった
・/dev/tcpはスクリプトで使うものだと知らなかった(>>338 が指摘)

350:名無しさん@お腹いっぱい。
10/05/15 07:25:17
>>345
は論点のすり替えだな。

>>288
>言い訳見苦しいね。Linuxを目のカタキにしてると /dev/tcpが Linux独自のデバイスに
>見えたんだろうね。*BSDでもSolarisでも bashで /dev/tcpは使えるんだよwww

↑が言ってるのは、「/dev/tcpはLinuxだけで使える」←に対する反論として、
「*BSDでもSolarisでも bashで /dev/tcpは使える」と言ってるに過ぎない。

「使えてれば質問しないかどうか」の結果がどうであれ、
「/dev/tcpはLinuxだけで使える」←が間違いであると言う事実の主張に対する
反論にはならない。

「/dev/tcpはLinuxだけで使える」と思っていた >>278 = >>285
苦肉の策で思いついた言い訳が >>345 他多量の同文コピペというわけだなwww

351:名無しさん@お腹いっぱい。
10/05/15 08:27:43
流れを振り返ってみよう

>>277 (元質問)
 

 
>>280 (/dev/tcpがbashの機能だと正しく知ってる回答者)
>エスパーすると、bashを使ってるつもりでbashではないのでは?

>>285 (/dev/tcpはLinuxの機能だと誤解してる馬鹿)
>バカ? /dev/tcpだから犬板行けって言ったんだよ。

↑ 285の「バカ」は280に対して言っている。つまり、
「bashをいくら追求しても、Linuxじゃない限り/dev/tcpは使えない」と
思い込んでいる。
「/dev/tcpだから犬板」という言い方は「/dev/tcpイコールLinux」と考えてるからこそ
出てくる言葉。
 

 
>>286 (/dev/tcpはbashの機能であってLinux独自のものじゃないことの指摘)
>/dev/tcpなんてデバイスファイルはない。
>これは Bashの機能。
 

 
>>287 (見苦しい言い訳)
>バカ? こんな腐った機能を無効にしてる良心的なディストリもあるから犬板行けって言
ったんだよ。

>>287>>285 とで、言ってることが自己矛盾してる。
>>286 の指摘を見てから言い訳を考えてるから、書き込みに15分以上もかかってるw


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch