2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

シェルスクリプト総合 その22

1 :名無しさん@お腹いっぱい。:2013/11/01(金) 07:58:50.52 .net
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
  http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その21
http://toro.2ch.net/test/read.cgi/unix/1352973453/

2 :名無しさん@お腹いっぱい。:2013/11/03(日) 03:04:59.12 .net
おつ

3 :名無しさん@お腹いっぱい。:2013/11/03(日) 08:20:00.06 .net
bash なら exponent は ** なのにな

4 :名無しさん@お腹いっぱい。:2013/11/04(月) 13:06:48.63 .net
case文を抜け出す方法はbashには無かったけど
ほかのシェルでcase文から抜け出す方法はある?

5 :名無しさん@お腹いっぱい。:2013/11/04(月) 15:04:59.50 .net
;;でcaseから抜けるけど

6 :名無しさん@お腹いっぱい。:2013/11/05(火) 11:03:36.55 .net
if [ $? -eq 0 ]; then

みんな、$? は""で囲う派? 囲わない派?

7 :名無しさん@お腹いっぱい。:2013/11/05(火) 18:10:47.33 .net
普段は囲まないけど、誰かの書いたのをいじるときはそれに合わせるよ派

8 :名無しさん@お腹いっぱい。:2013/11/06(水) 07:06:35.01 .net
数値なので囲わない派

9 :名無しさん@お腹いっぱい。:2013/11/06(水) 08:25:01.88 .net
$前に0付ける派

10 :名無しさん@お腹いっぱい。:2013/11/06(水) 11:17:00.72 .net
$の前に0つけるのってファイナルビューティ醸してるな。
この発送はなかった。

11 :名無しさん@お腹いっぱい。:2013/11/08(金) 15:58:55.00 .net
>>9
8進数になることない?

12 :名無しさん@お腹いっぱい。:2013/11/08(金) 16:21:43.15 .net
>>11
あるねw

13 :名無しさん@お腹いっぱい。:2013/11/08(金) 16:57:46.84 .net
$ test 12 -eq 12; echo $?
0
$ test 012 -eq 12; echo $?
0

14 :名無しさん@お腹いっぱい。:2013/11/08(金) 17:49:27.80 .net
>>13
あ、使ってる関数は自動変換するけど、10進数限定にもできて、testは限定されてた。
だからやっぱりないw

15 :名無しさん@お腹いっぱい。:2013/11/09(土) 13:58:50.12 .net
マイナス
"負数"が返ってきたらアウトだな

と思ったけど実行結果は必ず0か自然数なので問題なかった

16 :名無しさん@お腹いっぱい。:2013/11/10(日) 17:23:11.15 .net
あるファイルが、実行可能な設定ファイルであることを
チェックして保証したいんだけど、なんかいい方法ある?

手抜きなんかしないで、ひとつひとつちゃんと
HOGE="PIYO"
みたいなフォーマットにのっとってることを
文法チェックして確認しないとだめ?

17 :名無しさん@お腹いっぱい。:2013/11/10(日) 19:40:09.82 .net
実行可能って、エラーを発生させることなくパース可能という意味?
任意の書式だと困難だと思うけど。

18 :名無しさん@お腹いっぱい。:2013/11/11(月) 01:57:30.15 .net
>>16
何の設定ファイル?

19 :名無しさん@お腹いっぱい。:2013/11/11(月) 09:45:35.56 .net
それは秘密

20 :名無しさん@お腹いっぱい。:2013/11/11(月) 10:08:05.71 .net
それがわからないと答えにくい。

21 :名無しさん@お腹いっぱい。:2013/11/11(月) 15:43:09.06 .net
そのファイルでどこまでの記述を許すかによるんじゃない?
a="b" の範囲内ならgrepでできるかもしれない。
a=${hoge:=piyo} とかも許すなら、俺しらね。
さらにシェルで書けることならなんでもOKとするなら、
本気でパーズしなきゃだめだろ。

22 :名無しさん@お腹いっぱい。:2013/11/11(月) 19:30:27.56 .net
シンタックスが正しくてもセマンティクスが正しくなければ
「実行可能」ではないのでは?

23 :名無しさん@お腹いっぱい。:2013/11/11(月) 20:16:49.22 .net
16はもう来ないのか?

24 :名無しさん@お腹いっぱい。:2013/11/12(火) 21:21:47.34 .net
bashがデカ過ぎる…。そして重過ぎる…。

25 :名無しさん@お腹いっぱい。:2013/11/13(水) 12:42:19.69 .net
>>17
そうだね

>>21
設定ファイルとして使いたいけど実装は面倒なので実行で済ませたい
って横着な話が起点なので、いい方法がなければ自力でチェックします。

bash -r とか使えるかなと思ったけど無意味っぽかった

26 :名無しさん@お腹いっぱい。:2013/11/13(水) 13:08:08.67 .net
ならスクリプトとして完全なチェックは必要ないよね。
自力でもそんなに難しくないんでは。

27 :名無しさん@お腹いっぱい。:2013/11/20(水) 19:52:35.18 .net
一定時間、何度か繰り返しコマンドを実行したくて、

for i in `seq 1 10`
do
 何かのコマンド
 sleep 1h
done
echo "finished" | write username

といったスクリプトを書いているのですが、このやり方だと
最後にコマンドを実行してから一時間、無駄に sleep してしまいます。
最後の sleep だけ実行しない方法はないでしょうか。

28 :名無しさん@お腹いっぱい。:2013/11/20(水) 19:58:50.00 .net
再編集の時が恐いけど
変数 i<=9 のときにsleep 1h

i/=10の時に sleep 1h

29 :名無しさん@お腹いっぱい。:2013/11/20(水) 20:00:40.20 .net
>>27

i=10
while
 何かのコマンド
 ((--i)) &amp;&amp; sleep 1h
do :; done
echo "finished" | write username

30 :27:2013/11/20(水) 20:07:56.43 .net
おお! 素早い回答、ありがとうございます。
ですが、たびたびすいません。

実際に使っているスクリプトだと、ループの実行回数が不定な場合があるのです。
(行数が特定できないファイルからの読み込みとか)
最後のループでは sleep しない、という手段はあるでしょうか。

31 :27:2013/11/20(水) 20:19:58.58 .net
よく考えたらファイルからの読み込みも終了判定できますね。
何とか工夫すれば、判定できないループってないかも……。
どうもお騒がせしました。

32 :名無しさん@お腹いっぱい。:2013/11/20(水) 23:30:36.92 .net
>>29
((--i)) でiが0になる時、返り値1なんだ。
iが負の値になる時でも返り値0なのに、0になる時だけ特別なんですね。

33 :名無しさん@お腹いっぱい。:2013/11/21(木) 00:11:48.01 .net
If the value of the expression is non-zero, the
return status is 0; otherwise the return status is 1.

34 :教えてくだしあ:2013/11/21(木) 23:17:15.63 .net
pingを打って 成功⇒次のping 失敗⇒EXIT
もっかい別のとこにping 成功⇒ログ出力 失敗⇒コマンド実行
こんな感じのスクリプト作りたいんだけど
pingの結果って$?に入るんだよね
これって複数あった場合どうすれば良いの?

35 :名無しさん@お腹いっぱい。:2013/11/21(木) 23:18:56.88 .net
>>34
どういうこと?

36 :名無しさん@お腹いっぱい。:2013/11/21(木) 23:21:59.47 .net
>>34
直前のコマンドの結果で毎回 $? が上書きされるだけ。

37 :34:2013/11/21(木) 23:26:22.05 .net
わかり難くてすません

1.ping打つ 成功⇒2へ 失敗⇒終了
 ↑ココの$?
2.ping打つ 成功⇒ログ書き込み 失敗⇒コマンド実行
 ↑ココの$?

で結果を分けて処理しようと考えてます。
根本的に考え方が違うなら考えを改めるよ

38 :34:2013/11/21(木) 23:28:11.31 .net
>>36 それが知りたかった エスパーありがとう

39 :名無しさん@お腹いっぱい。:2013/11/21(木) 23:29:46.92 .net
>>38
>>36 の回答は理解できないの?

hoge=$? でコピーしておいてもいいし

40 :34:2013/11/21(木) 23:47:57.56 .net
期待通り動いたわ ありがとな
ちなこれって、ここの住人はどんな感じで書くん?
ping -c 3 192.168.43.1 >/dev/null
PING1=$?
if
[ ${PING1} -eq "0" ];then
ping -c 1 192.168.254.100 >/dev/null
PING2=$?
if
[ ${PING2} -eq "0" ];then
echo Status=OK
exit
else
/etc/script/wol 192.168.254.255 10:78:D2:4B:D6:55
echo WAKE-ON-LAN
fi
else
echo NoThanks
exit

41 :名無しさん@お腹いっぱい。:2013/11/22(金) 00:01:34.93 .net
if ping -c 3 192.168.43.1 >/dev/null; then
 if ping -c 1 192.168.254.100 >/dev/null; then
  echo Status=OK
 else
  /etc/script/wol 192.168.254.255 10:78:D2:4B:D6:55
  echo WAKE-ON-LAN
 fi
else
 echo NoThanks
fi

全角空白は置換してくれ。

42 :34:2013/11/22(金) 00:08:55.90 .net
おいおい条件要らないとかマジかよ
意外とスクリプト面白いな

43 :名無しさん@お腹いっぱい。:2013/11/22(金) 00:09:42.94 .net
条件要らない?
どういうこと?

44 :名無しさん@お腹いっぱい。:2013/11/22(金) 01:55:31.53 .net
ifが変数に入れなくてもそのまま戻り値でいけるってとこじゃね?

45 :名無しさん@お腹いっぱい。:2013/11/22(金) 08:48:23.24 .net
ifに条件は要るだろ。

46 :名無しさん@お腹いっぱい。:2013/11/22(金) 09:22:12.61 .net
ping -c 3 192.168.43.1 >/dev/null && { ping -c 1 192.168.254.100 >/dev/null && echo Status=OK || { /etc/script/wol 192.168.254.255 10:78:D2:4B:D6:55; echo WAKE-ON-LAN; }; } || echo NoThanks

47 :名無しさん@お腹いっぱい。:2013/11/22(金) 22:29:53.59 .net
if使わない方法もあるのね。なかなか勉強になるぜ
>>43 [ ${PING1} -eq "0" ];これってpingの変数が0だったらって条件じゃないの?
1とか他の値だったら条件に合わないよね?
でも>>41のを見るとそんな条件なく成功=次へって感じに見えるけど
何処に条件が書いてあるん?
分かり易く教えてくだしあ

48 :名無しさん@お腹いっぱい。:2013/11/22(金) 22:46:39.23 .net
if は、条件がどうこうじゃなく、コマンドの戻り値で判断する文法。
[ ... ] の [ は、ifの文法じゃなくて [ という名前のコマンド。

49 :名無しさん@お腹いっぱい。:2013/11/23(土) 00:18:20.98 .net
testコマンドじゃなかったか? => []

50 :名無しさん@お腹いっぱい。:2013/11/23(土) 00:33:47.23 .net
test と [ は同じ物。
コピーかリンク。
] は関係ない。

51 :名無しさん@お腹いっぱい。:2013/11/23(土) 00:41:18.75 .net
test を [ という名前で起動するときは、
最後に ] という引数を要求するようになっている、という仕組み。

52 :名無しさん@お腹いっぱい。:2013/11/23(土) 01:22:07.55 .net
ping文が条件じゃん。

53 :名無しさん@お腹いっぱい。:2013/11/23(土) 19:24:30.28 .net
f=
if [ -f "$f" ]; then
echo "ファイル$fはある"
else
echo "ファイル$fはない"
fi

を実行すると、
ファイルはない

f=
if [ -f $f ]; then
echo "ファイル$fはある"
else
echo "ファイル$fはない"
fi

を実行すると、
ファイルはある

"$f" でないと「ある」になるんですが、
そんなファイルはないのに、なぜなんでしょう?

54 :名無しさん@お腹いっぱい。:2013/11/23(土) 19:33:31.33 .net
[ -f $f ] は [ -f ] と同じ意味になって、
[ コマンドがそれを真とみなすから。

55 :名無しさん@お腹いっぱい。:2013/11/23(土) 19:34:30.39 .net
[ -f "" ] && echo hoge

[ -f ] && echo hoge
ってことだな。

>>54
なぜ真とみなされるのか、という疑問では。

56 :名無しさん@お腹いっぱい。:2013/11/23(土) 19:39:50.36 .net
-f が単なる文字列として解釈されているのでは

`-n STRING'
`STRING'
True if the length of STRING is nonzero.

57 :名無しさん@お腹いっぱい。:2013/11/23(土) 19:39:51.89 .net
マニュアルには -f file の場合しかないんで、-f だけだと未定義。
ということは、真になろうが偽になろうが利用者は文句を言えない。
最初の実装上たまたま真にしたんじゃね?
で、その実装がそのまま引き継がれていると。

以上、想像。

58 :名無しさん@お腹いっぱい。:2013/11/23(土) 19:41:30.39 .net
>>56
あぁ、それが合理的だな

59 :53:2013/11/23(土) 19:57:40.35 .net
さすがこのスレは物知りが多いですね

$ test hoge
$ echo $?
0

だから

$ test -f
$ echo $?
0

も同じってことですか なるほど
しかし、わかりにくいってか間違いやすいなー

60 :名無しさん@お腹いっぱい。:2013/11/23(土) 21:04:08.90 .net
>>57
ああ、なるほど。鼻から悪魔が出てくるアレと同じ構図なのか。

61 :名無しさん@お腹いっぱい。:2013/11/23(土) 22:44:39.50 .net
>>56
おまえあたまいいな

62 :名無しさん@お腹いっぱい。:2013/11/25(月) 08:44:31.22 .net
opencobolでプログラムを書いて、bashシェルで実行させています
その時、シェルでファイルを定義する必要があるんですが、
AAAAAA=./work/AAAAAA.txt ; export AAAAAA
echo AAAAAA=$AAAAAA

を複数書く必要があるんですが、
AAAAAAを何ヵ所も書き換えるのが大変です
皆さんならどう定義しますか?

63 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:14:29.37 .net
どういうこと?

64 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:27:09.96 .net
下のTEST001プログラムを実行するときに、IN1FILE,IN2FILE,OUT1FILEを定義する必要があります。
もっとわかりやすくて、書きやすい方法ないのかと思い、相談させてもらいました。

現在下のような感じです。
IN1FILEを定義するのに何箇所もIN1FILEとコピペするのが面倒で・・・

Pname=TEST001
echo $Pname START

IN1FILE=${mastpass}IN1FILE.txt ;export IN1FILE
IN2FILE=${mastpass}IN2FILE.txt ;export IN2FILE
OUT1FILE=${mastpass}OUT1FILE.txt ;export OUT1FILE
echo "IN1FILE " $IN1FILE
echo "IN2FILE " $IN2FILE
echo "OUT1FILE " $OUT1FILE

./LINUX/bin/$Pname.bin
ReturnCD=$?
if [ $ReturnCD -eq 0 ] ; then
echo $Pname "NOMAL END (" $ReturnCD ")"
else
echo $Pname "ABNOMAL END !!!!! (" $ReturnCD ")"
exit 1
fi
echo " "

65 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:37:44.35 .net
echo が必要なら書くしかないんじゃね。
bash 前提なら
export IN1FILE=${mastpass}IN1FILE.txt で済む。

66 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:40:53.46 .net
こんな感じで、一か所変更すれば良い様にしたいんですが、
いまいちshellがわかってなくて・・・

FIL=IN1FILE ; '$FIL=${mastpass}$FIL.txt ;export $FIL ;echo $FIL = $FIL

67 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:47:59.24 .net
eval使え

68 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:51:08.10 .net
>>65 ありがとございます
参考にいろいろやってみてます。
最後の'$'$FILの所がうまく行きませんでした。

FIL=KANFIL ; export $FIL=${mastpass}$FIL.isam ; echo $FIL = '$'$FIL

69 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:53:18.96 .net
>>67
かえってややこしくなりそう。

70 :名無しさん@お腹いっぱい。:2013/11/25(月) 10:57:21.15 .net
↓で出来ました。ありがとうございます。
もっといい方法ありますか?

FIL=IN1FILE ; export $FIL=${mastpass}$FIL.txt ; eval echo $FIL = '$'$FIL

汎用機からマイグレをしようと思ってます。
JCLが出力しているような情報は出力させたいので、
echoは必要だと考えています。

71 :名無しさん@お腹いっぱい。:2013/11/25(月) 11:02:38.40 .net
あと、プログラム終わった後、環境変数を解放してあげる必要があるかと思うんですが、
その場合は、配列にして、
@配列定義
A配列を使ってexport定義
Bプログラム実行
C配列を使ってunsetで解放
って感じが良いのでしょうか

72 :名無しさん@お腹いっぱい。:2013/11/25(月) 11:03:54.23 .net
>>71
> あと、プログラム終わった後、環境変数を解放してあげる必要があるかと思うんですが、
そうなん?

73 :名無しさん@お腹いっぱい。:2013/11/25(月) 11:13:38.62 .net
>>72
汎用機ばっかりだったので、
ファイルを使いたいときは定義、使い終わったら解放ってのが一般的だと思ってたので・・・

次のプログラムでは、定義してないファイルは使えない感じの方がいいのかと思ってますが、
そんな考え方は、必要ないのでしょうか?

74 :名無しさん@お腹いっぱい。:2013/11/25(月) 11:42:36.01 .net
define_file()
{
local FIL=$1
eval "$FIL=${mastpass}$FIL.txt ;export $FIL ;echo $FIL = \$$FIL"
}

define_file IN1FILE
define_file IN2FILE
define_file OUT1FILE

環境変数はシェルスクリプトに閉じているからシェルスクリプトが終了すれば消えてなくなる
あとpassってなんだよ。pathの事か?

75 :名無しさん@お腹いっぱい。:2013/11/25(月) 11:43:45.62 .net
パスワードのことじゃね?

76 :名無しさん@お腹いっぱい。:2013/11/25(月) 11:56:32.79 .net
にゃんぱすー

77 :64:2013/11/25(月) 12:01:10.93 .net
>>74
pass=pathです

恥ずかしいから誰にも言わないで下さい

78 :64:2013/11/25(月) 12:34:00.24 .net
>>74さん
ありがとうございます。

理想的な感じです!!
define_fileを外部ファイル(外部シェル)とする事もできますか?

将来的には、ファイル名、属性、フォルダを渡したいと考えています
define_file IN1FILE mast txt

79 :名無しさん@お腹いっぱい。:2013/11/25(月) 13:46:12.01 .net
> define_fileを外部ファイル(外部シェル)とする事もできますか?
そのシェルの中でevalしないとダメ
別ファイルに記述しといて ドットコマンドで定義を読み込むことは出来る
. define_file.inc

80 :64:2013/11/25(月) 16:31:39.03 .net
出来ました。みなさんありがとうございました。


論理ファイルと物理ファイルが違う場合が出てきたので、
結局JCLに似た形式にしました。

. ${shelpath}ASCFILE.inc #ファイルアロケート

ASCFILE IN1FILE ${mastpath}IN1FILE.sf
ASCFILE IN2FILE ${tranpath}tran.sf
ASCFILE OUT1FILE ${workpath}OUT1FILE.sf

ASCFILE()
{
local DDNAME=$1 #論理ファイル
local DSNAME=$2 #物理ファイル

export $DDNAME=${DSNAME}
eval echo $DDNAME = '$'$DDNAME

81 :名無しさん@お腹いっぱい。:2013/11/26(火) 00:50:42.83 .net
なんつうか、COBOLはもともとの発想というか方法論が違うんだな…

82 :名無しさん@お腹いっぱい。:2013/12/04(水) 13:08:09.83 .net
cshは関数作れなかったり、各種制御がお粗末だったり色々問題ありなので、shでスクリプトを書こうとしています。

しかし、一部の設定でcshの文法で書かれたファイルをsourceする必要があります。
(cshスクリプトファイルで設定される$pathや環境変数などの設定情報が必要)

shスクリプト内で単純にsourceするとファイルがshで解釈されてエラーになります。

どのようにすれば、shスクリプトでcshスクリプトファイルの設定を引き継げますでしょうか。
shに書き起こすのは無しで、ファイルそのものを使えるのが理想です。

83 :名無しさん@お腹いっぱい。:2013/12/04(水) 13:21:02.17 .net
>>82
cshで読んで、子プロセスとして起動したshに環境変数として渡す。
前処理が必要ならsh→csh→shの入れ子にして動かす。

84 :名無しさん@お腹いっぱい。:2013/12/04(水) 14:05:38.91 .net
すみませんがcshがインストールされていないLinuxの前提でお願いします

85 :名無しさん@お腹いっぱい。:2013/12/04(水) 14:14:56.23 .net
既読スルー

86 :名無しさん@お腹いっぱい。:2013/12/04(水) 14:46:50.02 .net
>>84
変数代入に相当する構文をgrepで抽出して解釈。
ifブロック内での変数操作を拾う点については諦める。

それも嫌ならcshを無理矢理でもいいから突っ込んで動かせ。

87 :名無しさん@お腹いっぱい。:2013/12/04(水) 14:50:40.08 .net
csh2sh と名のつく変換スクリプトもいろいろあるようだよ。

88 :名無しさん@お腹いっぱい。:2013/12/04(水) 14:50:48.60 .net
csh2shみたいのじゃだめなんかな。

89 :名無しさん@お腹いっぱい。:2013/12/04(水) 22:10:17.84 .net
すみませんが若い女性の方のみお願いします。

90 :名無しさん@お腹いっぱい。:2013/12/11(水) 19:06:34.35 .net
dashはうんこだと思う

91 :名無しさん@お腹いっぱい。:2013/12/11(水) 19:11:03.06 .net
既読スルー

92 :名無しさん@お腹いっぱい。:2013/12/14(土) 05:11:38.01 .net
若い女性がダッシュでウンコの動画マダー?

93 :名無しさん@お腹いっぱい。:2013/12/21(土) 10:57:05.23 .net
Software Design 2014年1月号

シェル特集だぞ。

なんか、良いこと書いてる?

94 :名無しさん@お腹いっぱい。:2013/12/27(金) 13:24:08.23 .net
冬休みにシエルを始めたいのですがどのアプリを入れればいいのかいっぱいあってわかりません。オーエスはアンドロイドです。よろしく教えてください。

95 :名無しさん@お腹いっぱい。:2013/12/27(金) 13:48:23.63 .net
釣りにしか見えない

96 :名無しさん@お腹いっぱい。:2013/12/27(金) 14:02:56.75 .net
>>94
http://developer.android.com/sdk/index.html

97 :名無しさん@お腹いっぱい。:2013/12/27(金) 15:10:37.86 .net
すみませんがプレイのアプリでお願いします

98 :名無しさん@お腹いっぱい。:2013/12/27(金) 15:11:17.22 .net
>>93
付録狙いで買ってくる

99 :名無しさん@お腹いっぱい。:2013/12/27(金) 15:17:46.67 .net
https://play.google.com/store/apps/details?id=ua.in.android_wallpapers.shell

100 :名無しさん@お腹いっぱい。:2013/12/27(金) 15:38:28.36 .net
>>99
ありがとうございます。いま環境がないので姉が帰ってきたら試してみます。

101 :名無しさん@お腹いっぱい。:2013/12/27(金) 17:31:10.29 .net
urlくらいまじめに見ろよ

102 :名無しさん@お腹いっぱい。:2013/12/28(土) 13:09:48.31 .net
釣りのような気もするがマジレスすると、ConnectBotでいいと思う。
こいつはsshクライアントなんだが、デフォルトだとプロトコルsshって
表示されてるとこでプロトコルlocalを選ぶと、Androidの
一般ユーザー権限でシェルが使えるので。

103 :名無しさん@お腹いっぱい。:2013/12/28(土) 13:10:20.83 .net
釣りっていうかすべったネタ。

104 :名無しさん@お腹いっぱい。:2013/12/28(土) 13:22:08.91 .net
Androidだとふつーにシェルが使えるから、釣り/ネタにならんのよね。
iOSならネタになるかな?
iOSの公式ストアにあるアプリで、ローカルのシェルが使える奴ってある?

105 :名無しさん@お腹いっぱい。:2013/12/28(土) 13:28:06.54 .net
釣りにしか見えない

106 :名無しさん@お腹いっぱい。:2013/12/28(土) 13:50:33.34 .net
まあデフォルトだとsedもawkも入ってないので、
だいぶ厳しい。(grepは入ってる)
でもシェルはkshで行編集やファイル名補完は効くぞ。
なぜかmoreがあるなあと思ったら、これksh組み込みの奴だったのね。

107 :名無しさん@お腹いっぱい。:2014/01/11(土) 12:07:28.33 .net
標準入力(od -xが出力した文字列)の文字列を4バイトごと切り取り、
それをforループで処理させたい思っており、現在はこんな感じのスクリプト作ってます
OSはCentOS、シェルはbashです

#!/bin/sh
for STR in `4バイトごとに切り取る処理`
do
hogehoge $STR
done

この「4バイトごとに切り取る処理」ですが、現在はsplitで4バイト単位に切り取り、
分割後のファイルを順次読み込ませるということにしているのですが、
分割後のファイルが沢山作られるので遅くなり、またやりたい事の割にやってることが
複雑すぎるので、なんとか改善したいと思ってます

そういうことをしてくれる、いい方法はありますでしょうか
標準出力を、指定したバイト数単位にセパレータを挟んで出力してくれるコマンド、みたいな

cutでやってみようと思ったのですが、これだとオフセットを4バイトずつずらしながら
切り出していく処理となりそうで、これもまた複雑だなぁ、と…

108 :名無しさん@お腹いっぱい。:2014/01/11(土) 12:14:05.59 .net
$ echo 'hogefugapiyo' | while read -N 4 STR; do echo $STR; done

109 :名無しさん@お腹いっぱい。:2014/01/11(土) 12:38:48.75 .net
ふらっと通りがかったが感動した!

110 :名無しさん@お腹いっぱい。:2014/01/11(土) 13:01:14.29 .net
107です

>>108
なるほどreadでやるのですね
バイト数も任意で変更できそうで、柔軟性もありますね

ありがとうございました

111 :名無しさん@お腹いっぱい。:2014/01/11(土) 13:41:30.36 .net
>>108
つfold
じゃだめなんだっけ?
forをwhileに書き換えるのはおすすめしない。

112 :名無しさん@お腹いっぱい。:2014/01/11(土) 14:35:27.41 .net
>>108
read: Illegal option -N

113 :名無しさん@お腹いっぱい。:2014/01/11(土) 15:13:02.47 .net
dd bs=1 count=切り出しバイト数 skip=オフセットバイト数
でなんとかならんかい?

114 :名無しさん@お腹いっぱい。:2014/01/11(土) 15:16:16.51 .net
> 標準出力を、指定したバイト数単位にセパレータを挟んで出力

fold だとセパレータの指定はできないんじゃない?

 $ sep="@"; echo 'hogefugapiyo' | while read -N 4 str; do echo -en "${str}${sep}";done

とかしたいのかと思ったけど…

# 最後にセパレータがくっついちゃうけどね

115 :名無しさん@お腹いっぱい。:2014/01/11(土) 19:21:56.73 .net
read に -N オプション付けてるプログラマーorシス管見つけたら
社史編纂室に異動させるわ

116 :名無しさん@お腹いっぱい。:2014/01/11(土) 19:26:19.16 .net
>>115
なんで?
保険でつけるでしょ?

117 :名無しさん@お腹いっぱい。:2014/01/11(土) 20:27:26.03 .net
echo 1 2 3 | read k1 k2 k3 | echo $k1 $k2 $k3
1 2 3

echo 1 2 3 | read k1 k2 k3 | echo $k1 $k2 $k3 | read kk1 kk2 kk3 | echo $kk1 $kk2 $kk3

パイプって何本までできる?

118 :名無しさん@お腹いっぱい。:2014/01/11(土) 20:46:56.09 .net
>>115
sed に -r つけたり grep に -P オプション付けてたりしたら
どこへ異動させられるやらw

119 :名無しさん@お腹いっぱい。:2014/01/11(土) 20:53:12.98 .net
>>117
シェルがあえて限界を設定していないなら
1コマンドとして処理できる文字数以内で
単一プロセスが開けるパイプの限界数まで
じゃね?

120 :名無しさん@お腹いっぱい。:2014/01/13(月) 06:37:06.28 .net
>>117
これって動く?サブシェルになりそうな気がするんだけど

121 :名無しさん@お腹いっぱい。:2014/01/13(月) 07:44:33.04 .net
>>117 みたいなスクリプト書くプログラマーorシス管見つけたら
社史編纂室に異動させるわ

122 :名無しさん@お腹いっぱい。:2014/01/13(月) 11:25:05.94 .net
>>107
odじゃ無いけどhexdumpの-fフォーマット辺りで何とかならんかのー

123 :名無しさん@お腹いっぱい。:2014/01/13(月) 22:06:10.23 .net
>>120
動かなかった…

124 :名無しさん@お腹いっぱい。:2014/01/18(土) 00:30:36.30 .net
ln -s original linked
ln -s linked linked_linked

みたいにリンクのリンク状態になっている場合、
シェルスクリプト内で、最後の linked_linked から大元のファイル
(この場合は original)を探り出す簡便な方法ってありますか?

125 :名無しさん@お腹いっぱい。:2014/01/18(土) 00:36:07.02 .net
$ readlink -f linked_linked

126 :124:2014/01/18(土) 00:38:34.41 .net
>>125
ありがとうございます!
そんなコマンドがあったとは!

127 :名無しさん@お腹いっぱい。:2014/01/18(土) 14:08:09.48 .net
bash -c "test.sh 1 2 3"
とコマンド文字列を引用符で囲うところで引用符を忘れて
bash -c test.sh 1 2. 3
としてしまった場合、 1 2 3 はどこに行ってしまうのでしょうか。
気になって仕方がないので教えてくださいー

128 :名無しさん@お腹いっぱい。:2014/01/18(土) 14:10:54.08 .net
>>127
bash -c 'echo $0 $@' 1 2 3

ってやってみるとわかる

129 :名無しさん@お腹いっぱい。:2014/01/18(土) 14:38:07.29 .net
シェルから、端末のビープ音を鳴らすまたはバイブする方法を教えてください。
通常端末と違って echo -e '\a' では駄目です。Androidです。

130 :名無しさん@お腹いっぱい。:2014/01/18(土) 14:49:19.13 .net
127です。
おおお凄い引数として扱える、、、、ってでもこれはナンダ?
-c で生成したプロセスのbashに対して引数を与えられる、ってことでいいのかな?
まだよく理解できていませんが、色々と試してみようと思います。
128さん、ありがとうございました!

131 :名無しさん@お腹いっぱい。:2014/01/19(日) 02:14:50.20 .net
a.txt には CHINKO=BIG というテキストが入っています

IFS='=' read A B < a.txt
なら思ったとおりに AにCHINKO、BにBIG が入るんだけど

cat a.txt | IFS='=' read A B
だと入ってくれません

これって何が原因に考えられますか?

132 :名無しさん@お腹いっぱい。:2014/01/19(日) 02:17:08.79 .net
入ったけど。

$ IFS='=' read A B < a.txt; echo $A; echo $B
CHINKO
BIG
$ cat a.txt | IFS='=' read A B; echo $A; echo $B
CHINKO
BIG
$

133 :名無しさん@お腹いっぱい。:2014/01/19(日) 02:21:50.04 .net
わかった。
Debianだとうまくいかないんだ、shがdashだから。

>>132
ありがとうございました

134 :名無しさん@お腹いっぱい。:2014/01/19(日) 02:40:36.32 .net
dashでも入ったけど。

135 :名無しさん@お腹いっぱい。:2014/01/19(日) 03:14:26.33 .net
えー・・・

136 :名無しさん@お腹いっぱい。:2014/01/19(日) 03:42:02.64 .net
>>129
\aとかのビープを鳴らすってことならターミナルエミュレータが\aでビープなりバイブなりを再現すればいい
ので、ターミナルエミュレータの開発元に物申せばいいと思うよ。

普通に鳴らすコマンドが有るかは・・・知らん。

137 :名無しさん@お腹いっぱい。:2014/01/19(日) 08:20:07.33 .net
プログラムのファイル入出力はシェルでどう指定したらいいの?

138 :名無しさん@お腹いっぱい。:2014/01/19(日) 08:34:17.39 .net
>>136
いま、ConnectBot 上で echo Control-V Control-G したら、ちゃんと
ビープしたな。

139 :名無しさん@お腹いっぱい。:2014/01/19(日) 08:45:56.29 .net
>>137
やりたいことをもうちょい具体的に。

140 :名無しさん@お腹いっぱい。:2014/01/19(日) 09:32:15.00 .net
プログラムを作成する上で、ファイルを入力または出力するには、シェルでどのような指定を行なえばいいですか?

141 :名無しさん@お腹いっぱい。:2014/01/19(日) 09:46:37.45 .net
プログラムってのがシェルスクリプトで
文字列なら入力はcatとかで変数にいれたらいい
var=`cat hoge.txt`

出力は標準出力からリダイレクト
hoge.sh > hoge.txt

バイナリならxxdとか使って16進数に変えてから使えばいい

142 :141:2014/01/19(日) 09:51:46.11 .net
やりたいことがわからないからこれでいいかは知らないが。

143 :名無しさん@お腹いっぱい。:2014/01/19(日) 13:21:53.00 .net
>>140
何を言いたいのかよくわからんが、
もしシェルをJCLのようなイメージでとらえているのであれば、
プログラムを作成する上で、シェルは必要ないです。
プログラムの中で指定すればいい。

144 :名無しさん@お腹いっぱい。:2014/01/19(日) 14:03:22.37 .net
ファイル名いろいろあるやん。

145 :名無しさん@お腹いっぱい。:2014/01/20(月) 10:51:58.59 .net
>>134
最新のDebianだと入らない

146 :名無しさん@お腹いっぱい。:2014/01/24(金) 08:44:32.88 .net
Cシェルで変数$hogeにAAAをセットし、さらにAAAの先頭にタブ文字を挿入して<タブ文字>AAAと表示させる方法を教えて下さい。

147 :名無しさん@お腹いっぱい。:2014/01/24(金) 09:42:05.75 .net
Cシェル使こてるプログラマーorシス管見つけたら
社史編纂室に異動させるわ

148 :名無しさん@お腹いっぱい。:2014/01/24(金) 10:51:15.62 .net
もうそれ飽きた。

149 :名無しさん@お腹いっぱい。:2014/01/25(土) 00:19:11.43 .net
千行以上あるUNIXTIMEを変換するのに一番効率のいいやりかたって、ありますか?

いまのところwhileにリダイレクトで食わせてreadで1行ずつperlで変換させてます。
もとはBINDのnamed.statsで、UNIXTIMEだけ抽出したものなんですけど、
えっらい時間をとられるもので…
ちなみにHP-UXだからか、dateにstrf表示させられなかったです。

150 :名無しさん@お腹いっぱい。:2014/01/25(土) 01:29:52.23 .net
>>149
うーん、perl で直接ループ回しちゃえばいいんじゃないかな

$ perl -pe 's/\d+/localtime $&/e' < named.stats

named.stats のフォーマットが分からないから "\d+" が別の文字列に
マッチしちゃうかもしれないけど。

151 :名無しさん@お腹いっぱい。:2014/01/25(土) 08:21:46.09 .net
そこで全部perlで回すかと思わず
2ちゃんねるで聞こうとなる思考がどうかしてる

152 :名無しさん@お腹いっぱい。:2014/01/25(土) 08:33:51.18 .net
そこで全部シェルで書こうかと思わず
perl(笑)に逃げちゃう思考がどうかしてる

153 :名無しさん@お腹いっぱい。:2014/01/25(土) 11:06:49.43 .net
「自分、perlに逃げたりしないで全部シェルで書くんで待ってください」

辞令
史編纂室勤務ヲ命ズ

154 :名無しさん@お腹いっぱい。:2014/01/25(土) 11:19:26.34 .net
シェルでそんなことしたらスループットすげー低そう

155 :名無しさん@お腹いっぱい。:2014/01/25(土) 12:35:08.03 .net
>>150
ありがとうございます。
別にスクリプト書いてそっちで回すか、Excelで計算するか…しかなさそうですね。

やってることは、こんな感じです。
grep "+++ Statistics Dump +++" named.stats | awk 'BEGIN{FS="("}{print $2}' | sed 's/)//' > days.txt
(他にもグラフ化したい値を抽出してテキスト化(略))
paste -d, days.txt hoge.txt fuga.txt > data.csv

>>154
すごく…… 低いです……
ン万行あってもgrepであっさりと情報をぶっこ抜けるので、ここだけ、
days.txtのUNIXTIMEを変換する、ここだけ遅いんですよ…
perlで全部解析するスクリプト組むとか面倒で

156 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:03:03.82 .net
全部解析するスクリプトもなにも
いまの1行変換処理をループで囲うだけでしょ
while(<>){ 処理; }

157 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:07:32.99 .net
>>155
他が問題ない速度なら変換する部分だけをperlに置き換えればいいでしょ

158 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:08:25.67 .net
>>155
>grep "+++ Statistics Dump +++" named.stats | awk 'BEGIN{FS="("}{print $2}' | sed 's/)//' > days.txt

せっかく awk 使っているんだからこれで↓

awk -F'[()]' '/^\+\+\+ Statistics Dump \+\+\+/{print $2}' named.stats > days.txt

159 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:20:44.21 .net
>>155
perl でやるならこれで↓

perl -ne 'if(/^\+\+\+ Statistics Dump \+\+\+ \((\d+)\)$/){print localtime($1) . "\n";}' named.stats > days.txt

160 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:26:11.86 .net
>>158
awk には strftime() が使えるからこれで↓

awk -F'[()]' '/^\+\+\+ Statistics Dump \+\+\+/{print strftime("%Y/%m/%d %H:%M:%S",$2)}' named.stats

# もしかすると strftime() は GNU awk だけでしか使えないかも…

161 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:26:14.88 .net
ところでなんでperlなの?

162 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:29:26.28 .net
python: ワンナイナーの敵
awk: 実装が沢山あり、動作が異なる場合がある
r***: 論外

163 :名無しさん@お腹いっぱい。:2014/01/25(土) 13:44:18.27 .net
rexx ?

164 :名無しさん@お腹いっぱい。:2014/01/25(土) 14:23:44.21 .net
なんで論外なの?

165 :名無しさん@お腹いっぱい。:2014/01/25(土) 14:49:39.47 .net
>>162 が使えないから

166 :名無しさん@お腹いっぱい。:2014/01/26(日) 03:18:53.50 .net
>>157-160
そんなに早くレスを頂けるとは思っておらず、お礼が遅くなりました。
ありがとうございます。

そうか。awkやperlでgrepと同じことが出来るんですね…勉強になりました。

167 :名無しさん@お腹いっぱい。:2014/01/28(火) 22:58:27.17 .net
変数$aaaの中身を右寄せし、半角スペースを5つ付けて合計10桁の固定長にし、これを別の変数$bbbに代入した場合にちゃんと10桁にするにはどうすればよいですか?

168 :名無しさん@お腹いっぱい。:2014/01/28(火) 23:07:36.20 .net
>>149
待て待て、gnu dateなら複数行入力の一括変換とか出来るぞたしか

169 :名無しさん@お腹いっぱい。:2014/01/28(火) 23:47:55.54 .net
>>167
昔、似たようなことをやりたくて探したことがあるけど…
あきらめて${#aaa}とかで文字数をカウントして、欲しい桁数からその数値を引き、
付け足すべき半角スペースをループで作って継ぎ足しただよ。

例外処理とかめんどくさかったので、いなかもんのおらも知りてぇだ。

170 :名無しさん@お腹いっぱい。:2014/01/28(火) 23:51:39.80 .net
>>167
レスありがとう。
やはり、ループで足すしかないですかねぇ。

171 :名無しさん@お腹いっぱい。:2014/01/29(水) 00:00:56.29 .net
#!/bin/bash
aaa="hoge"
bbb="$(printf "%10s" "$aaa")"
echo "$bbb"

172 :名無しさん@お腹いっぱい。:2014/01/29(水) 00:05:22.17 .net
IFSいじっちゃえw

173 :名無しさん@お腹いっぱい。:2014/01/29(水) 00:18:47.53 .net
>>168
どうやんの?

174 :名無しさん@お腹いっぱい。:2014/01/29(水) 00:30:18.06 .net
ふつーに>>171だろ。
printf(1)とか、シェルのクオーティングの振るまいとか、
基本なので理解しとくべき。

175 :名無しさん@お腹いっぱい。:2014/01/29(水) 02:19:51.45 .net
いやいや、GNU date を使うやり方。

176 :名無しさん@お腹いっぱい。:2014/01/29(水) 23:57:44.84 .net
>>175
すまん、たまたまかなり新しいバージョンのdateだった8.15
-fでファイルを読み込める。
バージョンいくつから出来るのかは知らん

177 :名無しさん@お腹いっぱい。:2014/01/30(木) 01:01:14.41 .net
>>176
昔からあるみたいよ
http://git.savannah.gnu.org/cgit/coreutils.git/commit/src/date.c?id=3c28751b48177e42399ff763c48b54130688d7b6

178 :名無しさん@お腹いっぱい。:2014/01/30(木) 15:36:42.60 .net
「str表示すらできないHP-UXのdate」って書いてあるしGNU dateじゃないんじゃないの
FreeBSDのdate確認したらファイル読み込んで1行ごとにって機能はなさそう

179 :名無しさん@お腹いっぱい。:2014/01/30(木) 19:21:21.34 .net
入れるだけじゃん許されるならばだけど

180 :名無しさん@お腹いっぱい。:2014/01/30(木) 20:24:02.53 .net
許されないほうがなんかきもちいい。

181 :名無しさん@お腹いっぱい。:2014/01/30(木) 22:10:02.56 .net
hoge="(株)ほげほげの売上は%1です。"
の%1をsedで置換したいのですが、(でエラーとなってしまいます。
特殊記号の()を読み飛ばして置換するにはどうすればよいですか?

182 :名無しさん@お腹いっぱい。:2014/01/30(木) 22:15:21.86 .net
>>181
" " ではなく ' ' でくくるといい

183 :名無しさん@お腹いっぱい。:2014/01/31(金) 10:14:18.23 .net
>>179
入れられるのならもう入れてるだろう。

184 :名無しさん@お腹いっぱい。:2014/01/31(金) 16:11:13.16 .net
一生に一度くらいは入れてみたいものである。

185 :名無しさん@お腹いっぱい。:2014/02/03(月) 21:48:36.77 .net
シェルスクリプトにてSQLの結果をメール送信するプログラムを作ろうと思います。
以下のようにやると$resultの結果が取れないのですが、どのようにしたらよいでしょうか?

sendMail() {
from=$1
to=$2
inputEncoding="utf-8"
outputEncoding="iso-2022-jp"
subjectHead="=?${outputEncoding}?B?"
subjectBody="`echo "$3" | iconv -f $inputEncoding -t $outputEncoding | base64 | tr -d '\n'`"
subjectTail="?="
subject="$subjectHead$subjectBody$subjectTail"
contents="`echo -e $4 | iconv -f $inputEncoding -t $outputEncoding`"
echo "$contents" | mail -s "$subject" "$to" -- -f "$from"
return $?
}
PSQL=`echo -e "\
〜〜〜SQL文〜〜〜
`

from="from@example.com"
to="to@example.com"
subject="件名を入力"
contents="SQLの結果"

result = echo "$PSQL" | psql -U hogehoge
contents=”結果です"
sendMail "$from" "$to" "$subject" "$contents$result"

186 :名無しさん@お腹いっぱい。:2014/02/03(月) 23:03:00.25 .net
>>185

> result = echo "$PSQL" | psql -U hogehoge
result =$( echo "$PSQL" | psql -U hogehoge)

187 :185:2014/02/04(火) 13:38:46.35 .net
>>186
ありがとうございます
しかし、それだと改行がされないんですよね

A 152
B 585
C 209

と出したいところが

A 152B 585C 209

のようになってしまいます

188 :名無しさん@お腹いっぱい。:2014/02/04(火) 15:50:22.05 .net
>>187
こんな感じ?もっといい方法ないのかな

echo "$PSQL" | psql -U hogehoge | while read line;do
result="$result\n$line"
done

189 :名無しさん@お腹いっぱい。:2014/02/04(火) 16:03:23.99 .net
シェルでやるよりperlか何かでやる方が楽そう。

190 :名無しさん@お腹いっぱい。:2014/02/04(火) 16:49:38.80 .net
>>187
規制くらってたわ。
改行を保持したいのなら、引数でわたすのではなくsendMailの標準入力に渡したほうが楽だろ。
echo "$PSQL" | psql -U hogehoge | "$from" "$to" "$subject" "$contents"
にして、sendMailのmailコマンドを
{echo "$contents" ; cat - } | mail -s "$subject" "$to" -- -f "$from"
のようにして呼べばいい

191 :185:2014/02/04(火) 21:26:43.93 .net
ありがとうございました!

192 :名無しさん@お腹いっぱい。:2014/02/08(土) 01:47:24.71 .net
シェルでやれる範囲を超える場合はperlって人多いみたいけど、python派が少ないのは何でなの?
世の中的には最近やたらとpython流行ってるじゃないですか

193 :名無しさん@お腹いっぱい。:2014/02/08(土) 02:01:25.65 .net
シェルスクリプトって one linerで書いてテストしながら組み合わせてく
ってよくやるけど、pythonは多くの構文が改行を要求するので、ふだんと
違う改行なしの書き方使うことに
なって違和感があるとか?

まあクオートの中に改行入れられるから、そうするって手もあるんだけど、
シェルによっては編集が不便になるし。

194 :名無しさん@お腹いっぱい。:2014/02/08(土) 02:25:02.21 .net
echo $(( $RANDOM 55555 ))で55555までの乱数が出せますが、
55500から55555までと規制したい場合はどのようにすればいいのでしょうか?

195 :名無しさん@お腹いっぱい。:2014/02/08(土) 03:30:05.65 .net
echo $(( (RANDOM % 56) + 55500 ))

196 :名無しさん@お腹いっぱい。:2014/02/08(土) 03:33:17.60 .net
なるほど、そんなやり方があったんですね
参考になりました

197 :名無しさん@お腹いっぱい。:2014/02/08(土) 07:52:07.56 .net
>>192
pythonは正規表現の使い勝手が良くないのとワンライナー書くのが実質的に無理

198 :189:2014/02/08(土) 11:22:11.44 .net
perl以外でやっても別にいいよ。
だから「perlか何か」と書いている。

199 :189:2014/02/08(土) 11:28:02.40 .net
perl使う人が多いのは
歴史が古いってのと他に乗り換える理由がないってだけじゃないかね。
ワンライナーにこだわる必要はないし、
いきなりpythonスクリプトのファイル書き始めても別にいいんじゃね。
好きな言語で好きなように書けばいい。

200 :名無しさん@お腹いっぱい。:2014/02/08(土) 15:19:08.22 .net
>>196
それ自力で思いつかないとすると、相当センス悪いよ

201 :名無しさん@お腹いっぱい。:2014/02/08(土) 15:51:57.61 .net
$RANDOMってたかだか 0〜32767 の値しかとらないから、
% 56 とかで剰余とったら値が小さい方に偏るから一様乱数にならないよ。
% 64 とか、2^n で剰余とった上で、値がはみ出した場合は再試行する方がいい。

202 :名無しさん@お腹いっぱい。:2014/02/08(土) 16:04:25.61 .net
おおおおそういうことだったのか俺のバカ野郎!
横からだけど、ありがとう201さん!

203 :名無しさん@お腹いっぱい。:2014/02/08(土) 20:12:06.32 .net
>>201
俺は言ってることがわからんけどw
コードでいうとどういう事?

204 :名無しさん@お腹いっぱい。:2014/02/08(土) 20:32:31.53 .net
>>203
while (((i = RANDOM % 64) >= 56)); do :; done; echo $((i + 55500))

205 :名無しさん@お腹いっぱい。:2014/02/08(土) 20:58:46.89 .net
>>192
デフォで入ってないから

206 :名無しさん@お腹いっぱい。:2014/02/08(土) 21:21:03.42 .net
>>204
じゃぁ今思い付いたけど、ポート番号なんかのように数が大きい場合はどうするの?
49152&#8211;65535が自由に使えるけど、以下の場合は{$NUM}はどうするの?

while (((i = RANDOM % {$NUM}) >= 16384)); do :; done; echo $((i + 49152))

16384は2^nだけど、となるとi = RANDOM % 16384のままでいいの?

207 :名無しさん@お腹いっぱい。:2014/02/08(土) 21:22:59.32 .net
というか、
echo $(( (RANDOM % 16384) + 49152 ))
のままでいいと言うことになるのかな?

208 :名無しさん@お腹いっぱい。:2014/02/08(土) 21:50:12.57 .net
そういうことでしょ
2^nなら一様乱数になるんだから

209 :名無しさん@お腹いっぱい。:2014/02/08(土) 22:09:57.81 .net
シェルスクリプトで実行したコマンド結果の標準出力、標準エラーをログファイルに出力するにはどうすればよいですか?

command > log.log

とひとつづつ書かないとだめなのでしょうか。

210 :名無しさん@お腹いっぱい。:2014/02/08(土) 22:15:11.27 .net
#!/bin/bash
exec 1> log.txt
exec 2>&1

echo hoge
echo fuga >&2

ファイルにも標準出力にも出したい時は
exec 1> >(tee log.txt)

211 :名無しさん@お腹いっぱい。:2014/02/09(日) 16:46:34.97 .net
>>209
スクリプト内のコマンド実行結果すべての標準出力/標準エラー出力を
まとめて同じログに送っていいなら、スクリプトの結果をリダイレクトすればよろし。
$ script.sh > log.log 2>&1

細かく制御したいなら、>>210 がよろし。

212 :名無しさん@お腹いっぱい。:2014/02/11(火) 11:30:01.58 .net
>exec 1> log.txt
>exec 2>&1
なんで2行に分ける? basherは頭が悪いな

213 :名無しさん@お腹いっぱい。:2014/02/11(火) 18:09:26.52 .net
exec 1> log.txt; exec 2>&1
こうか?

214 :名無しさん@お腹いっぱい。:2014/02/11(火) 18:14:28.58 .net
xec >log.txt 2>&1

これかね 引数の順番を逆にすると駄目

215 :名無しさん@お腹いっぱい。:2014/02/12(水) 01:12:42.76 .net
basherとかひとくくりにされてもな。

216 :名無しさん@お腹いっぱい。:2014/02/12(水) 01:20:04.91 .net
バッシャー板前

217 :名無しさん@お腹いっぱい。:2014/02/12(水) 06:08:29.88 .net
シェラー同士仲良くしろよ

218 :名無しさん@お腹いっぱい。:2014/02/12(水) 07:25:04.97 .net
ゼットエスエッシャー

219 :名無しさん@お腹いっぱい。:2014/02/12(水) 08:43:11.54 .net
今日も元気にシェルでワンタイマーしましょう

220 :名無しさん@お腹いっぱい。:2014/02/12(水) 16:58:41.44 .net
>>215
> #!/bin/bash
こういうおバカはひとくくりでかまわない

221 :名無しさん@お腹いっぱい。:2014/02/12(水) 17:30:14.30 .net
>>220
>>210 の最終行で named pipeの文法使ってるから #!/bin/bashにする必要がある。
#!/bin/sh で起動すると(たとえ実体はbashでも) sh互換モードになって named pipeの文法がエラーになる。

222 :名無しさん@お腹いっぱい。:2014/02/12(水) 18:31:03.25 .net
>>221
bash固有機能は使うなよ
ということを言いたいのでは?

223 :名無しさん@お腹いっぱい。:2014/02/12(水) 18:46:49.62 .net
>>222
使ってもいいじゃん、と言いたいのでは。

224 :名無しさん@お腹いっぱい。:2014/02/12(水) 19:07:56.04 .net
tcsher涙目

・・・きっともう、シェルスクリプトはshやbashで書くtcshユーザも肩身が狭いんだろうな・・・

225 :名無しさん@お腹いっぱい。:2014/02/12(水) 20:22:10.38 .net
zsherも忘れないで

226 :名無しさん@お腹いっぱい。:2014/02/12(水) 20:26:12.20 .net
fisherさんかっこいい

227 :名無しさん@お腹いっぱい。:2014/02/12(水) 21:03:28.97 .net
てっきり#!/usr/bin/env bashって書けって話しかと思ってた

228 :名無しさん@お腹いっぱい。:2014/02/12(水) 21:51:15.94 .net
tcsh使う奴死ねと言われてからもう10年はたつだろ
もはやtcshユーザなんてどうしようもない偏執狂しか居ないはずだが

229 :名無しさん@お腹いっぱい。:2014/02/12(水) 22:03:29.03 .net
HP-UXとかAIXとかはcsh標準らしいが
絶対使いたくないわ

230 :名無しさん@お腹いっぱい。:2014/02/12(水) 22:10:04.50 .net
>>228
ホントスンマセン。by tcshユーザー

スクリプトは勿論Bourneシェルで書くんだけどねえ。

231 :名無しさん@お腹いっぱい。:2014/02/12(水) 22:10:16.14 .net
そもそもHP-UXとかAIXとかいまさら使いたくない。

232 :名無しさん@お腹いっぱい。:2014/02/12(水) 22:16:18.78 .net
>>230
それならいいんじゃね。
スクリプトのスレなんだから。

233 :名無しさん@お腹いっぱい。:2014/02/12(水) 22:26:25.01 .net
>>232
あんがと。

企業で稀に見かけるcshスクリプト書きって、偏執狂というより
単なる物知らずって気がするよ。
bash登場以前、newcshとかあった頃は、対話的シェルはcsh系が
主流で、よく分かってない人の中には、なんとなくスクリプトもcshで
書くって人がいた(俺はその頃からスクリプトはBourneシェルだったけど)。
で、その頃に書かれたスクリプトを秘伝のたれみたいに直し直し
使ってるのを2000年頃に見て驚いたことがある。
俺のまわりでは、そういうのもさすがに滅んだけど。

234 :名無しさん@お腹いっぱい。:2014/02/12(水) 22:39:05.82 .net
>>233
企業とか大学とかでもまだ見るよ、代々cshスクリプトをなおすところ。
基本 csh しかわからない人しかいないから sh に移行できない/しても指導できる人が居ない。

235 :224:2014/02/12(水) 23:00:07.35 .net
>>230
同じく
つってもプロンプトを移植するのが面倒でtcsh使ってるだけのニワカだけど・・・

236 :名無しさん@お腹いっぱい。:2014/02/12(水) 23:13:14.98 .net
俺も2000年ごろにcshスクリプトに遭遇したな
ログインシェルもcsh系だった気がする
今となってはcshしかわからない人なんていないでしょ
わざわざコストをかけて書き直すほどのものじゃないって

そういやFreeBSD鯖のログインシェルはtcshのままにしてるな
デフォルトから変更するほどシェルに思い入れが無いだけかも

237 :名無しさん@お腹いっぱい。:2014/02/13(木) 00:09:22.64 .net
bashのスクリプトを標準出力に吐き出すスクリプトを作ったのですが、この結果を一時ファイルに保存せずに
そのまま実行する方法があったら教えてください。
吐き出すスクリプトは具体的にはffmpegを複数行実行するものです。
bash -s とかやってみたのですが、うまくいきませんでした。

238 :名無しさん@お腹いっぱい。:2014/02/13(木) 03:59:27.39 .net
>>237
echo ls | bash -s
とかで動くけど? (この場合は -s は省略可)

239 :名無しさん@お腹いっぱい。:2014/02/13(木) 07:46:40.27 .net
>>221
>>>210 の最終行で named pipeの文法使ってるから #!/bin/bashにする必要がある。
「named pipeの文法」ってなんだよ
これだからbasherは… w

240 :名無しさん@お腹いっぱい。:2014/02/13(木) 08:29:17.43 .net
>>237
/dev/nullにリダイレクトしては駄目なの?

241 :名無しさん@お腹いっぱい。:2014/02/13(木) 11:03:48.37 .net
>>237
eval `echo ls`

242 :237:2014/02/13(木) 12:55:37.44 .net
>>238
そのやり方ですと、1行目で実行したffmpegが2行目以降を
キー入力として受け取ってしまうようなんです。。。
一度リダイレクトでファイルに出して、
bash tmp.sh
みたいにすれば問題なく逐次実行されます。
よく分かってないのですが、標準入力とttyの関係とかでしょうか

243 :名無しさん@お腹いっぱい。:2014/02/13(木) 13:17:07.98 .net
>>242
ffmpeg </dev/tty
みたいにして、キー入力を端末に強制する方法と、
bash <(スクリプト)
みたいにして標準入力を使わずに済ます手がある。

だが、最初にキー入力の問題だと、ちゃんと書くように!w

244 :237:2014/02/13(木) 14:38:09.52 .net
>>243
どちらの方法も完全にうまくいきました、ありがとうございました!
後者のやり方がなぜうまくいくのかまだピンときていませんが、
いろいろ調べてみようと思います。
あと最初からキチンと書かなくてすみませんでした

245 :名無しさん@お腹いっぱい。:2014/02/13(木) 16:42:41.00 .net
>>244
プロセス置換でググってみな

246 :237:2014/02/13(木) 17:03:46.98 .net
>>245
なるほど、こういう機能ってzshにある感じはしていたのですが、
bashにもあるんですね!
bashの ( ) はサブシェルだと思っていました…

247 :名無しさん@お腹いっぱい。:2014/02/13(木) 22:47:07.79 .net
確かにzshにしかない機能と思ってたのがbashにあって驚くことあるな
少しずつ入れてんのかね

248 :名無しさん@お腹いっぱい。:2014/02/13(木) 22:49:59.70 .net
入ってるね。
個人的には {1..30}が入ったのは地味に大きい。
それでもzsh使ってるけど。

249 :名無しさん@お腹いっぱい。:2014/02/13(木) 23:12:09.87 .net
ヒストリの共有(share_history)が bash にも欲しい

250 :名無しさん@お腹いっぱい。:2014/02/13(木) 23:16:17.55 .net
日々使うインタラクティブシェルとしてはzshが良いけど
バッチ処理させるスクリプトとしてならbashの方が使いやすい
というかzshは機能多すぎドキュメント多すぎで訳ワカメ

251 :名無しさん@お腹いっぱい。:2014/02/13(木) 23:39:34.45 .net
スクリプトでもzshにしてる
どの機能がbashがサポートしてるか調べるのめんどい

252 :名無しさん@お腹いっぱい。:2014/02/14(金) 00:11:56.32 .net
zshは.zshrc等をてんこ盛りにしてると、zshスクリプトが読み込みに超長時間かかる
かといって #!/bin/zsh -f にするとめちゃ使いづらいし・・・痛し痒し

253 :名無しさん@お腹いっぱい。:2014/02/14(金) 03:53:13.33 .net
zshはバグ多い。

#!/bin/zsh
echo hoge >file1 >file2 >/dev/stdout

↑これだけで固まるw

254 :名無しさん@お腹いっぱい。:2014/02/14(金) 07:49:53.20 .net
zshでスクリプト書くぐらいならperlでいいじゃんと思う

255 :名無しさん@お腹いっぱい。:2014/02/14(金) 07:55:46.01 .net
>>249
PROMPT_COMMANDを仕込むことで実現してる人はいるよ。
http://iandeth.dyndns.org/mt/ian/archives/000651.html
でも標準機能としてほしいのは同意。

256 :名無しさん@お腹いっぱい。:2014/02/14(金) 10:23:51.87 .net
>>138
ConnectBot、メモリ食い杉だ。他のシェル端末の方がいい。

257 :名無しさん@お腹いっぱい。:2014/02/14(金) 12:03:01.25 .net
>>253
それバグじゃなくね。

258 :名無しさん@お腹いっぱい。:2014/02/14(金) 14:58:36.75 .net
どうみてもバグだった

259 :名無しさん@お腹いっぱい。:2014/02/14(金) 15:23:01.77 .net
>>256
オススメってある?

260 :名無しさん@お腹いっぱい。:2014/02/14(金) 23:52:33.86 .net
>>253
何これ誰か解説して

261 :名無しさん@お腹いっぱい。:2014/02/15(土) 00:24:21.36 .net
社史編纂室くんの出番や

262 :名無しさん@お腹いっぱい。:2014/02/17(月) 00:17:17.98 .net
編纂の「纂」の字書ける人どんくらいいるだろう

263 :名無しさん@お腹いっぱい。:2014/02/17(月) 16:13:15.32 .net
chassisのスペルと発音ちゃんと覚えてる人どんくらいいるだろう

264 :名無しさん@お腹いっぱい。:2014/02/17(月) 20:52:24.81 .net
chassis hen sun shits

265 :名無しさん@お腹いっぱい。:2014/02/19(水) 16:43:38.09 .net
初めてbashでスクリプト組んでるんですが、
. ./hoge.sh fuga.txt
みたいに引数渡して起動してるシェルを、引数変えて再起動するにはどうすればいいですか?
シェル内で
. ./hoge.sh $fuga
みたいに変数いれたらダメで、
. ./hoge.sh fuga2.txt
みたいに指定したら行けます。

266 :名無しさん@お腹いっぱい。:2014/02/19(水) 17:15:31.06 .net
なんでsourceするの? ちょっと間違うと無限sourceループになるよ。

267 :名無しさん@お腹いっぱい。:2014/02/19(水) 17:18:00.48 .net
>>265
その $fuga というのがスクリプト起動時にはまだ値がないんだろ? それなら駄目。
hoge.sh の中で fugaに値が代入されるとしても、それを起動時に指定することはできない。

268 :名無しさん@お腹いっぱい。:2014/02/19(水) 17:29:23.50 .net
>>266
同じ構成の画面を、設定ファイルを指定して使い回すためです

>>267
ありがとうございます。
テキストにでも書き出して、そこから読み直してみます。

269 :名無しさん@お腹いっぱい。:2014/02/19(水) 17:49:40.79 .net
>>267
だから、なぜ普通に起動せずにsourceで実行するのかを聞いてるんだが。

270 :名無しさん@お腹いっぱい。:2014/02/19(水) 18:00:57.53 .net
>>268
init.dとかのスクリプト見て真似てみたら。
関数にして呼び出す。

271 :名無しさん@お腹いっぱい。:2014/02/19(水) 22:59:42.02 .net
普通に出来るけど

$ cat hoge.sh
echo "hoge.sh is called with $1"
if [ "$1" = "fuga.txt" ] ; then
fuga="fuga2.txt"
. ./hoge.sh $fuga
fi

$ . ./hoge.sh fuga.txt
hoge.sh is called with fuga.txt
hoge.sh is called with fuga2.txt

272 :265:2014/02/20(木) 09:12:57.78 .net
みなさんありがとうございます。

どうやら変数の入れ方の様です。

fuga.txtに
trans_2=fuga2.txt
があって、

read input_key #ここで2を入力
eval input_trans='$trans_'input_key
echo $input_trans

これで
fuga2.txt
と出力されるのですが、
. ./hoge.sh $input_trans
とすると、引数を読まない感じです。
直前に
$input_trans=”fuga2.txt”
といれると動きます。

端末から直接書き込めないので、スマホで打ってるので、
読みにくくて申し訳ないです。

273 :名無しさん@お腹いっぱい。:2014/02/20(木) 11:48:12.75 .net
なんでman見ないんだ?
. にはオプショナル引数は渡せない。無視される。

>>271
basherは「普通に」と言うな

274 :265:2014/02/20(木) 13:03:57.32 .net
>>273
なるほど。ありがとうございます。

manはききませんでした。
cygwinなので、インストールをスキップされてるのかもしれないです。

275 :名無しさん@お腹いっぱい。:2014/02/20(木) 14:55:50.29 .net
>fuga.txtに
>trans_2=fuga2.txt
>があって、

もしかしてfuga.txtもsourceする?
そこに原因がある気がする

276 :名無しさん@お腹いっぱい。:2014/02/20(木) 19:07:54.76 .net
>>273
でも、今は「普通=bash」だから仕方ないですよね・・・

277 :名無しさん@お腹いっぱい。:2014/02/20(木) 19:23:08.95 .net
ログインシェルとシェルスクリプトシェルを混同すんな
ログインシェルならtcshユーザだってそこそこ居るんだぞ

278 :名無しさん@お腹いっぱい。:2014/02/20(木) 19:40:30.63 .net
さすがに今はいないよ

279 :名無しさん@お腹いっぱい。:2014/02/20(木) 20:02:25.81 .net
そもそもtcshがまだ存在するということに驚くというか
動いているところを見たことはない

280 :名無しさん@お腹いっぱい。:2014/02/20(木) 20:04:39.54 .net
冬だからな

281 :名無しさん@お腹いっぱい。:2014/02/20(木) 20:54:06.58 .net
>>278
俺 csh なんだけど…。
実体は tcsh の csh モード。

282 :名無しさん@お腹いっぱい。:2014/02/20(木) 20:56:14.43 .net
そもそもみんなログインシェルは
何をきっかけに乗り換えるものなんだ?

俺にはまだきっかけが来ない。

283 :名無しさん@お腹いっぱい。:2014/02/20(木) 21:23:05.80 .net
>>282
俺は最初に与えられたのが tcsh で、暫くそれ使ってたが、人の書いたシェルスクリプトを修正したり
しているうちに sh の文法の方が詳しい状態になったから bash に移行したわ。
部屋の模様替えみたいな気分でやってみればいいんじゃね?

284 :名無しさん@お腹いっぱい。:2014/02/20(木) 21:34:22.21 .net
ふと思いたってbashからzshに乗り換えた。今ではもう戻れない

285 :名無しさん@お腹いっぱい。:2014/02/20(木) 21:41:08.58 .net
csh->tcsh->bash->zsh->csh
堂々巡りでもうどうでも良く

286 :名無しさん@お腹いっぱい。:2014/02/20(木) 21:44:27.47 .net
なんか俺は多分 csh の全機能の 10 分の 1 くらい
しか使ってないだろうから、csh は機能が足りないと
か不便だとか言えなくてなあ。

287 :名無しさん@お腹いっぱい。:2014/02/20(木) 22:02:13.11 .net
.cshrcが50kBもあるw

288 :名無しさん@お腹いっぱい。:2014/02/21(金) 00:01:47.64 .net
>>278
な?そこそこ居るだろ?

289 :名無しさん@お腹いっぱい。:2014/02/21(金) 00:31:42.46 .net
このスレ、この板にいてなおcsh使いがいるとか・・・tcshならともかく
自分で使う分には勝手だけど、くれぐれも後輩に広めんなよ

290 :名無しさん@お腹いっぱい。:2014/02/21(金) 00:34:46.45 .net
ログインシェルとしての欠点を教えてくれ
欠点って.cshrcがcshスクリプトだから.cshrcのカスタムに拘ると死ぬくらいじゃねーの?

291 :名無しさん@お腹いっぱい。:2014/02/21(金) 00:37:33.91 .net
実行結果の違いでも出して論じてくれるなら見てて楽しい
でも、そうでないなら・・

292 :名無しさん@お腹いっぱい。:2014/02/21(金) 00:39:27.04 .net
cshって補完機能をカスタムできるんですか?

293 :名無しさん@お腹いっぱい。:2014/02/21(金) 00:42:49.85 .net
うーん?cshもけっこういろいろあって、オリジナルのcshはかなり低機能だったけど、
最後にみたcshは補間機能とかけっこう充実してた記憶が

294 :名無しさん@お腹いっぱい。:2014/02/21(金) 01:03:08.94 .net
>>293
すいません、csh系のシェルについて聞いたつもりでした。
tcshとかだとできるんですかね?

295 :名無しさん@お腹いっぱい。:2014/02/21(金) 04:20:50.14 .net
ログインシェル云々の話が出てるけど、ログインシェルを普段使うシェルとは
別ものにしてる人っていんの?ログイン後にわざわざ切り替えてんの?ありえねー
俺なんか$HOME下にビルドした最新のzshを躊躇なくログインシェルにしてるわ

296 :名無しさん@お腹いっぱい。:2014/02/21(金) 08:14:31.18 .net
>>290
stderrだけをリダイレクト出来ない

297 :名無しさん@お腹いっぱい。:2014/02/21(金) 08:25:11.31 .net
foreachを1行で書けない

298 :名無しさん@お腹いっぱい。:2014/02/21(金) 16:10:18.18 .net
>>295
zshのログインシェルでviをたちあげcshスクリプトを書く、とかそういうことじゃないの

299 :名無しさん@お腹いっぱい。:2014/02/21(金) 16:59:25.85 .net
chshでシェル変えちゃうとそのシェルがないときにログイン不能になるから
.bashrcに/usr/bin/zshって書くべし
みたいなことをFreeBSDのマニュアルかなんかに書いてた気がする

300 :名無しさん@お腹いっぱい。:2014/02/21(金) 17:07:53.80 .net
俺は/etc/shellsにzshがないから仕方なくcshrcにexec zshしてる鯖があるな

301 :名無しさん@お腹いっぱい。:2014/02/21(金) 17:16:01.62 .net
>>295
俺は毎日他社の違うサーバにrootアカウントで入る日々だから
ログインしたら1発目のコマンドが
# /bin/csh ; exit
だ。
元のログインシェルが何か調べもしない。
OSの素性を調べるのもそれから。
そのあと好みの環境変数等を全部手打ちして
それからOSの素性を調べてから作業に入る。

302 :名無しさん@お腹いっぱい。:2014/02/21(金) 17:29:18.58 .net
今どきLinux系なら/bin/cshがないことも多いと思うけど
あと/bin から /usr/bin に移行しつつあるし

303 :名無しさん@お腹いっぱい。:2014/02/21(金) 17:37:06.32 .net
>>301
# exec /bin/csh でいーんじゃないの

304 :名無しさん@お腹いっぱい。:2014/02/21(金) 17:45:24.20 .net
>>299
今どきそんなケースほぼないだろ。

305 :名無しさん@お腹いっぱい。:2014/02/21(金) 17:58:45.34 .net
chshが存在と/etc/shellsの確認するだろ

306 :名無しさん@お腹いっぱい。:2014/02/21(金) 18:11:52.15 .net
NIS使ってるときとかの話じゃね。
あるマシンでchshした後別のマシンに入ったらうんぬんとか。

307 :名無しさん@お腹いっぱい。:2014/02/21(金) 19:30:24.72 .net
>>301
cshがデフォルトでインストールされてる環境ってどこのやつ?
ちょっと気になったので雑学として聞いておきたいです

308 :名無しさん@お腹いっぱい。:2014/02/21(金) 20:22:59.07 .net
手元のマシンだと /bin/csh は
CentOS, FreeBSD -> ある
Debian, Ubuntu, Arch, Gentoo -> ない
だな Debian は minimal から構築したもので Ubuntuはサーバ版
CentOSはVPNとして借りてるものだから俺がセットアップしたのではないが

309 :名無しさん@お腹いっぱい。:2014/02/21(金) 20:36:14.42 .net
とてつもなく古い製品で無ければ、
(正統な意味での)UNIXのライセンスを受けてるUNIX系のOSならば、
ほぼcsh入ってるんじゃないかな

310 :301:2014/02/21(金) 20:49:22.89 .net
>>307
RHELとSolarisがほとんどで
他はだいたいCentOSかFreeBSDかUbuntu。
/bin/cshが無いOSがあるって
まだ気づいてなかった。

311 :名無しさん@お腹いっぱい。:2014/02/21(金) 21:38:14.73 .net
まあ会社のサーバなら管理者が
そーゆー人のためにcsh入れておいてくれるだろうね

312 :名無しさん@お腹いっぱい。:2014/02/21(金) 21:42:31.39 .net
>>304
現在稼働しているあらゆるUnix系OSではzshがデフォルトでインストールされてるの?

313 :名無しさん@お腹いっぱい。:2014/02/21(金) 22:09:32.28 .net
>>308
デフォルトでインストールされてるかの答えになってなくね。

314 :名無しさん@お腹いっぱい。:2014/02/21(金) 23:13:18.36 .net
>>313
zshのことなら、ない環境一杯あるでしょ。
RHELあたりでも、ミニマムだと入らないはず。
いわんや商用UNIXをや。

315 :名無しさん@お腹いっぱい。:2014/02/21(金) 23:17:19.51 .net
>>302
ん?/binがないってこと?
シェル系が/usr/binに移ったってこと?

316 :名無しさん@お腹いっぱい。:2014/02/21(金) 23:58:38.37 .net
>>314
商用UNIXだと入ってないことがスパコンで何度もあったよ
去年某大学の共用スパコンでも入っていなかった

317 :名無しさん@お腹いっぱい。:2014/02/22(土) 00:12:01.18 .net
>>316
スパコンとかこの手の環境だとよくあるね
下手するとcsh推奨とか言い出す
死ね

318 :316:2014/02/22(土) 00:16:16.51 .net
>>317
csh推奨というかtcshなしbashなしで
sh,csh,kshしか入ってなかった前の職場orz

319 :名無しさん@お腹いっぱい。:2014/02/22(土) 00:28:48.57 .net
そりゃ、商用UNIXの製品にオープンソース系のコードをほいほい取り込めないからなあ。
sh、csh、kshあたりは商用UNIXのコードに標準で取り込まれてるんだよ。

320 :316:2014/02/22(土) 00:40:44.56 .net
>>319
それは分かってるんだけど
/usr/localや/optなんかにソフトが大量に入ってるのに
シェルだけはインストールしてくれないんだよ
頼んでもその三つを使えってことで

321 :名無しさん@お腹いっぱい。:2014/02/22(土) 01:10:22.94 .net
コンパイラあるんだったら自分でビルドするのはどうなんだろう
あーでも癖のある商用UNIXじゃbashやzshのビルドは難しいのかな

322 :名無しさん@お腹いっぱい。:2014/02/22(土) 01:30:17.61 .net
>>321
bashやzshだけのビルドはうまくいかなかったおぼえがある
ビルドの失敗だけじゃなくで実行時にfatal errorとか
GNU iconvみたいな依存するライブラリも含めてビルドすれば問題なかったけど

323 :名無しさん@お腹いっぱい。:2014/02/22(土) 04:40:21.34 .net
コンパイラ自体がそれらのコードを受け付けない場合も辛いが、
自分でビルドってのはその辺の面倒まで見ることを言うんじゃね?

324 :名無しさん@お腹いっぱい。:2014/02/22(土) 09:11:42.61 .net
>>314
zshの話じゃなくcshの話だよ。

325 :名無しさん@お腹いっぱい。:2014/02/22(土) 09:13:40.98 .net
>>315
Solaris とかは /bin は /usr/bin へのシンボリックリンクだね。

326 :名無しさん@お腹いっぱい。:2014/02/22(土) 09:17:42.37 .net
イマドキは /system/bin/sh だったり、、

327 :名無しさん@お腹いっぱい。:2014/02/22(土) 11:01:57.40 .net
>>324
「Debian,Ubuntu,Gentoo,Archはない」って書いてあるのでは?

328 :名無しさん@お腹いっぱい。:2014/02/22(土) 12:06:00.19 .net
>>325
>>326
個人的に、そういう構成、マジで誰得なんだ?って思う

329 :名無しさん@お腹いっぱい。:2014/02/22(土) 13:21:23.93 .net
>>325
Archも/binと/sbinが/usr/binになってるな

330 :名無しさん@お腹いっぱい。:2014/02/22(土) 13:24:08.27 .net
/binが/usr/binのシンボリックリンクになってるのは過去の互換性というか
#!/bin/bash って書いちゃってるスクリプトへの対処療法的な措置だろ

331 :名無しさん@お腹いっぱい。:2014/02/22(土) 15:09:58.51 .net
>>330
そんなおまぬけの救済なんてしなくていいのに

332 :名無しさん@お腹いっぱい。:2014/02/22(土) 16:57:37.93 .net
しかし
#! /usr/bin/env bash
だとPATHに自分でコンパイルしたbashとかあった時にそっちが実行されちゃう罠

333 :名無しさん@お腹いっぱい。:2014/02/22(土) 18:12:16.67 .net
$ type env
env is /usr/local/bin/env

334 :名無しさん@お腹いっぱい。:2014/02/22(土) 19:08:02.27 .net
bashも/usr/local/binへインストールされているのがおにあい。

335 :名無しさん@お腹いっぱい。:2014/02/22(土) 19:15:41.79 .net
FreeBSDでは実際/usr/local/bin/bashに入るしね

336 :名無しさん@お腹いっぱい。:2014/02/22(土) 19:48:12.61 .net
#! /usr/bin/env PATH=/bin:/usr/bin:/usr/local/bin bash

337 :名無しさん@お腹いっぱい。:2014/02/22(土) 21:11:31.17 .net
>>328
嫌なら rm /bin しとけばいいんじゃね。

338 :名無しさん@お腹いっぱい。:2014/02/22(土) 22:35:54.11 .net
rmは怖いからunlink使うことにしてる

339 :名無しさん@お腹いっぱい。:2014/02/22(土) 23:22:31.91 .net
ミッションクリティカルな分野とかスパコンとかでも、徐々にLinuxが浸透しつつあるし
商用Unixが駆逐される日も遠くないだろうな
そのときは晴れてシェルがbashとzshに統一されるわけだ

340 :名無しさん@お腹いっぱい。:2014/02/23(日) 01:06:17.56 .net
>>314>>327
>>308はデフォルト環境じゃない状態でのサーバだから参考程度

>>324
>>301>>307はcshの話だけど>>299>>304-306>>312はzshの話
301の場合入ってなくても弾かれるだけだが、299,304-306の場合ログイン不能になるからまじでヤバイ

341 :名無しさん@お腹いっぱい。:2014/02/23(日) 22:40:39.22 .net
bashはGPLだしそのあたりがまずいこともあるはず何だよな。
ところで、/usr/binって、/binへ移行していく風潮なかったけ?

その話を見たとき、数年後にはまた、パス関係ではまるのかーと少し意識した記憶がある。

342 :名無しさん@お腹いっぱい。:2014/02/23(日) 22:44:06.71 .net
少なくともFedoraとArchは逆だな
最近/binがなくなって/usr/binになった
一応シンボリックリンクとして残っているけど

343 :名無しさん@お腹いっぱい。:2014/02/23(日) 23:06:55.05 .net
>>341
基本は /usr/ 以下に移そう、ほんとに必要なのだけ / 直下に置こう、
っていう方向じゃないの。

344 :名無しさん@お腹いっぱい。:2014/02/24(月) 02:25:20.47 .net
rootが何かしないと変更されないものはusrだっけ。usrをnfsでmountする時はどうするんだろ。

345 :名無しさん@お腹いっぱい。:2014/02/24(月) 08:35:23.83 .net
その辺はFHSでも読んでくれ。

346 :名無しさん@お腹いっぱい。:2014/02/24(月) 08:39:49.50 .net
FHSだとNFSまでの最低限は/binに入れるだったのでは。

347 :名無しさん@お腹いっぱい。:2014/02/24(月) 09:06:15.40 .net
>>346
それは /sbin

348 :名無しさん@お腹いっぱい。:2014/02/24(月) 11:07:05.89 .net
/sbin/sh がないので /sbin だけじゃ NFS マウントできないのでは?
solaris は /sbin/sh があるので可能だけど。

349 :名無しさん@お腹いっぱい。:2014/02/24(月) 11:10:08.04 .net
>>348
> /sbin/sh がないので
それどのOSの話?

350 :名無しさん@お腹いっぱい。:2014/02/24(月) 11:20:46.09 .net
>>349
たいていの OS。
起動時に NFS マウントするためのスクリプトが #!/bin/sh で書かれているので
/bin は少なくともローカルになければならない。
solaris はそうなっていないので、/sbin だけローカルにあれば /bin も NFS に置ける。
というか、/bin -> /usr/bin の symlink だけど。

351 :名無しさん@お腹いっぱい。:2014/02/24(月) 11:25:45.58 .net
>>350
> 起動時に NFS マウントするためのスクリプトが #!/bin/sh で書かれているので
それ思い込みじゃね?

352 :名無しさん@お腹いっぱい。:2014/02/24(月) 11:41:04.26 .net
手元のUbuntu見ると、確かに/sbin/shは無いな
何故無いんだろう。まずいことでもあるんかな

353 :名無しさん@お腹いっぱい。:2014/02/24(月) 17:17:57.92 .net
/etc/fstabに書かれたNFSなどは初回は無視されて、それマウントするのがinit.dのnetfsとかのシェルスクリプトだっけか
確かUbuntuでnetfs自体行方不明だったから仕方なくrc.localだかにmount -aを書いた覚えがあるけど、
最近はその手の初期化周りを制御するinitdを置き換えるlaunchdとかも出てきてるし今はどうなってるんだろうな?

354 :名無しさん@お腹いっぱい。:2014/02/24(月) 17:22:15.07 .net
もういいかげんスレ違いじゃね。

355 :名無しさん@お腹いっぱい。:2014/02/24(月) 22:05:45.65 .net
/sbin/shは昔はもっと意味があったのだよ
今は/usr何かを別のファイルシステムでマウントするとかほとんどないからな、さして重要な意味がないのでlinux何かでは一緒くた。
solarisでも今は形骸化してる。
/binだけローカルにあったって、実行できないんだぜ?

356 :名無しさん@お腹いっぱい。:2014/02/25(火) 01:07:06.24 .net
>>343
ありゃ、逆でしたか失礼。
シェルの先頭で変数に入れちゃうから、かわってもそこを変えるだけですむようにはなっているのですがね。
バージョン違いでパスがかわるとめんどうだなぁ。

357 :名無しさん@お腹いっぱい。:2014/02/25(火) 01:17:07.19 .net
シェルで@はOKですが、AがNGです。 シェルの中でfindコマンドは*(アスタリ スク)は使用できないのでしょうか? echoで表示は出来ているのですが。。。

# @ これはOK
find /log/*/*/*.log -type f

# A これがNG
set target="/log/*/*/*.log"
echo ${target}
find "${target}" -type f

358 :名無しさん@お腹いっぱい。:2014/02/25(火) 01:23:50.19 .net
引用符外してみたらどうでしょ

359 :名無しさん@お腹いっぱい。:2014/02/25(火) 01:30:20.87 .net
target='./log/*/*/*.log'
echo "$target"
find ${target} -type f

setって何だよ

360 :名無しさん@お腹いっぱい。:2014/02/25(火) 01:42:43.84 .net
cmd.exeっていうシェルの環境変数設定コマンド

361 :名無しさん@お腹いっぱい。:2014/02/25(火) 01:44:55.10 .net
これが社史編纂室系か

362 :名無しさん@お腹いっぱい。:2014/02/25(火) 02:02:27.91 .net
社史を編纂しながらシェルスクリプトを作っていく、か

どうすればそんなうらやましい立場になれるんだ

363 :名無しさん@お腹いっぱい。:2014/02/25(火) 02:03:13.53 .net
>>355
うちのDebianの/binで調べたら、/usrにリンクしてるのは、ping6だけだった。普通、/libに入れるんじゃないか。

364 :名無しさん@お腹いっぱい。:2014/02/25(火) 06:49:13.36 .net
オレあと3年で定年だから社史編纂室みたいなところで平穏無事に時間だけ早く3年経って欲しいわ

365 :名無しさん@お腹いっぱい。:2014/02/25(火) 08:03:02.89 .net
>>364
老い先短いんだから平穏無事はともかく時間を急いては勿体無いですよ、先輩。

366 :名無しさん@お腹いっぱい。:2014/02/25(火) 17:27:12.85 .net
bashで、メールが来た時 You have mailって出ますよね。
これを、特定の相手からのメールのみ表示するとか、相手によって表示メッセージ変えることとかできますか?

367 :名無しさん@お腹いっぱい。:2014/02/25(火) 17:33:51.26 .net
できません。

368 :名無しさん@お腹いっぱい。:2014/02/25(火) 22:15:55.65 .net
bashじゃなくてもいいんですが、メールが来た時 You have mailって出るのを、
ウェブメールにも対応させることってできますか?

369 :名無しさん@お腹いっぱい。:2014/02/25(火) 22:21:28.60 .net
できません。

370 :名無しさん@お腹いっぱい。:2014/02/25(火) 22:49:28.41 .net
bashかzshで、ウェブサイトにhttpsでアクセスして、
認証させて、ページ内容のHTMLを取得して、
解析したり加工したりして前回との差分を取る関数を作って、
その結果でプロンプトを変えることはできますか?

371 :名無しさん@お腹いっぱい。:2014/02/25(火) 22:55:36.70 .net
できる

372 :名無しさん@お腹いっぱい。:2014/02/26(水) 08:11:52.00 .net
優しいやつめ

373 :名無しさん@お腹いっぱい。:2014/02/26(水) 12:17:53.68 .net
できるとは思うけど、ネットの都合によっては、
プロンプト出すたびに10秒とか1分とかかかりそう。
バックグラウンドで数分おきに監視して、
ファイルに蓄積していくとかすればいいのかな。

374 :名無しさん@お腹いっぱい。:2014/02/28(金) 11:38:51.59 .net
bash で書いたスクリプトって、そのままでzshでも動きますか?

375 :名無しさん@お腹いっぱい。:2014/02/28(金) 11:55:22.31 .net
とりあえずword splitでハマる

376 :名無しさん@お腹いっぱい。:2014/02/28(金) 12:09:17.24 .net
posix準拠のみの機能しか使ってなければ大丈夫

377 :名無しさん@お腹いっぱい。:2014/02/28(金) 12:25:19.32 .net
posix準拠のみの機能しか使ってなくてもword splitでハマる

378 :名無しさん@お腹いっぱい。:2014/02/28(金) 14:48:39.14 .net
zshってcsh並に絶滅寸前だよね・・・

379 :名無しさん@お腹いっぱい。:2014/02/28(金) 14:49:38.13 .net
いっしょにすんなw

380 :名無しさん@お腹いっぱい。:2014/02/28(金) 15:51:59.28 .net
ビル・ジョイに失礼だ。

381 :名無しさん@お腹いっぱい。:2014/02/28(金) 18:30:50.64 .net
すみませんでした
cshはまだまだ減益ですね

382 :名無しさん@お腹いっぱい。:2014/02/28(金) 18:36:01.06 .net
いいえcshが原液だったことはありません

383 :名無しさん@お腹いっぱい。:2014/02/28(金) 19:54:21.74 .net
1
ターミナルから青空文庫など文章サイトの特定のhtmlにアクセスして、タグを除いた文章のみを抽出し、それをテキストファイルにして保存。
(出来ればそれをTeX文書にして、事前に決めた設定でPDF出力)

2
ターミナルから音楽視聴サイトなどのhtmlにアクセスして視聴できる曲のタイトルを抽出したのちプロンプトに表示。
その後入力を促し、入力に応じてプレイヤーで特定の曲を聴く、もしくはなにもしない。
(そのサイトではタイトルからmp3のurlが推測可能で、タイトルさえ取れればいい)

ということをやるために勉強をしたいのですが、
こういうことをやる為にはシェルスクリプトを勉強すれば大丈夫ですか?
それともCとかPythonとかPerlとかを勉強した方がいいですか?

384 :名無しさん@お腹いっぱい。:2014/02/28(金) 19:58:10.34 .net
ちょっと質問いいですか
if文でこんなふうに x とかの文字を挟むスクリプトをよく見かけるんですが
if [ "x$hoge" == "xYes" ]
なんでこうするんですかね?普通に
if [ "$hoge" == "Yes" ]
じゃまずい場合があるとか?

385 :名無しさん@お腹いっぱい。:2014/02/28(金) 20:05:26.65 .net
>>383
htmlのパーサはbashじゃちと辛いからPerlとかPythonとかが一番向いてると思う
その用途ならCは要らんな

386 :名無しさん@お腹いっぱい。:2014/02/28(金) 20:45:34.67 .net
>>385
ありがとうございます。
いずれにしろ使える知識なので少しは勉強するつもりですが
上の目的の為にはPerlかPythonを使います。

387 :名無しさん@お腹いっぱい。:2014/02/28(金) 21:01:20.16 .net
>>384
$hoge に空白が入ってきた場合や何も入っていない場合に

if [ "$hoge" == "Yes" ]
だと
if [ == Yes ]
こうなり、

if [ "x$hoge" == "xYes" ]
だと
if [ x == xYes ]
こうなる。

なので、

388 :名無しさん@お腹いっぱい。:2014/02/28(金) 21:13:35.45 .net
ワロタw

389 :名無しさん@お腹いっぱい。:2014/02/28(金) 21:34:57.30 .net
>>387
変数をダブルクォートで囲ってあれば、xとか前につけなくても平気じゃないの?
昔、つけないとヤバイ場合があった記憶があるんだけど思い出せない

390 :名無しさん@お腹いっぱい。:2014/02/28(金) 22:03:37.81 .net
俺は "-x" のようにハイフンで始まるとオプションとして扱われるからだったような気がするけど
手元で試したら普通にハイフンで始まっても大丈夫だったな

391 :名無しさん@お腹いっぱい。:2014/02/28(金) 22:23:09.55 .net
あと [ ] 内って == 使えたっけ?

392 :名無しさん@お腹いっぱい。:2014/02/28(金) 22:26:08.16 .net
うちの環境だと
/usr/bin/[ は == がOK
bashの組み込みの[も == がOK
sh(dashだった)の組み込みの[は == がNG

393 :384:2014/02/28(金) 23:21:24.48 .net
>>387
いや、>>389の言う通り、普通は未定義変数でもダブルクォートしてれば空文字扱いになるよね?
おそらくそうはならない環境のための配慮かと思ったんだけど・・・
誰かこの辺詳しい人いません?

394 :名無しさん@お腹いっぱい。:2014/02/28(金) 23:45:51.04 .net
>>393
http://stackoverflow.com/questions/6852612/bash-test-for-empty-string-with-x

395 :名無しさん@お腹いっぱい。:2014/03/01(土) 00:00:04.36 .net
>>394
おードンピシャなページですわthx
なるほど、[ がビルトインじゃない時代の互換性のためだったのね
じゃあ今の時代では必要なシーンなんてほぼ皆無だろうね

396 :名無しさん@お腹いっぱい。:2014/03/01(土) 08:47:18.39 .net
未だに if [ "x$hoge" = "xYes" ] とか書いてるプログラマーorシス管見つけたら
社史編纂室に異動させるわ

397 :名無しさん@お腹いっぱい。:2014/03/01(土) 14:12:39.58 .net
>>383
連番のH画像/動画を一気にダウンロードする6
http://toro.2ch.net/test/read.cgi/unix/1349257148/

スレ2個目ぐらいまでが参考になる。

398 :名無しさん@お腹いっぱい。:2014/03/01(土) 15:45:04.91 .net
既存ファイルの特定文字列にマッチした行の下に、任意の文字列を挿入する一般的な方法ってないですか?
ここで言う任意の文字列というのは、$'"/などの記号文字や改行も含む複数行から成る文字列です。
できれば

str="
文字列1
文字列2
・・・
文字列n
"

というstrを作った上、sedなどで一発でできればいいのですが。

399 :名無しさん@お腹いっぱい。:2014/03/01(土) 16:38:27.39 .net
>>395
ビルトインでない [ はビルトインの [ を持っていないシェルのために存在するものちゃうの?
将来的には消してビルトインの方に統一するんちゃうの?

やったら逆やと思うんやけど。

400 :名無しさん@お腹いっぱい。:2014/03/01(土) 16:45:16.38 .net
>>398
sed '/hoge/a --foo--\n--bar--' -i file

401 :名無しさん@お腹いっぱい。:2014/03/01(土) 17:00:58.86 .net
ここのスレレベル低いから質問しても知ったかのバカが適当に答えてるだけだよw
見ててわかるからおもろいw

402 :名無しさん@お腹いっぱい。:2014/03/01(土) 19:15:34.15 .net
と、低レベルがうなってます

403 :名無しさん@お腹いっぱい。:2014/03/01(土) 21:37:01.64 .net
>>400
変数strを使う場合はどうですか?
sed '/hoge/a $str' -i file だとstrの中身が返らないし
sed "/hoge/a $str" -i file だとエラーになるんですよね。
結局strの中身の特殊文字をうまくエスケープしておかないと駄目みたいで、面倒だなぁと前から思ってまして。

別にsedに拘っているわけではないです。とりあえず今はこんなふうにして凌いでいます。

cat > file2 <(sed -n "1,/hoge/ p" file) <(cat << EOF
文字列1
文字列2
・・・
文字列n
EOF
) <( sed -n "/hoge/,$ p" file | tail -n +2 ) ; mv file2 file

いまいちカッコ悪くて気に入りません。
それに file が巨大な場合は2回sedをかますのは非効率的だろうし。。。

この手の挿入処理はよくあるテクだと思うので、他にもっと良い方法があるんだろうと思ってたのですが。

404 :名無しさん@お腹いっぱい。:2014/03/01(土) 21:51:22.31 .net
sedが駄目ならawk使えば

hoge='ho$ge
fu/g"a
piyo'

echo "apple
banana
orange" | awk -v hoge="$hoge" '{print}/banana/{print hoge}'

405 :名無しさん@お腹いっぱい。:2014/03/01(土) 22:04:11.17 .net
>>404
おぉ、そんな方法が!awkに変数をまるっと渡せるのがミソですね。
ありがとうございました。

406 :名無しさん@お腹いっぱい。:2014/03/01(土) 23:48:56.90 .net
shでechoの出力先をデフォルト標準出力、ファイル指定されてたらそのファイルと言うことをしたいのだけど。
/dev/stdoutがsuした後だと使えません。

出力先が指定されているかいないかで分岐して同じechoすればいいだけなのだけど、
分岐なしでいけるクールなやり方ありませんか?

407 :名無しさん@お腹いっぱい。:2014/03/02(日) 00:07:17.74 .net
良く分からんが exec 1> file とかじゃ駄目なのか

408 :名無しさん@お腹いっぱい。:2014/03/02(日) 02:09:02.35 .net
>>398
「できれば」以降がよくわからんけど・・・
Perlで全文読みきって正規表現で置換するワンライナー書けばいいと思う
Perlの正規表現なら改行文字を含んで複数行のマッチが書ける

sedでも出来る気はするけどsed使うの苦手なんで他の人にパス

409 :名無しさん@お腹いっぱい。:2014/03/02(日) 04:18:36.46 .net
>>408
sed使うの得意じゃないが >>403 のように変数じゃなくて構わないなら
$ sed "/hoge/ {
a 文字列1
a 文字列2
a ・・・
a 文字列n
}" <file

とか,一旦ファイルに落としてこんな感じとか

tmpfile=`mktemp`
trap "rm -f $tmpfile" EXIT
echo -n "$str" >$tmpfile
sed "/hoge/ r $tmpfile" <file

それも嫌ならこんな形?

sed "/hoge/ r /dev/stdin" -i f1 <<EOF
$(echo "$str")
EOF

410 :名無しさん@お腹いっぱい。:2014/03/02(日) 05:08:57.04 .net
あー>>404さんの方法、マッチする/banana/の部分も変数で渡したい場合は駄目でした。
/ /の中身は正規表現で解釈されちゃうからエスケープが必要ですねorz

hoge2='hoge$hoge'

echo "apple
banana
orange" | awk -v hoge="$hoge" -v hoge2="$hoge2" '{print}/hoge2/{print hoge}'


>>408
「できれば」というのは、挿入したい文字列をそのままの形でスクリプトに書いておいて、
その後の挿入処理もsedなどで華麗にワンライナーで書きたい、という願望です。

perlならできるのでしょうか。ゴミみたいな知識しかないので少し勉強しなきゃ。。

411 :名無しさん@お腹いっぱい。:2014/03/02(日) 06:19:37.58 .net
>>409
/dev/stdin からsedに流せるとは驚きました!
そして、これで目的の処理がsedでできました。ありがとうございます。
以下、テストスクリプト

#!/bin/sh
searchLine=$(cat << 'EOF'
hoge'"$&hoge
EOF
)
insertLines=$(cat << 'EOF'
#### insertLine ####
#### insertLine #### '"$&%=@+-*/[](){};:!
#### insertLine ####
EOF
)
cat > f1 << 'EOF'
1: fuga
2: hoge'"$&hoge
3: fuga
EOF
sed "/$searchLine/ r /dev/stdin" f1 << EOF
$(echo "$insertLines")
EOF

結局sedに戻ってしまった。。。
sedは行マッチの / / が正規表現ではなく固定文字列というのが、この場合丁度良かったということですね。

412 :名無しさん@お腹いっぱい。:2014/03/02(日) 06:26:32.79 .net
>>411
一つ補足します。
sedに渡すための searchLine に / が含まれるとsedでこけてしまう。やはり万能ではないか。。。
というかこの手の処理を完璧に汎用的にするというのは、もしかして不毛な考えなのでしょうか。

さらにおまけの補足ですが、>>404さんのようにechoの標準出力を>>411のsedへ渡す場合は、
そっちも/dev/stdinだと解釈されてしまいますね。本筋の話ではないですが。

413 :408:2014/03/02(日) 06:47:52.02 .net
399以降読まずに408を投稿してもうた・・・
>>410
なる。メタ文字含む複数行文字列が、挿入文字列じゃ無くて検索文字列だと勘違いしてたわ
perl -pe '$_=$_.$ENV{挿入文字列変数名} if index($_,$ENV{検索文字列変数名})>=0'
検索文字列も素の変数使うって事なら↑挟めばいいと思う
改行関連は↓にするとか「-pe」を「-lpe」にするとか挿入文字列の前後の改行で調節とか色々
perl -pe '(chomp,$_=$_.$ENV{挿入文字列変数名}) if index($_,$ENV{検索文字列変数名})>=0'

>>412
Perlなら環境変数にさえ値を入れられれば問題なく処理できるかとー
テストコード貼ろうかと思ったけどヒアドキュメント版は改行多すぎぃ!

414 :名無しさん@お腹いっぱい。:2014/03/02(日) 08:13:38.92 .net
ここでは関数使ってブラックボックスにするのはアウトなんですか

415 :名無しさん@お腹いっぱい。:2014/03/02(日) 10:59:50.58 .net
どうしようsedとAWKとPerl
Perl覚えたらsedとAWKでできるテキスト処理できるらしいじゃん
ワンライナーだけでも覚える価値あるかな?

416 :名無しさん@お腹いっぱい。:2014/03/02(日) 11:21:08.85 .net
sedは s/hoge/fuga/ が用途の99%占めてるし
awkは {print $2} が用途の99%占めてるから憶えるまでもない
それを越える複雑な処理したい場合は素直にperlとか使うべし

417 :名無しさん@お腹いっぱい。:2014/03/02(日) 11:30:00.95 .net
最近はxmlstarletも便利だけど、webだとパースできるページ少ない。

418 :名無しさん@お腹いっぱい。:2014/03/02(日) 14:51:52.22 .net
>>398
特定文字列にマッチというのが正規表現なら
perl -e 'while (<STDIN>)
{
print;
if (/$ARGV[0]/)
{
print "$ARGV[1]";
}
}' "$pattern" "$insert" < file

文字列の比較なら
awk -v pattern="$pattern" -v insert="$insert" '{print} $0 == pattern {print insert}' file

て感じでどうだろう

419 :名無しさん@お腹いっぱい。:2014/03/02(日) 17:15:59.79 .net
>>407
指定されてたら複製させる感じか。
明日試してみます。

420 :名無しさん@お腹いっぱい。:2014/03/02(日) 17:23:58.94 .net
>>413
perl使うのなら
BEGIN{undef $/;} s/(Q${検索文字列}E)/$1${挿入文字列}/g
とかじゃダメなん?

421 :名無しさん@お腹いっぱい。:2014/03/02(日) 17:59:50.17 .net
>>413,418,420
ありがとうございます。
perl全くの無知なんで勉強してみます。

# perlってなんか独特で敬遠してたのよね。。。sedやawkでできない場合に困るし、やっといたほうがいいな

422 :名無しさん@お腹いっぱい。:2014/03/02(日) 18:25:13.98 .net
perlはもう10年書いてないけど困ったことはないな
rubyとpythonが書ければ何とかなる

423 :名無しさん@お腹いっぱい。:2014/03/02(日) 18:31:34.17 .net
/usr/localのインストールは禁止されてるので、perlはあり得ない。
普通に sed awk あるいはシェルのみで書く。

424 :名無しさん@お腹いっぱい。:2014/03/02(日) 18:36:54.21 .net
僕はnode.jsでいいです

425 :名無しさん@お腹いっぱい。:2014/03/02(日) 19:35:01.12 .net
>>420
ダメじゃないと思うぞ、プログラム全般がそうだけど、Perlは特にTMTOWTDIとかいう標語まであるし
俺はそのやり方で\Eとか含んでても大丈夫って知らず、エスケープに悩みたくなくてああしただけ

>>423
そういう環境ならそうだけど…
そういう環境って組み込みとか起動中処理とかそういうケースだけのような気も…そうなるとsed awkも怪しい気がしなくもない

426 :名無しさん@お腹いっぱい。:2014/03/02(日) 23:51:00.24 .net
最近はLinuxならperlはもちろんruby、pythonも入ってるのは当たり前なんだっけ?

427 :名無しさん@お腹いっぱい。:2014/03/02(日) 23:52:16.04 .net
>>426
デフォルトでぜんぶ入ってるのは少ないんじゃないか

428 :名無しさん@お腹いっぱい。:2014/03/03(月) 01:14:07.15 .net
FreeBSDで適当にPorts入れようとするとRubyやPython要求される
(つまりその時点では入ってない)ことが結構あった気が…Perlはどうだっけ

429 :名無しさん@お腹いっぱい。:2014/03/03(月) 01:50:22.24 .net
m4もいれといて

430 :名無しさん@お腹いっぱい。:2014/03/03(月) 03:46:25.79 .net
ruby入ってない@deb

431 :名無しさん@お腹いっぱい。:2014/03/03(月) 07:46:01.44 .net
俺のイメージだと入ってる可能性が高い順に
python,perl,rubyだな

432 :名無しさん@お腹いっぱい。:2014/03/03(月) 10:51:17.61 .net
>>431
perlが入っていないOSって何?

433 :名無しさん@お腹いっぱい。:2014/03/03(月) 10:56:01.93 .net
python,perlは入ってるな大体

434 :名無しさん@お腹いっぱい。:2014/03/03(月) 11:00:43.61 .net
>>432 FreeBSDだろ

435 :名無しさん@お腹いっぱい。:2014/03/03(月) 12:38:54.31 .net
>>434
15年前には入っていたけど最近のバージョンには入っていないのか?
もしかしてperlはもう消えていきつつあるソフトウェアなのか?

436 :名無しさん@お腹いっぱい。:2014/03/03(月) 12:44:41.67 .net
>>435
http://slashdot.jp/story/02/05/16/0611246/
この辺で外れたんじゃなかったっけ。
もちろん ports にはある。

437 :名無しさん@お腹いっぱい。:2014/03/03(月) 12:47:23.09 .net
perlが消えていくってことは(今のところは)ないけど、
perl以外の選択肢は増えている。

438 :名無しさん@お腹いっぱい。:2014/03/03(月) 12:50:06.73 .net
perlよりワンライナーが有用な言語ある?

439 :名無しさん@お腹いっぱい。:2014/03/03(月) 13:07:26.50 .net
rubyやpythonかじったけど、普段のデータ処理は結局perl使ってるなあ
基本だけ知ってれば、いちいち調べなくても書けるのがいい

440 :名無しさん@お腹いっぱい。:2014/03/03(月) 13:35:31.63 .net
>>434
NetBSDにもperlはない。
luaはあるが。
luaなのは、組み込み言語用途での実績かららしい。

441 :名無しさん@お腹いっぱい。:2014/03/03(月) 17:19:30.99 .net
>>436
その記事だとカーネルビルドに必要なくなっただけでデフォルトインストールだと書かれてるけど…

442 :名無しさん@お腹いっぱい。:2014/03/03(月) 17:20:09.85 .net
つーか、netbsdのカーネルに組み込まれたからね。
lrwx------ 1 root wheel 4 Feb 21 19:21 /dev/lua -> lua0
crw-rw-r-- 1 root wheel 209, 0 Feb 21 19:21 /dev/lua0

443 :名無しさん@お腹いっぱい。:2014/03/03(月) 22:49:22.36 .net
最近猫も杓子もpythonな風潮が気に入らない

444 :名無しさん@お腹いっぱい。:2014/03/03(月) 22:57:48.86 .net
>>443
シェルスクリプトと言い張る。

#!/bin/sh
python -c hogehoge...
EOF

445 :名無しさん@お腹いっぱい。:2014/03/04(火) 00:24:58.61 .net
>>444
pythonなら

#!/bin/sh
python <<EOF
hogehogehoge
EOF

にしないとワンライナーで書くことになって死ぬ

446 :名無しさん@お腹いっぱい。:2014/03/04(火) 05:16:11.99 .net
冷や毒は添付ファイル作るから、/tmpが書き込み不可(boot時など)の時動作しない。
豆な。

447 :名無しさん@お腹いっぱい。:2014/03/04(火) 08:37:46.65 .net
当て字きもい

448 :名無しさん@お腹いっぱい。:2014/03/04(火) 09:10:08.09 .net
そんなあなたに冷やすとリング

449 :名無しさん@お腹いっぱい。:2014/03/04(火) 11:04:27.79 .net
2ch とはいえ技術系スレだもんな。

技術系スレとはいえ 2ch だもんな。

どっちが大勢?

450 :名無しさん@お腹いっぱい。:2014/03/04(火) 11:20:14.56 .net
そういうのは別のスレで。

451 :名無しさん@お腹いっぱい。:2014/03/04(火) 11:39:52.72 .net
そういう詰まらんオマエは別のスレへ。

452 :名無しさん@お腹いっぱい。:2014/03/05(水) 06:45:09.19 .net
>>446,448 みたいな当て字書くプログラマーorシス管見つけたら
社史編纂室に異動させるわ

453 :名無しさん@お腹いっぱい。:2014/03/05(水) 06:52:27.27 .net
当て字に塗れた社史とか読みたくないです

454 :名無しさん@お腹いっぱい。:2014/03/05(水) 08:13:05.63 .net
>>448
冷やすとリングも添付ファイル作るから解決にならんよ。パイプで書き換えること。

455 :名無しさん@お腹いっぱい。:2014/03/06(木) 00:46:35.73 .net
cshでは以下のようなことはできないのでしょうか。

set usage="usage : `basename $0` -hoge [A|B|C]"

[]でエラーになります。

456 :名無しさん@お腹いっぱい。:2014/03/06(木) 02:36:44.78 .net
>>455
>>1
> ・csh/tcshのシェルスクリプトは推奨されません。
>  (理由は「csh-whynot」でググれ)
ログインシェルとして使うのはともかく、スクリプトにcsh系を使うべきではない

457 :名無しさん@お腹いっぱい。:2014/03/06(木) 06:26:36.56 .net
社史編纂室に異動させてほしいです。

仕事なくても養ってくれるなんて、今どきあり得ない好待遇じゃないですか。
左遷される前にクビが飛ぶんですから。

458 :名無しさん@お腹いっぱい。:2014/03/06(木) 06:29:01.28 .net
そのかわり人格破壊作業を施されるとか

459 :名無しさん@お腹いっぱい。:2014/03/06(木) 07:47:00.96 .net
社史や社史編纂室を作る余裕があるような会社に就職したいです

460 :名無しさん@お腹いっぱい。:2014/03/06(木) 08:22:34.96 .net
>>455
使ってないけど、
set usage="usage : `basename $0` -hoge "'[A|B|C]'
じゃダメなの?

461 :名無しさん@お腹いっぱい。:2014/03/09(日) 03:02:15.61 .net
PS1やエイリアスを指定した状態でbashを起動し
対話操作できるようにできますか?
bashをヒアドキュメントを利用して起動してもbashが終了してしまい-cオプションでも同じことが起きます
-o ignoreeofでもダメでした

462 :名無しさん@お腹いっぱい。:2014/03/09(日) 09:24:16.63 .net
>>461
環境変数だけなら env PS1="..." PS2="..." /bin/bash でいける。
別途ファイル用意していいなら bash --rcfile ファイル名 で .bashrc のかわりのファイルを指定するか。
(ファイルの先頭に . ${HOME}/.bashrc 書いておいて、追記分を2行目以降に記載)

463 :名無しさん@お腹いっぱい。:2014/03/09(日) 10:05:44.59 .net
すみませんが詳しい方のみ回答をお願いします

464 :名無しさん@お腹いっぱい。:2014/03/09(日) 10:10:03.69 .net
すみませんが2chに詳しい方のみ質問をお願いします

465 :名無しさん@お腹いっぱい。:2014/03/09(日) 23:13:53.66 .net
こういうのってぼっとなのかな?
手でやってるのかな?

466 :名無しさん@お腹いっぱい。:2014/03/10(月) 06:29:01.50 .net
超高性能ボットみのような人間がやってるんじゃね?
人工知能はいまだ自然言語の分解も怪しいってのに
質問と回答とその他が区別できる程の自然言語解釈とか無理だと思う

467 :名無しさん@お腹いっぱい。:2014/03/10(月) 06:48:59.22 .net
そうだな。的を外してる回答のみを抽出する処理も要るしな。

468 :名無しさん@お腹いっぱい。:2014/03/10(月) 09:20:03.93 .net
社なんとか室の仕事じゃね?w

469 :名無しさん@お腹いっぱい。:2014/03/10(月) 13:43:45.94 .net
PS1はプロンプトでしょ?
PS2ってなんだっけか

470 :名無しさん@お腹いっぱい。:2014/03/10(月) 13:45:31.00 .net
セカンダリプロンプト

471 :名無しさん@お腹いっぱい。:2014/03/10(月) 13:47:51.38 .net
自動的にプログラム実行時の実時間を環境変数に入れるように
プロンプトを改造したいんだけど、うまくいきません。

bashで、プログラム実行直前の時刻を取得する方法ってあります?
bashで無理ならzshとかいうやつでもいいです。

472 :名無しさん@お腹いっぱい。:2014/03/10(月) 13:48:41.84 .net
だからセカンダリプロンプトってなんだっけかって聞いてるんだろ。アスペかよw

473 :名無しさん@お腹いっぱい。:2014/03/10(月) 13:50:14.23 .net
man読めよ。

474 :名無しさん@お腹いっぱい。:2014/03/10(月) 14:42:21.01 .net
>>471
あるよ

475 :名無しさん@お腹いっぱい。:2014/03/10(月) 14:43:20.91 .net
すみませんが詳しい方のみ回答をお願いします

476 :名無しさん@お腹いっぱい。:2014/03/10(月) 21:50:55.09 .net
history-all | tail
あたり

477 :名無しさん@お腹いっぱい。:2014/03/11(火) 10:38:49.35 .net
>>474
どうやって実現すればよいですか?

478 :名無しさん@お腹いっぱい。:2014/03/11(火) 10:56:29.86 .net
ないよ

479 :名無しさん@お腹いっぱい。:2014/03/11(火) 13:17:02.19 .net
historyじゃだめなの?
HISTTIMEFORMAT環境変数セットして

480 :名無しさん@お腹いっぱい。:2014/03/11(火) 14:36:12.29 .net
プロンプトに時刻入らなきゃヤダ。
プロンプト表示時点の時刻じゃなくて、
コマンド実行時にそのコマンドをタイプした前の行のプロンプトに時刻を入れる
というところがポイントな。

481 :名無しさん@お腹いっぱい。:2014/03/11(火) 14:45:31.55 .net
現在コマンド入力中のプロンプトは時計のように時刻を1秒毎にカウントアップしていて、
コマンドをタイプしたらその行プロンプトのの時計が止まってコマンド起動時刻を示す、
というのがいいな。

482 :名無しさん@お腹いっぱい。:2014/03/11(火) 15:11:12.45 .net
historyに時刻入れた方が便利そう。

483 :名無しさん@お腹いっぱい。:2014/03/11(火) 15:48:25.57 .net
>>479
HISTTIMEFORMATセットすると、
HISTCONTROL=ignoreboth が無効になる
当たり前なんだろうけどちょっとショック受けた

484 :名無しさん@お腹いっぱい。:2014/03/11(火) 16:31:57.44 .net
実行直前の時刻って何なの?開始時刻とは違うの?

485 :名無しさん@お腹いっぱい。:2014/03/11(火) 16:54:41.94 .net
呼ばれたコマンドが始まってしまったら
シェル側はどうこうできない。
呼ばれるコマンドが実行される直前に
シェル側で時刻を出す必要がある。

486 :名無しさん@お腹いっぱい。:2014/03/11(火) 18:11:36.64 .net
>>484
違わない
実行直前の時刻とは、開始時刻のことである
必要ならば図解しようか?

487 :名無しさん@お腹いっぱい。:2014/03/11(火) 18:13:28.44 .net
>>486
図解よろしく。

488 :名無しさん@お腹いっぱい。:2014/03/12(水) 08:46:30.76 .net
tcshユーザやzshユーザはprecmd使えるから何も悩まずに出来そうなんだがなぁ…
bashでprecmdをググったらこんなのが引っかかった ttp://glyf.livejournal.com/63106.html

489 :名無しさん@お腹いっぱい。:2014/03/12(水) 23:40:38.94 .net
パスワード認証のsshでログインを自動化したいのですが、どのようにすればよいでしょうか?
expectコマンドはインストールしない方法を考えています。

echo -e "password\n" | ssh -t -t root@hoge.hoge

上のスクリプトだとプロンプトが出てダメでした。よろしくお願いいたします。

490 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:06:43.46 .net
>>489
失礼な話だが、釣り/荒し臭い質問だな。
適当に回答させて、いつものお決まりの文を書き込むのかな?

491 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:10:32.95 .net
expectが何を出来るかしか知らないんだろうな。
expectが何をやってるか知っていればそんなマヌケな質問は出てこない。

回答:
expect入れたくなきゃexpectと同じ働きのプログラムを作る

492 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:12:25.76 .net
>>489
何故パスフレーズなし秘密鍵ではだめなの?

493 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:17:52.08 .net
>>492
Dockerのコンテナにsshでログインしようとしているのですが、秘密鍵を指定しても読み込んでくれずパスワード入力になりました。
それで秘密鍵なしで頑張ろうと試行錯誤している次第です。

494 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:18:14.48 .net
>>492
ぼくのかんがえたさいきょうのパスワードくらっかーで、にっくきあいつのホストにろぐいんしてやるんだー。
ってことだろ

495 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:19:50.07 .net
>>493
公開鍵方式で認証できるように試行錯誤しろよ。

496 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:34:58.01 .net
>>493
$HOME/.ssh/authorized_keysないし、その祖先ディレクトリの
どこかが、グループかotherに対して書き込みを許してるってのが
チョーありがち。
てゆーか、まずログを確認すべきだね。
CentOSなら/var/log/secureとか。

497 :名無しさん@お腹いっぱい。:2014/03/13(木) 00:54:40.58 .net
>>496
$HOME/.sshフォルダがまるごと消えていたのが原因だったようです。。
きちんと確認しないといけないですね。ありがとうございました。

498 :名無しさん@お腹いっぱい。:2014/03/13(木) 01:43:17.07 .net
何それww

499 :名無しさん@お腹いっぱい。:2014/03/13(木) 10:38:52.37 .net
このスレには社史編纂室レベルの質問しかこないのか

500 :名無しさん@お腹いっぱい。:2014/03/13(木) 19:05:06.07 .net
噴いた

501 :名無しさん@お腹いっぱい。:2014/03/14(金) 03:42:52.41 .net
>>499
答えてるのも社史編纂室のおじちゃん達というオチか

502 :名無しさん@お腹いっぱい。:2014/03/14(金) 09:07:38.64 .net
社史編纂室厨いい加減うざい
糞質問する奴ともども氏ねや

503 :名無しさん@お腹いっぱい。:2014/03/14(金) 09:43:44.60 .net
bashで、プログラム実行後のカレントを保存する方法ってあります?
bashで無理ならzshとかいうやつでもいいです。

504 :名無しさん@お腹いっぱい。:2014/03/14(金) 10:14:10.84 .net
老けたせいでギャグの質が低下してるのを気がつかないのだろう

社史編纂質
すみませんが詳しい方だけ答えてうんたら

これらギャグのつもりなんだろうが
面白くないし、寒いし、うざい
「ギャグは繰り返し」を勘違いしてる、寒くてうざいもんは寒くてうざい

505 :名無しさん@お腹いっぱい。:2014/03/14(金) 10:23:30.00 .net
老化してるから
「ウざがられるためにやってるんですう」とか
小学生みたいにいってくるからヤメロ

506 :名無しさん@お腹いっぱい。:2014/03/14(金) 11:05:31.46 .net
>>503
カレントってなに? 電流?

507 :名無しさん@お腹いっぱい。:2014/03/14(金) 11:37:04.63 .net
カレントディレクトリか?
DIR=`pwd` とかそういう話かな。

508 :名無しさん@お腹いっぱい。:2014/03/14(金) 11:38:08.74 .net
DIR=$PWD でいいか。

509 :名無しさん@お腹いっぱい。:2014/03/14(金) 11:48:40.69 .net
>>504
> これらギャグのつもりなんだろうが
ギャグじゃなくて回答する人を弄ぶのが目的の荒しだと思うが。

> 社史編纂質
> すみませんが詳しい方だけ答えてうんたら

俺的には
「人を馬鹿にする事ばかりの虚栄心君」
もかな。

510 :名無しさん@お腹いっぱい。:2014/03/14(金) 11:56:21.66 .net
弄ぶついでにギャグか照れ隠しではさむ言葉のセンスについてだろうが

511 :名無しさん@お腹いっぱい。:2014/03/14(金) 12:07:14.51 .net
目的とか考えてもしょうがないよ。
それを理解できたら正気ではいられなくなる。

512 :名無しさん@お腹いっぱい。:2014/03/14(金) 12:16:23.40 .net
小バカにしようとする態度は見て取れるが
書きかたが悪いせいで、そいつ自身バカに見える

513 :名無しさん@お腹いっぱい。:2014/03/14(金) 12:17:37.85 .net
こんな感じの騒ぎを起こすのが目的だろ
この手のは完全スルーが一番

514 :名無しさん@お腹いっぱい。:2014/03/14(金) 15:39:00.00 .net
>>489
sleep入れればおk
(sleep 3; echo -e "password\n") | ssh -t -t root@hoge.hoge
こんな感じな

515 :名無しさん@お腹いっぱい。:2014/03/14(金) 15:46:13.80 .net
おっ、糞回答を自作自演してきたなw

516 :名無しさん@お腹いっぱい。:2014/03/14(金) 16:18:08.60 .net
すみませんが詳しい方のみ回答をお願いします

517 :名無しさん@お腹いっぱい。:2014/03/14(金) 21:37:10.13 .net
>>512
昔から言うよね バカのひとつ覚えってw

518 :名無しさん@お腹いっぱい。:2014/03/15(土) 17:14:02.96 .net
シェル初心者です。

シェル実行ファイル内に、
TEMP=`コマンド結果`
の変数があって、外部ファイル(SQL文)内に同じ変数
${TEMP}
を記述して、外部ファイルを読み込ませてSQLを実行させたいのですが、
変数に値が入るような書き方が分かりませぬ。

519 :名無しさん@お腹いっぱい。:2014/03/15(土) 17:19:10.47 .net
sed通すとか?

520 :名無しさん@お腹いっぱい。:2014/03/15(土) 17:20:44.24 .net
>>503
その後どうすか。

521 :名無しさん@お腹いっぱい。:2014/03/15(土) 17:36:44.02 .net
外部ファイルじゃなくてヒアドキュメントにするのがお手軽

予告しておこう
お前はSQLインジェクションを喰って死ぬほど後悔する。

522 :名無しさん@お腹いっぱい。:2014/03/15(土) 23:40:58.59 .net
>>519
やはり置換が必要なんですかね。

>>521
ヒアドキュメントで動作することは確認できたのですが、
外部ファイルに持たせる処理をスマートにやってみたかっただけです。

セキュリティ的にまずいんですかね このやり方。

523 :名無しさん@お腹いっぱい。:2014/03/16(日) 00:57:51.00 .net
>>522
回答でサニタイズが言及されていない時点で、(やり方もだが)
あなたの知識がセキュリティ的にまずいと思うわ。
SQLインジェクションは思いつきにくい方法でデータぶっこぬかれたり不正操作されるって
パターンなんで、どういう攻撃方法があるかを人とおり勉強することをオヌヌメする。

524 :名無しさん@お腹いっぱい。:2014/03/16(日) 03:25:40.44 .net
SQLはプリペアードステートメント使用が鉄則なのでシェルスクリプトで
処理しようというのが間違い

525 :名無しさん@お腹いっぱい。:2014/03/16(日) 08:52:20.29 .net
出た!サニタイズ!

526 :名無しさん@お腹いっぱい。:2014/03/16(日) 09:08:18.94 .net
サニタイズ言うなキャンペーンはひろみちゅの(シロートが書いたセキュリティ
対策本への)言いがかりなので、適切な文脈で使うのは全く問題ない。

527 :名無しさん@お腹いっぱい。:2014/03/16(日) 15:41:16.64 .net
適切な文章ではエスケープって単語が出てくるべきだしそれで十分だから、
サニタイズという単語が適切なケースなんてまず無いってのが根本にある。
劣化したエスケープにすぎないサニタイズで満足する考え方自体問題だし、
サニタイズなんて言葉使う考え方してるとそのうちエスケープ漏れで死ぬよ。

エスケープとサニタイズの関係はバグとセキュリティホールの関係に置き換えられる。
セキュリティホールとして悪用可能なバグじゃなくてもバグを肯定するのは駄目だろう。

528 :名無しさん@お腹いっぱい。:2014/03/16(日) 16:16:50.80 .net
正当な文字だけで構成されていなかったら、そこでエラー終了するという方法
だってかまわない。
その場合もエスケープか? 確かにエスケープだが意味が全然違う。w

ところで、パブリックアクセス可能なdbを作成する際にセンシティブな情報や
個人情報を取り除く事もサニタイズと言うのだが、これも「サニタイズ言うな
キャンペーン」に引っかかるのかね? どうやってエスケープするんだろう。w

529 :名無しさん@お腹いっぱい。:2014/03/16(日) 16:59:02.56 .net
話それまくってるな。

530 :名無しさん@お腹いっぱい。:2014/03/16(日) 17:17:31.70 .net
>>528
「センシティブな文字列」というものをそもそも作り出さないのが
サニタイズ言うな運動の肝なんよ

まあシェルスクリプトだとなかなか難しい話なんだけど、
Cとかでたとえるなら
system使うとコマンドラインインジェクションの危険あるけど
forkしてexecなら原理的にインジェクションは無いでしょ?
そういう積み重ねのことね。

531 :名無しさん@お腹いっぱい。:2014/03/16(日) 17:26:45.65 .net
セキュリティ言ってる人も
DBユーザの権限で制限するのあんまやんないよなぁ。
行ごとの権限ができないのはともかく。

532 :名無しさん@お腹いっぱい。:2014/03/16(日) 18:01:23.02 .net
>>528
エラー終了はサニタイズしてないし、後者は単なるNGワードだろが…
システム的な意味でなら>>530だから論外だし

>>530
シェルスクリプトでエスケープとか考えたくねーわな…

>>531
たまには聞くけど ttp://blog.kazuhooku.com/2013/11/blog-post.html
よく聞く方法ではないね。レンタルサーバで1アカウントしか使えない場合を想定してるとか?

533 :名無しさん@お腹いっぱい。:2014/03/16(日) 18:59:34.85 .net
>>530
>>528の後半部分の「センシティブな文字列」とはクレジット番号だったり
するわけだが

> 「センシティブな文字列」というものをそもそも作り出さないのが
> サニタイズ言うな運動の肝なんよ
クレジット番号を作り出さないとか、全く意味不明

>>532
入力された文字をサニタイズしてのではなく、入力されたデータ全部を
サニタイズしたと言っていい

534 :名無しさん@お腹いっぱい。:2014/03/16(日) 19:06:36.89 .net
自分の人生をサニタイズしてみたらどうだ?

535 :名無しさん@お腹いっぱい。:2014/03/16(日) 19:10:20.60 .net
自分じゃできないから誰か俺の人生をサニタイズしてくれ

536 :名無しさん@お腹いっぱい。:2014/03/16(日) 20:38:59.46 .net
>>533
入力されたクレジット番号を文字列に埋め込むときに
無検査で埋め込むなってことでしょ
そのつっこみの方が意味不明

537 :名無しさん@お腹いっぱい。:2014/03/16(日) 20:54:14.25 .net
>>536
>>528の後半部分は、

>>527
> 適切な文章ではエスケープって単語が出てくるべきだしそれで十分だから、
への反例として、
公開サーバに置くデータベースを作るときにセンシティブな情報や個人情報を
取り除く作業を行う。この作業の事をサニタイズという。
を例示した。この作業をエスケープとは言わない。

サニタイズはサニタイズ。エスケープでは置き換え不可能。

538 :名無しさん@お腹いっぱい。:2014/03/17(月) 02:01:31.22 .net
サニタイズ(Sanitize):消毒、除菌、無害化
個人情報って毒だったのかぁ〜・・・
そういえば2chでも住所書くとドメイン焼かれてたからねぇ〜・・・

「単なるNGワードだろ」って指摘も聞かなかったことにしてるようだし、
そもそも>>518>>521>>523の文脈では個人情報の除去は関係ない
エスケープ言うべき所でサニタイズ言っちゃった典型的なサニタイズ脳

必死にサニタイズを擁護してるとこ悪いが、見てて哀れだからいい加減黙ろうか

539 :名無しさん@お腹いっぱい。:2014/03/17(月) 03:05:23.11 .net
>>538
>サニタイズ(Sanitize):消毒、除菌、無害化
>個人情報って毒だったのかぁ〜・・・
知らないで使ってたのかよ

>「単なるNGワードだろ」って指摘も聞かなかったことにしてるようだし、
2ch用語じゃ無くて正式な名称で言えば相手してあげるよ

>そもそも>>518>>521>>523の文脈では個人情報の除去は関係ない
だから、「ところで」と話題変えてるだろ。
>>527は発言の有効範囲を限定してないからな。

あと、>>518質問者 >>521オレ >>523何処かの誰か
>>525キャンペーンをうのみにしてるアホ
>>526オレ
だからな、勘違いするなよ

>エスケープ言うべき所でサニタイズ言っちゃった典型的なサニタイズ脳
>必死にサニタイズを擁護してるとこ悪いが、見てて哀れだからいい加減黙ろうか
お前、やっぱりひろみちゅのキャンペーンの意図理解してないだろ。w
バカには覚えやすい標語与えといて、簡単かつ確実な方法を選択させるのが目的
エスケープする方法が与えられているバカ向けの環境でのみ成立する

540 :名無しさん@お腹いっぱい。:2014/03/17(月) 04:00:50.56 .net
コイツにとってほぼ全ての実用なプログラミング言語はバカ向けの環境なのか・・・・・・
皮肉すら分らんようだし突き抜けすぎててもう感動〜!

541 :名無しさん@お腹いっぱい。:2014/03/17(月) 04:13:20.39 .net
こいつパー速にいる気がする

542 :名無しさん@お腹いっぱい。:2014/03/17(月) 07:51:52.87 .net
http://takagi-hiromitsu.jp/diary/20060115.html
> つまり、「サニタイズ」という用語が、各人の都合でどんな意味にも解釈され
> るという、「汚れた言葉」になっており、専門用語として使い物にならなくなっ
> ているのだ。もはや、「サニタイズする」は「セキュリティ対策する」と同義
> でしかない。そういう言葉には存在価値がない。加えて、特定の意味を指して
> 使っても別の意味で解釈されてしまうのだから、有害である。
ひろみちゅの思い込みと、思考能力がなくうのみにするバカの間でだけ通用する
言葉狩りキャンペーンって事だ

教祖様はNGワード(笑)にも言及してるな ブラックリストの事を言いたかったんだろ
> ブラックリスト方式ではなくホワイトリスト方式にせよという話だと誤読した事例
> 「/^[a-z]+$/のような正規表現」を使う手法はサニタイズ処理そのものであって、まさにセキュリティ対策のための処理である

543 :名無しさん@お腹いっぱい。:2014/03/17(月) 08:17:49.41 .net
続きは社史編纂室スレでやれよw

544 :名無しさん@お腹いっぱい。:2014/03/17(月) 08:41:08.81 .net
過去にひろみちゅに実名でコテンパンにやられた奴が、
逆恨みして暴れてるスレがあると聞いて飛んできますた!

545 :名無しさん@お腹いっぱい。:2014/03/17(月) 09:14:57.77 .net
何も考えずにひろみちゅの尻馬に乗ちゃったバカが憐れすぎる

546 :名無しさん@お腹いっぱい。:2014/03/17(月) 10:50:51.11 .net
>>533
サニタイズって言葉を再定義して使ってるのね。なるほど。

547 :名無しさん@お腹いっぱい。:2014/03/17(月) 11:38:32.28 ?2BP(1000).net
>>546
教祖様にいってやれよ。
つーか、お前のようなバカをサニタイズするために始まったキャンペーンだろw

http://takagi-hiromitsu.jp/diary/20060115.html
>> たとえば、データファイルのファイル名の一部をCGIのパラメータと して受け取るようになっているPerlスクリプトなら/^[a-z]+$/のような正規表
>> 現(Rubyなら\A[a-z]+\z/)で期待している文字しか入っていないこと を確認して(Perlの場合はuntaintもこれで出来る)、違っていたらエラーにする
>> というのが「 セキュリティ対策以前に元来本質的に必要な処理」だと思います。
> ブラックリスト方式ではなくホワイトリスト方式にせよという話だと誤読した事例
> 「/^[a-z]+$/のような正規表現」を使う手法はサニタイズ処理そのものであって、まさにセキュリティ対策のための処理である

548 :名無しさん@お腹いっぱい。:2014/03/17(月) 14:52:10.17 .net
>>547
あなたが教祖様?

549 :名無しさん@お腹いっぱい。:2014/03/17(月) 15:18:06.42 .net
いえ、社史編纂室長です

550 :名無しさん@お腹いっぱい。:2014/03/17(月) 20:24:54.09 .net
社史編纂代行株式会社でも作るか

551 :名無しさん@お腹いっぱい。:2014/03/17(月) 23:11:30.64 .net
なんかサニタイズとエスケープの理解度があやしくないか?

大ざっぱにいえば、
サニタイズは、不要な文字を削ること。
エスケープは、特殊な意味を打ち消すことだよ。

用途、目的がぜんぜんちがうべ。
サニタイズされた文字列に特殊な文字が含まれる事はないし、逆にエスケープされた文字列から特殊文字が消えることもない。

552 :名無しさん@お腹いっぱい。:2014/03/18(火) 03:27:47.75 .net
エスケープの事をサニタイズと呼んだり
エスケープすべきところでサニタイズしたりする
>>523みたいなサニタイズ脳がわらわら居るからな

SQLインジェクションなんてエスケープ漏れの代表例出して
サニタイズすべきとか言う馬鹿を勘違いさせないためにも
サニタイズなんて単語は捨てた方が良い

553 :名無しさん@お腹いっぱい。:2014/03/18(火) 05:24:22.39 ?2BP(1000).net
シェルスクリプトでSQLをエスケープしてからほざけ

554 :名無しさん@お腹いっぱい。:2014/03/18(火) 05:31:33.51 .net
有害なものを無害化するエスケープがサニタイジングでしょ
エスケープの一種ってことで

555 :名無しさん@お腹いっぱい。:2014/03/18(火) 05:40:22.48 .net
まだやってる…

556 :名無しさん@お腹いっぱい。:2014/03/18(火) 06:16:47.81 .net
バリデーション「ぼくも入れて〜」

557 :名無しさん@お腹いっぱい。:2014/03/18(火) 08:41:56.99 .net
> 有害なものを無害化するエスケープがサニタイジングでしょ
> エスケープの一種ってことで
そういう定義にするのか? キャンペーンの信者 www
「エスケープ言うなキャンペーン」始めるべきですよ。ひろみちゅ先生

戻せないものはエスケープとは言わない。

558 :名無しさん@お腹いっぱい。:2014/03/18(火) 08:59:59.97 .net
ん?戻せないってなんのこと?

559 :名無しさん@お腹いっぱい。:2014/03/18(火) 09:02:46.08 .net
戻せなきゃSQLを実行できないだろ キャンペーン信者頭悪っ www
とっとと、SQLをシェルスクリプトでエスケープしろよ。

560 :名無しさん@お腹いっぱい。:2014/03/18(火) 09:12:57.21 .net
>>557
誰と戦ってんだ?

561 :名無しさん@お腹いっぱい。:2014/03/18(火) 09:18:44.31 .net
>>525とか>>527 頭の悪いキャンペーンの盲信者達

562 :名無しさん@お腹いっぱい。:2014/03/18(火) 10:35:22.70 .net
浸透「遊びに来たよ!」

563 :名無しさん@お腹いっぱい。:2014/03/18(火) 14:42:42.83 .net
>>558
サニタイズの用例には3つある
1、エスケープをサニタイズと呼ぶ
2、エスケープするべき文字(列)を単純に除去することをサニタイズと呼ぶ
3、NGワード同様、通過させては駄目なデータを除去・置換することをサニタイズと呼ぶ
複数の用例を区別せず「サニタイズは正しい」などと言ってると、
1の人はエスケープという概念を知りそこねて間違ったエスケープを行いエスケープ漏れを起こしやすくなるし
2の人は無意味にシステムへの入力制限やデータの損傷を起こした挙句エスケープ漏れを起こしやすくなる
そもそもエスケープをサニタイズなどと呼ぶべきではないし、3の用例もNGワードやフィルタリングと呼べばいい

この半ばスレチな話の発端である>>523はSQLインジェクションを例に出してる事から3の用例では無いんだが、
サニタイズを擁護してる人は何故かその事実やサニタイズに複数の(誤)用例があるって事実を無視したり、
あるいは複数の用例を都合よく入れ替えて話を捻じ曲げて理論展開してたりと、無茶苦茶やってんだよね
誤用した自分の擁護で捻じ曲げてんのか、高木への恨みで捻じ曲げてんのか、自覚なく捻じ曲げてるのか…

564 :名無しさん@お腹いっぱい。:2014/03/18(火) 14:56:36.97 .net
>>523を擁護してるのではなくて、それに釣られて現れた盲信者をバカにしているわけだが。

565 :名無しさん@お腹いっぱい。:2014/03/18(火) 23:37:24.97 .net
>>563
とりま、釣られてみる。
何度も指摘されているけれど、エスケープをサニタイズとは言わない。

全く別のものなのに同じものと理解してるのがまずい。

正規化の一種として同じとかならまだわかるけど。。。

566 :名無しさん@お腹いっぱい。:2014/03/19(水) 00:42:35.04 .net
>>564
盲信云々以前に523が明らかにキャンペーン対象の典型例なんだが

>>565
563はエスケープをサニタイズと言う奴が居るとは書いているけれど
エスケープをサニタイズと言わない奴が居ることを否定はしてないぞ?

567 :名無しさん@お腹いっぱい。:2014/03/19(水) 03:05:59.49 .net
だからもうFランPG・文系SEがドヤ顔でカタカナ言葉使ってたら
まず間違いなく意味わかってないってことでいいだろ

568 :名無しさん@お腹いっぱい。:2014/03/19(水) 08:31:58.99 .net
正直スレチ

569 :名無しさん@お腹いっぱい。:2014/03/19(水) 09:27:38.19 .net
エスケープが正しいと言ってた人
シェルスクリプトでSQLをエスケープする実例見せてよ

570 :名無しさん@お腹いっぱい。:2014/03/19(水) 09:28:38.92 .net
あっと、pgbashとか飛び道具なしね

571 :名無しさん@お腹いっぱい。:2014/03/19(水) 09:44:45.75 .net
悪意あるデータが混入するリスクのある状況で、
プリペアードステートメントのない言語選択するのって、
シェルスクリプトしか使えない老害ぐらいじゃねえ?

悪意あるデータは数字しか来ないと分かってる
例外的状況ぐらいしか、使う言い訳できるケースを思いつかん。

572 :名無しさん@お腹いっぱい。:2014/03/19(水) 10:02:06.63 .net
結局ひろみちゅのキャンペーンはサニタイズ脳を撲滅しようとして
エスケープ脳を量産する結果に終わってしまいましたとさ。

エスケープ脳の見分け方
「サニタイズ」と唱えると楽勝で判定できる

プリペアードステートメント万能かというとそうでもない
ひろみちゅも当初は誤解してたふしもあったけど
実装によっては(例: 古めのpostgreSQL)SQLへの展開をクライアント側でやっ
てて、結局phpとかに標準で入ってるエスケープ関数と同等ってのもある

573 :名無しさん@お腹いっぱい。:2014/03/19(水) 10:07:34.99 .net
おまえさんこそ、反省した方がいいよ。
それは、「プリペアードステートメントではないものを、プリペアード
ステートメントだと誤解していた」っていう例だぜ。

そいつを「プリペアードステートメント万能かというとそうでもない」と
表現しちゃうってことは、おまえさんが、プリペアードステートメントを
理解してないか、致命的に日本語が不自由か、どちらかだっていうことだ。

574 :名無しさん@お腹いっぱい。:2014/03/19(水) 10:25:59.42 .net
社史編纂室は社史編纂してたらそんでええの

575 :名無しさん@お腹いっぱい。:2014/03/19(水) 10:57:33.54 .net
お前の論理で言うとlibpqが
> PQprepare
> Submits a request to create a prepared statement with the given parameters,
> and waits for completion.
と「プリペアードステートメントではないものを、プリペアードステートメント
だと詐称していた」わけだが。
何かほかに質問はあるか? 無職

576 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:13:05.60 .net
2chスレ全体でやってる対立煽り工作がシェルスクリプトスレまでやってきた

て、ことだろう
このスレに対立楽しみたいという血気盛んな若者が居るとも思えんのだが
そうなんだろう

577 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:15:32.60 .net
>>575
さすが老害は時代感覚が狂ってるな。
PostgreSQL にホンモノのプリペアードステートメントがなかったのって、
PostgreSQL 7 の時代だぜ。
10年くらい前にはもうホンモノのプリペアードステートメントが入ってる。

Wikipedia ttp://en.wikipedia.org/wiki/Prepared_statement で確認しても、
ホンモノのプリペアードステートメントは server side で動くものって
書き方になってて、client side でやってる奴は emulation 扱いになってるぜ。
つまりホンモノのプリペアードステートメントじゃないってことだよ。

10年前ならともかく、いまさら PostgreSQL の過去の誤用を元に主張されても。

578 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:23:10.35 .net
クライアントサイドでの実装がありうるという実例だよ。
お前、全部の実装が「ホンモノのプリペアードステートメント」であることを
確認してるのか? 大変だな。 w

579 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:29:42.17 .net
セキュリティ気にしてる人間なら、当然チェックするだろう。
実際、クライアント側でエミュレートしているおかげで、
セキュリティホールがあったって事例はいくつもあるわけで。

そういう当たり前の作業もやらずに、セキュリティを語ってるわけ?
呆れた。

そりゃシェルスクリプトでサニタイズに問題感じないわけだ。

580 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:36:20.42 .net
ぷぷぷっ 矛盾してるぜ。「10年前ならともかく」な事を「当然チェック」するのか? ww

>>577
> 10年前ならともかく、いまさら PostgreSQL の過去の誤用を元に主張されても。

>>579
> セキュリティ気にしてる人間なら、当然チェックするだろう。

581 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:48:14.19 .net
いまでも、DB実装とライブラリの組合せによっては、
クライアント側でエミュレートするケースってのがありうるんだよ。

PHPのPDOとか、DB側でプリペアードステートメント用意してる場合には
当然使うが、用意してない場合には、クライアント側でエミュレーション
する機能がある。当然、こういうライブラリ使う場合には、そのDBで、
ちゃんとプリペアードステートメントになるか確認する必要がある。

こんなことも知らずに矛盾だと思っちゃうとか、よくセキュリティを
語る気になれるなあ。こういう奴の言ってることを間違って信じちゃう
奴がいると危険だから、ホント黙って欲しい。

582 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:52:16.22 .net
どっちも荒らしだから黙れ
いや独演でひとりか?

583 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:53:30.89 .net
こっちはどう言い訳するんだ?

>>577
> 10年前ならともかく、いまさら PostgreSQL の過去の誤用を元に主張されても。

584 :名無しさん@お腹いっぱい。:2014/03/19(水) 11:56:26.77 .net
どこに説明の必要があるの?

・10年くらい前の PostgreSQL は誤用していた。
・今でもプリペアードステートメントを、「エミュレート」するケースは存在する。
 (エミュレートなので、実際にはプリペアードステートメントにはなってない)

ってだけでしょ。

585 :名無しさん@お腹いっぱい。:2014/03/19(水) 12:05:07.42 .net
>>584
プリペアードステートメントではないものを、プリペアードステートメントだと詐称している実装が存在する事を知っているなら
>>573のような間抜けな発言はしない。

>>573
> おまえさんこそ、反省した方がいいよ。
> それは、「プリペアードステートメントではないものを、プリペアード
> ステートメントだと誤解していた」っていう例だぜ。

586 :名無しさん@お腹いっぱい。:2014/03/19(水) 12:08:06.83 .net
誤解していたのは、当時のひろみちゅだろ。
何が言いたいのかさっぱり分からんわ。

587 :名無しさん@お腹いっぱい。:2014/03/19(水) 12:23:30.19 .net
それはお前の日本語能力が決定的にダメなのだろう。

> ひろみちゅも当初は誤解してたふしもあったけど
最初から言ってるが。

588 :名無しさん@お腹いっぱい。:2014/03/19(水) 12:29:33.11 .net
むしろ、あんたの現実認識能力に問題がある気がするが。
当時ひろみちゅが誤解してたって話と、>>584 にどういう矛盾があるんだ?

589 :名無しさん@お腹いっぱい。:2014/03/19(水) 12:44:25.52 .net
最初から当時ひろみちゅが誤解してたっていってるのに
>>573と言いがかりをつけるのは、お前の日本語能力が欠如しているせいだろう。

590 :名無しさん@お腹いっぱい。:2014/03/19(水) 13:01:07.96 .net
これひとりで延々書き込んでるの?

591 :名無しさん@お腹いっぱい。:2014/03/19(水) 13:03:33.86 .net
何言ってるの。>>575 で、「PostgerSQLがプリペアードステートメントだと
主張してるから、client side でやっててもプリペアードステートメントだ」
って意味の主張してるじゃん。
自分の主張ももう忘れたの?

当時のPostgerSQLは間違えてんだよ。
そのことを分かってないのは、>>575 を書いた奴だ。

592 :名無しさん@お腹いっぱい。:2014/03/19(水) 13:04:37.87 .net
>>590
スレ違いすまん。少なくとも2人はいるんだ。

593 :名無しさん@お腹いっぱい。:2014/03/19(水) 13:24:03.80 .net
設定が2人以上とな

594 :名無しさん@お腹いっぱい。:2014/03/19(水) 13:45:09.84 .net
コマンドインジェクションをおこさないようにeval使いたいんだけど
どうしたらいいかな

595 :名無しさん@お腹いっぱい。:2014/03/19(水) 13:48:30.69 .net
evalをサ二タイズ

596 :名無しさん@お腹いっぱい。:2014/03/19(水) 15:41:59.44 .net
>>569
シェルスクリプトでエスケープできると言ってる奴は居ない
むしろサニタイズすべきといった奴がサニタイズ例出すべきだな

597 :名無しさん@お腹いっぱい。:2014/03/19(水) 15:55:44.46 .net
>>591
徹底的に日本語能力が欠如しているな。
「お前の論理で言うと」と前置きしてるだろ。

598 :名無しさん@お腹いっぱい。:2014/03/19(水) 16:40:24.56 .net
エバラ

599 :名無しさん@お腹いっぱい。:2014/03/19(水) 16:41:54.41 .net
焼肉の

600 :名無しさん@お腹いっぱい。:2014/03/19(水) 16:54:31.41 .net
ここで議論することじゃないだろ、お互いメルアドでも交換して続きはそっちでやってくれ

601 :名無しさん@お腹いっぱい。:2014/03/19(水) 17:20:09.44 .net
俺は目玉焼きはサニタイズよりターンオーバー派

602 :名無しさん@お腹いっぱい。:2014/03/19(水) 17:43:11.93 .net
議論の経過を第三者に見てもらいたいからメールじゃ駄目なんだよ

603 :名無しさん@お腹いっぱい。:2014/03/19(水) 17:55:03.76 .net
>>602
じゃあ、IDの出る板で、ここじゃないどこかで、
納得のいくまで議論をしてきてください。

604 :名無しさん@お腹いっぱい。:2014/03/19(水) 18:10:16.37 .net
議論の経過をシェルスクリプトスレの住人に見てもらいたいんだよ

605 :名無しさん@お腹いっぱい。:2014/03/19(水) 18:11:04.90 .net
>>602
誰も見てないよw

606 :名無しさん@お腹いっぱい。:2014/03/19(水) 20:29:36.39 .net
議論の経過をサ二夕イズ

607 :名無しさん@お腹いっぱい。:2014/03/19(水) 21:42:48.00 .net
>>604
あ、飛ばしてた

608 :名無しさん@お腹いっぱい。:2014/03/19(水) 22:05:25.51 .net
何この社史捏造室

609 :名無しさん@お腹いっぱい。:2014/03/19(水) 22:52:46.86 .net
編纂作業の傍らサニタイズについてブツブツと一人議論する元シス管か

610 :名無しさん@お腹いっぱい。:2014/03/23(日) 15:02:29.91 .net
$ mgrep [<options>] -e <pattern> <file>
でmigemoしたpatternで検索できる以下のようなmgrep関数を作った。
しかしこのままだと、patternの前に必ず -e オプションを付けんにゃならん。

$ mgrep [<options>] <pattern> <file>
でも同じようにmigemoしたpatternで検索したいんだけどどうしたら良い?
パイプした時も使いたいから <file> は存在しない可能性もある。

function mgrep() {
local -a args
local prev
for arg in "$@"; do
if [ "$prev" = '-e' ]; then
args+=$(cmigemo -d /usr/local/share/migemo/utf-8/migemo-dict -w "$arg")
else
args+="$arg"
fi
prev="$arg"
done
grep -E "${args[@]}"
}

611 :名無しさん@お腹いっぱい。:2014/03/23(日) 21:06:15.72 .net
パターンはスラッシュでくくる、とかの仕様にすればいいんじゃ

expr match "$arg" '/\(.*\)/'
にマッチすればパターンとみなすとか

612 :名無しさん@お腹いっぱい。:2014/03/28(金) 01:59:44.83 .net
if [ -n "${file:-}" ]; then
↑こういう書き方をしてるスクリプトがあるんですが、これって

if [ -n "${file}" ]; then

と単に書くのと何が違うんでしょうか?

613 :名無しさん@お腹いっぱい。:2014/03/28(金) 04:43:52.29 .net
おしゃれ

614 :名無しさん@お腹いっぱい。:2014/03/28(金) 04:51:02.05 .net
>>612
set -u してる場合にエラーを回避することができる

>>613
すみませんが詳しい方のみ回答をお願いします

615 :名無しさん@お腹いっぱい。:2014/03/28(金) 06:17:11.97 .net
>>613
http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbBB

616 :名無しさん@お腹いっぱい。:2014/03/28(金) 06:51:18.06 .net
>>615
${parameter:-word} 自体の意味を質問してるんじゃないよw
だから >>614 の回答が適切。

617 :名無しさん@お腹いっぱい。:2014/03/28(金) 06:55:53.38 .net
>>612
$ set -u
$ unset file
$ echo "${file}"
file: unbound variable
$ echo "${file:-}"
(エラーなし)

set -u してなければ "${file:-}" も "$file" も同じ。

>>615 は問題ちゃんと読まずに解答するタイプw

618 :名無しさん@お腹いっぱい。:2014/03/28(金) 07:00:40.67 .net
>>616
${parameter:-word} 自体の意味がわかってたら
なぜそう書くのかもわかるんじゃね?

619 :名無しさん@お腹いっぱい。:2014/03/28(金) 07:09:57.05 .net
>>618
${parameter:-word} 自体の意味はわかってても、
その word の部分を空文字列にする場合の意味がわからないってことだろ

wordが空文字列なら ${parameter} と同じでは? という質問だろ

620 :名無しさん@お腹いっぱい。:2014/03/28(金) 07:24:33.13 .net
>>619
> wordが空文字列なら ${parameter} と同じでは? という質問だろ
そういう疑問が出るってことは
${parameter:-word} 自体の意味をわかってないでしょ。

621 :名無しさん@お腹いっぱい。:2014/03/28(金) 07:30:23.60 .net
>>620
${parameter:-word} 自体の意味をわかってるからこその疑問だろ。

man見ても set -u のことはそこには書いてないからますます疑問になるはず。

622 :名無しさん@お腹いっぱい。:2014/03/28(金) 07:32:40.06 .net
>>614
ありがとうございました。変数未設定の場合の /bin/sh -u の対応ですね。

>>615 さん、それは知ってますよ。

623 :名無しさん@お腹いっぱい。:2014/03/28(金) 13:44:52.41 .net
-uの方の説明も、${parameter:-}の方までエラーになっても不思議ではない記述のような・・・

624 :名無しさん@お腹いっぱい。:2014/03/28(金) 14:15:56.73 .net
つまりシェル変数をサニタイズするわけですね!

625 :名無しさん@お腹いっぱい。:2014/03/28(金) 17:27:58.23 .net
>>set -u してる場合にエラーを回避することができる

だけど、set -u してる場合はエラーを回避しちゃ
駄目なんじゃないだろうか

626 :名無しさん@お腹いっぱい。:2014/03/28(金) 17:58:13.66 .net
>>625
おまえ、ホントに理解してない奴だな。

set -u はプログラムミスで変数名が違ってたりするのを防ぐのが狙い。
if [ -n "${file:-}" ]; then
なんかの場合は $file がセットされてないかどうか自体を条件判断してるんだから、
if文を実行して file: unbound variable なんてエラーメッセージ出されたら困るだろ。

627 :名無しさん@お腹いっぱい。:2014/03/28(金) 18:22:18.06 .net
ん? set -u って防ぐのが目的ではなくて検出する(そして人間が修正する)
のが目的なんじゃないの?

628 :名無しさん@お腹いっぱい。:2014/03/28(金) 19:00:02.16 .net
>>627
「検出する(そして人間が修正する)」のことを簡潔に「防ぐ」って言ってるんだろw アスぺかよw

629 :名無しさん@お腹いっぱい。:2014/03/28(金) 19:11:45.22 .net
>>626
お前ホントに何もわかってないのな
プログラムミスを検知するために-uしてるのに
プログラムミスを検知しないようにしてどうする
ってことだ

630 :名無しさん@お腹いっぱい。:2014/03/28(金) 19:37:00.09 .net
>>629
if [ -n "${file:-}" ]; then
の場合はそもそも set -u ではミス検出できない。
$file の状態がどちらであっても正常だから。

お前ホントに何もわかってないのな

631 :名無しさん@お腹いっぱい。:2014/03/28(金) 20:14:13.71 .net
>>628
それ、全然意味が違う

632 :名無しさん@お腹いっぱい。:2014/03/28(金) 20:16:29.56 .net
>>630
「set -u を使う事を前提とするなら」、 if [ -n "${file}" ]; then と書くべきなんじゃないか?って話

633 :名無しさん@お腹いっぱい。:2014/03/28(金) 20:54:49.04 .net
>>632
正反対。

「set -u を使う事を前提とするなら」、 if [ -n "${file:-}" ]; then と書くべき

set -u には、${file} 以外の箇所を検出させる。 $hoge とかが他の場所にある。

634 :名無しさん@お腹いっぱい。:2014/03/28(金) 20:56:38.96 .net
>>631
言葉の表面上の意味でしか捉えられないアスペ乙

635 :名無しさん@お腹いっぱい。:2014/03/28(金) 21:01:24.80 .net
>>632
Makefileで、 (コマンド || true) とかやってエラーにならないようにするのと同じようなもの。
この行だけ set -u に検出されないように "${file:-}" って書くわけ。

C言語でwarning消すためにキャストするのとも似てる。
warning消しておかないと本当のwarningが出る他の行と紛らわしいから。

636 :名無しさん@お腹いっぱい。:2014/03/28(金) 21:05:43.98 .net
>>634
「アスペ」の使い方間違ってるぞ

637 :名無しさん@お腹いっぱい。:2014/03/28(金) 21:08:00.67 .net
>>633
う〜ん、間違えて if [ -n "${flie:-}" ]; then って書いちゃったらどうするの?

638 :名無しさん@お腹いっぱい。:2014/03/28(金) 21:10:16.75 .net
>>637
そこは検出できないから仕方ない

639 :名無しさん@お腹いっぱい。:2014/03/28(金) 21:11:38.06 .net
>>635
それもよく判らないなぁ。$file が未定義なのかNULLなのか判別しないまま
スクリプトの実行を続けても構わない、ってこと?

640 :名無しさん@お腹いっぱい。:2014/03/28(金) 21:13:02.51 .net
>>638
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

641 :名無しさん@お腹いっぱい。:2014/03/28(金) 21:45:19.90 .net
その例だと分かりづらいのかも

他の例を挙げると、引数を確認する目的で

echo "arg1=${1} arg2=${2}"

と書くのを、

set -u
echo "arg1=${1:-} arg2=${2:-}"

としないといけない、とか

642 :名無しさん@お腹いっぱい。:2014/03/28(金) 22:01:46.73 .net
>>630,633,635

それだったら

file=""
:
:
if [ -n "${file}" ]; then

って書いたほうがいいんじゃない? 変数名の書き間違ちがいもチェックできるし

643 :名無しさん@お腹いっぱい。:2014/03/28(金) 23:00:21.83 .net
${xxxx:?msg}の事も思い出してあげてください。

644 :名無しさん@お腹いっぱい。:2014/03/29(土) 01:03:16.20 .net
こんな機能があるのな
いままでif連打して引数判定してたのが馬鹿馬鹿しくなってきた
三項演算子とかでググってたのがいけなかったのか

645 :名無しさん@お腹いっぱい。:2014/03/29(土) 01:15:17.92 .net
>>632>>633
どっちも正解
「set -u を使う事を前提とするなら」「空文字列判定を意図する部分では」「if [ -n "${file}" ]; then と書くべき」
「set -u を使う事を前提とするなら」「未設定の判定も意図する部分では」「if [ -n "${file:-}" ]; then と書くべき」
>>636
アスペ(もとい自閉症スペクトラム)の症状は色々な方向性がありうるから一概に間違ってるとも言えない

646 :名無しさん@お腹いっぱい。:2014/03/29(土) 02:09:20.43 .net
>>645
とはいえ、>>634 は単に「アスペ」って言いたいだけなんじゃないかと
色々な方向性がありうるとなると >>634 がアスペなのかもしれないが…

647 :名無しさん@お腹いっぱい。:2014/03/29(土) 06:59:56.80 .net
なんだよ、もっとサニタイズしろよw

648 :名無しさん@お腹いっぱい。:2014/03/29(土) 08:35:58.71 .net
そんなに悔しかったのか? エスケープ脳 w
シェルスクリプトでSQLをエスケープして見せてくれよ。

649 :名無しさん@お腹いっぱい。:2014/03/29(土) 08:44:55.13 .net
へんぴなスレで無理やり対立煽られてもなあ
困っちゃう(社交辞令

650 :名無しさん@お腹いっぱい。:2014/03/29(土) 09:02:19.23 .net
>>645
それを踏まえて >>625 を言っている。
どうも根本的にわかって奴が一人いるようだけど・・。

set -u は未設定(というミス)を検出するためにやっている。
その状況で、「この変数は未設定かもしれないけどエラーにならないようにしよう」とするぐらいなら
空文字列でも設定しておけ、ってこと。

651 :名無しさん@お腹いっぱい。:2014/03/29(土) 09:10:53.25 .net
>>650
空文字列設定するのにもう1行要る。ダサイ書き方になる。
空文字列設定すること自体が副作用になるから、それがNGの場合がある。
未設定変数は未設定のまま(空文字列も設定せずに)放置して、ifで条件判断だけしたい場合とか。

652 :名無しさん@お腹いっぱい。:2014/03/29(土) 09:13:54.84 .net
>>642
fileにすでに何か設定されてるかも知れない状態で呼び出されるスクリプトまたは関数だったら、
file='' とかやったら駄目じゃんw (ちなみに、file= だけでもOK クォート不要)

653 :名無しさん@お腹いっぱい。:2014/03/29(土) 12:53:55.37 .net
>>650
一行増えるのがダサイねぇ… 副作用が NG とか if で条件判断だけしたい
場合って具体的にはどんな場合なの?

654 :名無しさん@お腹いっぱい。:2014/03/29(土) 12:56:00.32 .net
>>653
>>652

655 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:01:32.12 .net
>>652
その前提だったら未定義かどうか調べないでいきなり if [ -n "${file:-}" ];then って
しちゃったらまずいだろって話。ああ、 >>639 に戻ったw

656 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:06:40.79 .net
>>655
その前提だからこそ未定義(空文字列含む)かどうか調べるために if [ -n "${file:-}" ];then って
してるんだろ。お前理解遅いなw

657 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:09:21.66 .net
前提:未定義と空文字列は同じとみなす
(未定義or空文字列)なのか、文字列がセットされてるのか調べたい
変数に勝手に空文字列を代入してはいけない
調べる際に、set -u された環境でもエラーにされないようにしたい

それだけのこと。簡単だねw

658 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:10:26.59 .net
>>656
ん?調べてないよ。未定義でも空文字でも false になる

659 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:11:38.13 .net
>>658
それでいいんだけど、、何勘違いしてるの、君一人?

660 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:13:22.49 .net
>>658>>657 読め。

未定義でも空文字でも false にしたい。
文字列が長さ1以上あれば true にしたい。

未定義のとき、set -u を回避したい。

661 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:13:44.48 .net
>>659
>>637

662 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:14:52.57 .net
>>661
>>638

663 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:15:54.57 .net
>>662
それじゃ set -u 使う意味ないんじゃない?

664 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:16:55.00 .net
>>661
C言語でwarning回避するためにキャストしたとき、キャスト元の方が本当に間違っていても検出できないのと同じ。そこは問題にしない。

665 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:17:47.16 .net
>>663
>>633

666 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:18:57.95 .net
>>664
いや、C言語のワーニング回避とは関係ない

667 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:20:06.55 .net
>>665
結局、放置しておいて問題ない、と

668 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:21:52.32 .net
これ、誰が暴れてるの?
外した回答叩かれた >>615 が一人で暴れてるのかな?

669 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:22:49.28 .net
そろそろ、一種の集団ヒステリーを述べる言葉、
あるいはひとつの格言を挙げておきたい

「バカは感染する」

670 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:22:58.30 .net
>>668
スマン、実は >>620-668 は全部俺の自作自演なんだ

671 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:23:52.27 .net
>>669
ああ、キミも感染したんだね

672 :名無しさん@お腹いっぱい。:2014/03/29(土) 13:31:36.21 .net
大元の >>612 で言ってる「こういう書き方をしてるスクリプト」
の全体を見てみたいものだ

673 :名無しさん@お腹いっぱい。:2014/03/29(土) 14:18:33.42 .net
話は変わるけど、set -u を使わないで変数が未定義なのかどうかを
調べるってお題があって、

undef="false"
if [ "${var-UNDEF}" = "UNDEF" ];then
 if [ "$var" = "" ];then
  undef="true"
 fi
fi

なんで空文字かどうかを調べてるんだろうって思ったら var="UNDEF" って
なってる場合に対応してたのね

674 :名無しさん@お腹いっぱい。:2014/03/29(土) 14:28:34.93 .net
>>673
変数が未定義という条件判断をするなら、

if [ -z "${var+DEF}" ]; then echo varは未定義; fi

だけで簡単に記述できるね。

675 :名無しさん@お腹いっぱい。:2014/03/29(土) 14:30:42.74 .net
>>672
set -u 回避が正解って前提で話が盛り上がってたけど
全然関係なかったりしてw

676 :名無しさん@お腹いっぱい。:2014/03/29(土) 14:34:51.56 .net
>>674
おお、素晴らしいφ(..)メモメモ

677 :名無しさん@お腹いっぱい。:2014/03/29(土) 20:36:49.57 .net
>>672
> 大元の >>612 で言ってる「こういう書き方をしてるスクリプト」
> の全体を見てみたいものだ

例えば、

$ grep -iE '\$\{[a-z]+:' /usr/sbin/mkinitramfs
if [ -n "${UMASK:-}" ]; then
if [ -z "${compress:-}" ]; then
DESTDIR="$(mktemp -d ${TMPDIR:-/var/tmp}/mkinitramfs_XXXXXX)" || exit 1
__TMPCPIOGZ="$(mktemp ${TMPDIR:-/var/tmp}/mkinitramfs-OL_XXXXXX)" || exit 1
if [ -n "${ROOT:-}" ]; then

全体は長すぎるので省略します、あしからず

678 :名無しさん@お腹いっぱい。:2014/03/29(土) 22:01:34.99 .net
mkinitramfs、-o オプションを付けないと outfile 変数は
set -u で引っ掛かってしまうのにそのままなんだな…?

if [ -z "${outfile}" ]; then
usage
fi

679 :名無しさん@お腹いっぱい。:2014/03/29(土) 22:07:19.97 .net
報告したげて。

680 :名無しさん@お腹いっぱい。:2014/04/02(水) 09:19:47.77 .net
外部プログラムにスペースを含む引数を渡したい
この引数は他の引数と一緒にシェル変数に格納される
このシェル変数名は別の変数に変数名で格納されていて
実行時にevalして実行される
試行錯誤した結果二回evalという解決策にたどり着いたけど、何かスマートじゃない。
もっとスマートな方法はある? スペースを含まないなら一回のevalで済むんだが。
argspecをevalって実行するという部分はいじれないのでそれは無しの方向で
抜粋部分はこんな感じ

echo_it() { for a; do echo $a; done; }
argspec="\$opts $DEFAULTS"

opts=
opts="$opts arg1"
opts="$opts \"arg with space\""

eval set $argspec
eval echo_it "$@"

681 :名無しさん@お腹いっぱい。:2014/04/02(水) 10:45:04.64 .net
俺なら、どこか前処理でスペースを別の使わない文字か
あるいは使われない単語に変換して、呼ばれた側で同様に変換して戻す
という方式にする
無理にスペースをエスケープするより、綺麗になることが多い

682 :名無しさん@お腹いっぱい。:2014/04/02(水) 15:23:14.11 .net
>>681 と被るけど、IFS を TAB だけにしちゃうとか
(ただし、引数にTABを含む文字列が使えなくなるけど)

opts="$opts arg1"
opts="$opts arg with space"

argspec="$opts $DEFAULTS"

OLD_IFS=$IFS; IFS=$'\t'
set -- $argspec
echo_it "$@"
IFS=$OLD_IFS

スマートかどうかは…不明

683 :名無しさん@お腹いっぱい。:2014/04/24(木) 07:08:22.64 .net
perl使えるのなら@lines=<>;とすると、行単位に配列に入るのでspliceと組み合わせれて便利かも?

684 :名無しさん@お腹いっぱい。:2014/04/24(木) 07:38:17.98 .net
awkでやりたいんだよ!

685 :名無しさん@お腹いっぱい。:2014/04/24(木) 08:00:48.93 .net
6行分のバッファを持っといて1行読むごとに6行前の行を処理すればいいんだけど、awkでどう書くかは知らない

686 :名無しさん@お腹いっぱい。:2014/04/24(木) 12:10:20.28 ID:HusksWXw2
アホさんに聞け!

687 :名無しさん@お腹いっぱい。:2014/04/24(木) 15:39:50.84 .net
{
a[NR]=$0
if (NR>6){
$0=a[NR-6]
} else {
next
}
}

ってのをスクリプトの先頭につっこんでおけばいいかな。試してないけど。でも、
>このファイルの末尾6行は不要なので、今は前処理で head -n -6 として削ってるのですが、
これでいいと思う。

688 :683:2014/04/24(木) 23:52:15.46 .net
皆さん意見ありがとうございました

6行分のバッファを、と見て、ほほーと思って途中まで実装してみましたが、
なんというか、非常によく分からないスクリプトになってきたので、やめました…

現状どおり、headで削る、でいこうと思います

689 :名無しさん@お腹いっぱい。:2014/04/25(金) 01:29:19.17 .net
>>687
入力全部配列に突っ込むなら、普通に全部読み込んでから処理した方がいいんじゃね?

690 :名無しさん@お腹いっぱい。:2014/04/25(金) 02:26:46.70 .net
a[NR%7]とa[(NR-6)%7]にすれば良いんじゃね。

691 :名無しさん@お腹いっぱい。:2014/04/25(金) 03:20:34.41 .net
$ seq 1 10 | awk 'NR > 6 {print _[NR%6]} {_[NR%6] = $0}'
1
2
3
4

692 :名無しさん@お腹いっぱい。:2014/04/25(金) 06:49:31.64 .net
リングバッファーきたー

693 :名無しさん@お腹いっぱい。:2014/04/25(金) 08:33:17.57 .net
て言うか、定番でしょ。

694 :名無しさん@お腹いっぱい。:2014/04/25(金) 08:47:19.19 .net
>>691
printしてしまわずに、そのあとの目的のawk処理につなげるにはどう書くの?
awk 2つをパイプでつないだのでは無駄なので。

695 :名無しさん@お腹いっぱい。:2014/04/25(金) 09:01:48.69 .net
687を690にして使うか、691でprintの所に処理本体を_[NR%6]使って書き直す

696 :名無しさん@お腹いっぱい。:2014/04/25(金) 09:54:31.02 .net
>>691
$0に代入直して新規行入力のつもりで処理を続行すればいい。

awk '{if(NR>6){$0=_[NR%6]}else{_[NR%6]=$0;next}} {ここにやりたい処理}'

697 :名無しさん@お腹いっぱい。:2014/04/25(金) 10:05:51.33 .net
>>696
馬鹿は書き込むな。それ全然駄目。

698 :名無しさん@お腹いっぱい。:2014/04/25(金) 16:55:01.02 .net
>>697
俺awk使えないから予想だけど、%0以外の自動更新される値が6行先になる?

699 :名無しさん@お腹いっぱい。:2014/04/25(金) 17:56:08.98 .net
GWにシェルを始めようと思ってます。
cshは古い、bshは当たり前? じゃあashか? ashより優れた sshにするか?

コンサートだとA席よりS席の方が上ですよね?

700 :名無しさん@お腹いっぱい。:2014/04/25(金) 17:59:12.63 .net
>>699
コピペ
http://toro.2ch.net/test/read.cgi/unix/1266323017/976

701 :691:2014/04/25(金) 23:22:31.10 .net
素直にhead使っとき。↓bash

$ paste <(seq 1 10) <(seq 11 20) | awk '{l = $0} NR>6 {$0 = _[NR%6]} {_[NR%6] = l} NR>6 { printf "%d + %d = %d\n", $1, $2, $1 + $2 }'
1 + 11 = 12
2 + 12 = 14
3 + 13 = 16
4 + 14 = 18

702 :名無しさん@お腹いっぱい。:2014/04/28(月) 02:44:42.99 .net
見れば見るほど、head併用が正解だな

703 :名無しさん@お腹いっぱい。:2014/04/28(月) 12:54:44.58 .net
UNIX哲学
http://ja.wikipedia.org/wiki/UNIX%E5%93%B2%E5%AD%A6
1. 小さいものは美しい。
2. 各プログラムが一つのことをうまくやるようにせよ。
3. できる限り原型(プロトタイプ)を作れ。
4. 効率よりも移植しやすさを選べ。
5. 単純なテキストファイルにデータを格納せよ。
6. ソフトウェアの効率をきみの優位さとして利用せよ。
7. 効率と移植性を高めるためにシェルスクリプトを利用せよ。
8. 束縛するインターフェースは作るな。
9. 全てのプログラムはフィルタとして振る舞うようにせよ。

704 :名無しさん@お腹いっぱい。:2014/04/28(月) 13:02:19.25 .net
>>703
板ちがい

705 :名無しさん@お腹いっぱい。:2014/04/29(火) 05:48:42.07 .net
コレに従ってればわりとハッピーなスクリプトが書けるって話だからスレにはあってると思うが。
板に至ってはUNIX板より適切な板はないだろってレベル

706 :名無しさん@お腹いっぱい。:2014/04/29(火) 06:25:19.06 .net
systemdはこれに反しまくってるな
特にjournaldなんか独自バイナリにログ入れて
journalctlでしか見れないようにしててめっちゃ不便

707 :名無しさん@お腹いっぱい。:2014/04/29(火) 08:52:18.75 .net
>>706
ほんとこれ
トラブったときのログも特定の環境でしか読めないとか氏んでほしい

708 :名無しさん@お腹いっぱい。:2014/05/05(月) 18:29:35.56 .net
>>706
マジかよクソすぎんだろsystemd

709 :名無しさん@お腹いっぱい。:2014/05/18(日) 05:09:49.37 .net
シェルスクリプトはいい加減滅びろよと思うのは私だけ?
バッチ処理ならいいけど、条件分岐が入った時点でperlなりpythonなり使えと思うんだけど

710 :名無しさん@お腹いっぱい。:2014/05/18(日) 05:30:13.26 .net
>>709
perlやpythonが入ってない(入れられない)環境もあるってことなんじゃ。
組み込み、UNIX、Linuxでもシェルさえある環境ならOK、
ってのはなかなか強力な利点じゃないかね。

711 :名無しさん@お腹いっぱい。:2014/05/18(日) 06:26:03.13 .net
>>709
ashならバージョン互換性とか気にしなくて良いんじゃないの。
置き換えられてたらpython2.7とか一生アンインストールできなくなりそう。

712 :名無しさん@お腹いっぱい。:2014/05/18(日) 08:33:26.39 .net
個人的にはperlこそいい加減滅びよと思ってるけどな

713 :名無しさん@お腹いっぱい。:2014/05/18(日) 09:07:08.76 .net
system();だらけのスクリプトとか後で読みたくないし書きたくない。 空白入りの引数の処理も面倒そう。
シェルスクリプトなら3〜4行で終わるものが、何十行にもなってる python スクリプト見たこともあるわ。

714 :名無しさん@お腹いっぱい。:2014/05/18(日) 09:19:25.75 .net
適材適所なんだしどっちかに滅びろよとか言ってる時点でどうかと思うな
何でbashで条件分岐使っちゃ駄目なのか良く分からんし
バッチ処理って単語の使い方が何か違う気がするし

715 :名無しさん@お腹いっぱい。:2014/05/18(日) 09:27:05.58 .net
bashを使ったらそれはバッチ処理ではなくてバッシュ処理だからな

716 :名無しさん@お腹いっぱい。:2014/05/18(日) 10:30:08.01 .net
つ、つまらん…

717 :名無しさん@お腹いっぱい。:2014/05/18(日) 16:55:44.52 .net
シェルの基本的なコマンドを網羅したライブラリはほしいね。
そうすれば ` ` を使わなくて済む

718 :名無しさん@お腹いっぱい。:2014/05/18(日) 16:58:20.56 .net
perlのCPANなら数は多いし大抵のことはできるんじゃないの
でもいちいちライブラリ入れるの面倒だし
仕事でサーバとか使ってると「追加ソフト入れるの禁止」
って状況はそれなりにある

719 :名無しさん@お腹いっぱい。:2014/05/18(日) 18:19:52.61 .net
知らん間に開発・検証用マシンに入ってたCPANのライブラリに依存しており、
商用じゃそのPerlスクリプトが動かんかった、という凡ミスが連発した結果、
必要なライブラリを書面で説明できないPerlスクリプトは商用適用NG、となった

720 :名無しさん@お腹いっぱい。:2014/05/18(日) 18:24:43.11 .net
自分で書いてみればperlやpythonよりシェルスクリプトの方が便利だってわかるのにな
コマンドの実行とか

721 :名無しさん@お腹いっぱい。:2014/05/19(月) 08:37:18.45 .net
適材適所


ただし、perl の適所はなくなったので、早く滅びろ

722 :名無しさん@お腹いっぱい。:2014/05/20(火) 12:54:25.01 .net
perlに親でも殺されたか

723 :名無しさん@お腹いっぱい。:2014/05/20(火) 13:11:40.74 .net
じゃ、一行野郎は何使うんだよ。

724 :名無しさん@お腹いっぱい。:2014/05/20(火) 13:20:31.01 .net
シェルスクリプトでええやん…

725 :名無しさん@お腹いっぱい。:2014/05/20(火) 17:30:45.52 .net
シェルスクリプトの意味わかってないだろ

726 :名無しさん@お腹いっぱい。:2014/05/20(火) 17:51:03.17 .net
>>723
rubyでいいんじゃない。短くかけるし。括弧言語じゃないから定義とか書くのは辛いけど、処理だけが目的なら代替手段あるだろうし。

727 :名無しさん@お腹いっぱい。:2014/05/20(火) 18:07:09.84 .net
rubyがインストールされてるサーバは、少なくとも俺の身近には存在しない。
perlが駄目だと言うのなら、次に考えるのはawkかsedだろ。常識的に考えて。

728 :名無しさん@お腹いっぱい。:2014/05/20(火) 18:08:45.41 .net
好きなの使えばええがな。

729 :名無しさん@お腹いっぱい。:2014/05/20(火) 18:14:46.31 .net
>>726
ruby()

>>727
sedでは足りないのをperl使うのだ
awkは半端だからフィールド抽出以外には使わない

結論: 一行野郎に対する代替が無いのでperlは存命

730 :名無しさん@お腹いっぱい。:2014/05/20(火) 18:17:56.34 .net
rubyがインストールされてないサーバは、少なくとも俺の身近には存在しない。
rubyが駄目だと言うのなら、次に考えるのはawkかsedだろ。常識的に考えて。

731 :名無しさん@お腹いっぱい。:2014/05/20(火) 18:33:31.84 .net
ていうかperlを存命させるかどうかってのはそのOS、ディストリのコアな部分からそれを排除できるかの問題だろ。
rubyは入れる物を多少選べば排除できるが、perlへの依存を全て排除するのは無理ではないが結構面倒だろう。

732 :名無しさん@お腹いっぱい。:2014/05/20(火) 18:54:13.54 .net
ここ何のスレだっけ。

733 :名無しさん@お腹いっぱい。:2014/05/20(火) 19:05:06.07 .net
rubyとperlを罵倒しながら気分転換にシェルスクリプトの話をするスレ

734 :名無しさん@お腹いっぱい。:2014/05/20(火) 19:29:20.61 .net
自分で環境作れないとこで、長々とワンライナー書くこともあまりない気がするけどなぁ。運用の人は書くのかな。
ビルトインとsedとawkで大抵こと足りるからな。perl使うのに多いのはライブラリ使いたい時とか。
でもそうするとpythonやrubyの方が最近のものがある気がする。pmとかまだ作られてるの?

735 :名無しさん@お腹いっぱい。:2014/05/21(水) 00:06:27.58 .net
>>729
一行野郎と言えば「awkは書かねぇ、たった一行」だろ?

736 :名無しさん@お腹いっぱい。:2014/05/21(水) 03:32:28.76 .net
うちのdebianにはperlとpythonは入ってるがphpとかrubyは入ってない

737 :名無しさん@お腹いっぱい。:2014/05/21(水) 05:00:52.02 .net
Windowsですらtexと一緒にperl/awk/sed/grep辺りが住んでたりするな

738 :名無しさん@お腹いっぱい。:2014/05/21(水) 08:41:33.68 .net
入ってないっていうか入れてないんだろ。

739 :名無しさん@お腹いっぱい。:2014/05/21(水) 08:47:53.28 .net
>>730
rubyを入れなくても何にも困ってない rails?()
perlを入れてないとコンパイルできないものが結構ある(PostgreSQLとか)

ruby信者の視野狭窄は異常

740 :名無しさん@お腹いっぱい。:2014/05/21(水) 09:18:31.41 .net
rubyで書く奴のおかげでrubyからpythonへの書き換えで飯が食えるとかなんとかw

741 :名無しさん@お腹いっぱい。:2014/05/21(水) 09:41:02.86 .net
>>739
コンパイルの依存関係にperl入れるのは辞めてほしい

742 :名無しさん@お腹いっぱい。:2014/05/21(水) 10:01:39.33 .net
>>741
autotoolsに依存するより全然まし

743 :名無しさん@お腹いっぱい。:2014/05/21(水) 10:02:56.58 .net
やっぱxmkmfだよなw

744 :名無しさん@お腹いっぱい。:2014/05/21(水) 17:28:29.71 .net
>>739>>741
コンパイルの依存関係にrubyやpythonが入るより少しはマシ
って言おうかと思ったけど自分の遭遇トラブルはperl依存モノの方が多かったorz

>>742
コンパイル省力化に高機能なツールや言語を使い出して、
今度はそっちの互換性問題が火を噴くとか本末転倒にもホドがある…

最小限のシェルスクリプトかMakefileで済む奴が一番気楽だわ

745 :名無しさん@お腹いっぱい。:2014/05/21(水) 17:39:42.30 .net
> って言おうかと思ったけど自分の遭遇トラブルはperl依存モノの方が多かったorz
その分野ではrubyやpythonは使われてないからだろ。特にrubyは日本限定末端土方専用だから。
使われてなきゃトラブルには遭遇しない。当たり前だ。

746 :名無しさん@お腹いっぱい。:2014/05/21(水) 17:42:51.81 .net
FreeBSDのperl依存地獄は凄いからな
perlのアップデートとかなったら阿鼻叫喚の渦
あと何かのプロジェクトで頑張ってperl依存をなくしたってニュースになったな

perlは撲滅すべき悪ではあるがまだ依存関係から取り除けてない害虫みたいなもんなんだろう

747 :名無しさん@お腹いっぱい。:2014/05/21(水) 18:01:29.51 .net
>>743
お、懐かしいね。Canna じゃまだ使われているのかな?

748 :名無しさん@お腹いっぱい。:2014/05/21(水) 18:15:59.05 .net
そういや Perl で one liner って使わなくなったな…
昔はこんなのを↓よくやってたけどね

$ perl -pi.bak -e 's:#!/usr/bin/perl:#!/usr/local/bin/perl:' *.pl

最近使ったのは…Run Length Encoding かな

$ echo '......' | perl -pe 's/(.)(\1+)/$1.(length($2)+1)/ge'

RLEって sed や awk, UNIX tools を組み合わせて one liner でできるのかな…

749 :名無しさん@お腹いっぱい。:2014/05/21(水) 18:35:56.58 .net
>>746
お察しの通りFreeBSDだが、FreeBSDは脱GPL脱GCCの実績が有るし今後に期待?

750 :名無しさん@お腹いっぱい。:2014/05/21(水) 20:41:31.00 .net
>>748
http://rosettacode.org/wiki/Run-length_encoding
ぐぐったらsed版とawk版があるな
つーかrun length encodingって必要になった状況ないな

751 :名無しさん@お腹いっぱい。:2014/05/22(木) 00:16:14.56 .net
RELENG_5あたりでbaseからは脱Perlしてるじゃねえの

752 :名無しさん@お腹いっぱい。:2014/05/22(木) 09:09:18.24 .net
確かに今では base に perl が含まれてはいませんが、実際に perl を入れずに
運用しているサーバを私は見たことがありません。
でも perl が入ってないサーバって、実は世の中には結構あるんですかね?

753 :名無しさん@お腹いっぱい。:2014/05/22(木) 09:30:02.07 .net
>>752
じょ、冗談で書いてるんだよね?

754 :名無しさん@お腹いっぱい。:2014/05/22(木) 10:12:42.49 .net
>>753
というと?

755 :名無しさん@お腹いっぱい。:2014/05/22(木) 12:16:17.56 .net
perlなんて当然入れてない

756 :名無しさん@お腹いっぱい。:2014/05/22(木) 12:20:57.50 .net
元からperlなんて入っていないし、要らない。
必要なら入れれば?な感じ。

757 :名無しさん@お腹いっぱい。:2014/05/22(木) 15:33:22.17 .net
Debian wheezyの標準的なapt-lineで、各言語に依存するものの数を数えた。
その言語自身のセクションと、libsは除いてみた。
$ for l in perl python ruby ;do echo -n "$l ";aptitude search ~D$l\!~s$l\!~slibs|wc -l;done
perl 962
python 1603
ruby 204

758 :名無しさん@お腹いっぱい。:2014/05/22(木) 15:41:24.61 .net
今日からperlやめてnode.jsに移行してみる

759 :名無しさん@お腹いっぱい。:2014/05/22(木) 21:37:53.41 .net
>>758
それでタイプ量の多さに失望するんですね。

760 :名無しさん@お腹いっぱい。:2014/05/23(金) 05:06:01.84 .net
function(){}function(){}function(){}…
そしてCoffeeScriptに流れる、とか?

761 :名無しさん@お腹いっぱい。:2014/05/23(金) 08:45:08.50 .net
そうやってまた時間資源を浪費して無駄なコードが(略)

762 :名無しさん@お腹いっぱい。:2014/05/24(土) 21:11:49.14 .net
「〜に依存する」だけならそれ入れれば済む話だが、
「auto」toolsはマニュアルで修正しないとコンパイル通らない場合が…

763 :名無しさん@お腹いっぱい。:2014/05/24(土) 21:55:46.18 .net
修正マニュアルがあるならいいじゃないかw

764 :名無しさん@お腹いっぱい。:2014/05/25(日) 14:19:48.29 .net
マニュアル=手作業 とマジレス

765 :名無しさん@お腹いっぱい。:2014/05/29(木) 00:34:01.91 .net
FreeBSDが脱cshできればperlもしぼんでくと思う。だからまずしぼまない。

766 :名無しさん@お腹いっぱい。:2014/05/29(木) 17:22:41.57 .net
いや、src.confでコンパイルしないようにするだけ。
もう、何年も前からcshは入ってないが何も不都合は生じてない

767 :名無しさん@お腹いっぱい。:2014/06/07(土) 16:19:13.77 .net
数百万行のテキストをshのツールに食わせて実行結果を得る、なんてことをよくやるんだが、
プログレスバーを作って待ち時間のストレスを抑えようと思う
今何%進んでるかは実行行/全体行で簡単に分かるんだが、これを画面上に出力する時に、
単純に計算結果を出力するだけだと
 [05%]・・・・・
 [06%]・・・・・・
 [07%]・・・・・・・
という風に毎回改行されて表示されて画面が汚くなるのが嫌だ

つまり何が聞きたいかというと、既に出力された結果を書き換えるような仕組みはshで実現可能なのだろうか
分かりにくくてすまない

768 :名無しさん@お腹いっぱい。:2014/06/07(土) 16:20:12.71 .net
>>767
^M

769 :名無しさん@お腹いっぱい。:2014/06/07(土) 16:26:43.02 .net
^M のあと tput el しとくといいかも

770 :名無しさん@お腹いっぱい。:2014/06/07(土) 16:34:33.53 .net
tputってFreeBSDで互換性ないんだよなぁ、、

771 :名無しさん@お腹いっぱい。:2014/06/07(土) 16:57:46.03 .net
echo のオプションとか printf とかは?

772 :名無しさん@お腹いっぱい。:2014/06/07(土) 17:01:08.23 .net
>>768-769
ありがとう。tputを初めて知ったが、勉強してみる
しかし^Mがわからん。何のことだ

>>771
echo -nで改行無し出力は出来るから、いわゆる伸びていく棒は再現出来た
が、すでに出力したn%のnを書き換えるような操作が出来ない
printfはそういうの出来るんだろうか?

773 :名無しさん@お腹いっぱい。:2014/06/07(土) 17:17:09.83 .net
>>772
コントロール-Mを知らんのか? キャリッジリターンだぞ。カーソルは左端に戻る。

774 :名無しさん@お腹いっぱい。:2014/06/07(土) 17:23:46.19 .net
マジかよ
いや^MがCtrl-Mなのは知ってたけどそんな効果あったのか
次会社いったら試してみる、ありがとう

ついでに調べてたら、某ブログでecho "\r\c"なるものを目撃した
これも同じ意味かな

775 :名無しさん@お腹いっぱい。:2014/06/07(土) 17:34:07.91 .net
>>774
もしNetBSDならprogress(1)に逃げるって手もある

776 :名無しさん@お腹いっぱい。:2014/06/07(土) 17:47:05.14 .net
echoはポータビリティに難があるのでprintfの方が良い

777 :名無しさん@お腹いっぱい。:2014/06/07(土) 17:49:02.97 .net
printfもポータビリティに難があるが、、

778 :名無しさん@お腹いっぱい。:2014/06/07(土) 20:29:23.80 .net
dialog --gauge もある

779 :名無しさん@お腹いっぱい。:2014/06/07(土) 20:46:07.95 .net
>>770
FreeBSDがどうのというより、termcapとterminfoの違い。

780 :名無しさん@お腹いっぱい。:2014/06/07(土) 20:47:59.07 .net
>>779
そんなことわかった上で言ってるんだがw

781 :名無しさん@お腹いっぱい。:2014/06/08(日) 00:08:18.41 .net
rで行頭からかくか、エスケープシーケンスでいいんじないかな。
ただ、ログのこと考えると、ただ延びていくだけのプログレスで十分だと思うけどなー

782 :名無しさん@お腹いっぱい。:2014/06/08(日) 01:23:49.35 .net
URL1=...
URL2=...
URL3=...

と定義して
for ((i=1;3>i;i++))
do
 処理
done

の形で $URL$i と書いても URL1 などに展開されないのだが
正しくはどう書けばよいのでしょうか?

783 :名無しさん@お腹いっぱい。:2014/06/08(日) 02:03:50.42 .net
eval echo '$'URL$i

eval url='$'URL$i
echo $url

784 :名無しさん@お腹いっぱい。:2014/06/08(日) 02:38:49.86 .net
配列にしちゃうとか。

declare -a URL
URL[1]=...
URL[2]=...
URL[3]=...

for ((i=1;4>i;i++))
do
 echo ${URL[$i]}
done

785 :名無しさん@お腹いっぱい。:2014/06/08(日) 02:48:13.36 .net
>>767
数値とプログレスバーと両方あるといいね。rpm -ivh みたいに。
sun wsのブート時みたいに棒を回すのもなかなかいいよ

786 :名無しさん@お腹いっぱい。:2014/06/08(日) 02:58:19.85 .net
i<3 にしよう

787 :名無しさん@お腹いっぱい。:2014/06/08(日) 03:04:42.61 .net
シンタックスエラーでなかなか回答遅れて申し訳なかったです
とりあえず暫定的に下のforループでしのぎました。
数が多くなると保守性が終わるけど。

for i in $URL1 $URL2 $URL3
do
......
done


>>783,784,786
文字連結のための''を使った回避術、
declareを使った配列宣言、
いいアイデアをいただきました。ありがとうございます。

788 :名無しさん@お腹いっぱい。:2014/06/08(日) 07:08:45.79 .net
棒回しいいなー
上書き方法会得したらそれも試してみよう

789 :名無しさん@お腹いっぱい。:2014/06/08(日) 07:47:05.10 .net
while :; do
 for t in '|\r' '/\r' '-\r' '\\\r'; do
  echo -en "$t"
  sleep 0.1
 done
done

790 :名無しさん@お腹いっぱい。:2014/06/08(日) 16:28:53.32 .net
何かと思ったら棒回しか
\\がうまくいきゃいいが

791 :787:2014/06/08(日) 17:36:41.96 .net
>>784
配列良いね
素晴らしく短くまとまった
保守性もばっちりだ
重ね重ね感謝申し上げる

URL=( \
#valiant
  http://m...
#watchSomething
  http://j...
#script
  http://b...
)

# download from URL, and add header
for ((i=0;i<3;i++))
do
 echo ${URL[i]}
done

792 :名無しさん@お腹いっぱい。:2014/06/08(日) 17:42:21.90 .net
3から不変ならいいんだが、配列にするならこうしてみるのはどうか

for ((i=0; i<${#URL[*]}; i++))
do
 echo ${URL[i]}
done

手元に実行環境がなくて検証出来ないから間違ってたらスマン

793 :名無しさん@お腹いっぱい。:2014/06/08(日) 17:53:32.13 .net
>>792
ありがとう。
httpで件数だけ埋め込む作業要らなくなった

${#配列名[*]}で取り出せるのか
こんな#が合ったなんて知らなかったよ

794 :名無しさん@お腹いっぱい。:2014/06/08(日) 21:41:28.47 .net
テンポラリファイルの扱いについて訊きたい

一部のファイルをrmしてないバグがあるスクリプトを走らせてしまい/tmpに多数ファイルを残してしまった
このようなミスを抑える対策とかありますか

795 :名無しさん@お腹いっぱい。:2014/06/08(日) 21:45:16.18 .net
>>794
入力、処理、出力、という流れを意識して、設計書を書き、
ポイントポイントで処理の目的に即したテスト項目を作って、
結果を他人が評価できるようにテストを実施することだよ

796 :名無しさん@お腹いっぱい。:2014/06/08(日) 22:51:32.33 .net
>>794
シェルスクリプト一般だと、tmpfile(3)みたいにプログラムが終わると勝手に消える
ようにするのは難しいだろうね。頑張れば出来るかもしれないけど・・。

一時ファイルというと、とりあえずファイル名に$$を入れたりすることが多いけど、
そういうのを含めない(可能なら固定名にする)のが、バグがあっても
悲惨なこと(/tmpが枯渇するなど)にならない設計方法のひとつ。
もちろん可能な場合だけど

797 :名無しさん@お腹いっぱい。:2014/06/08(日) 23:43:54.83 .net
>>794
オブジェクト指向で設計し、インスタンスの寿命が尽きる時にファイルが消去されてることを確認し、されていなければ破棄する。
サポートされていない言語だと例外時に忘れがちなので注意。

798 :名無しさん@お腹いっぱい。:2014/06/08(日) 23:53:29.64 .net
開始時に mkdir /tmp/アプリ名-プロセス番号/ してそこに作業ファイルを置いて、終了時に
rm -f /tmp/アプリ名-プロセス番号 すれば良いだけでは?
trap 使えば SIGTERM とか SIGINT にも対応できるし、bash なら終了時にキックもできる。

複数インスタンスの稼働を想定しないなら >>796 の言うように名前固定して、既存ファイルが
ある場合にエラーでとまるようにするとかもアリかな。

799 :名無しさん@お腹いっぱい。:2014/06/09(月) 00:03:28.76 .net
小手先の対応で何とかするよりも、ちゃんとテストする方がよかろうよ

800 :>>794:2014/06/09(月) 00:26:53.38 .net
>>795-799
チェック漏れがこんなことになるとはなあ
/mntにはtempfsをマウントしていないから簡単には使い切れないのが幸いだった

tempfileとrmをループ外へ追い出してみるのと、こんな感じで一時ファイルの場所の移動を試してみます
export TMPDIR=$(mktemp -d)
trap "rm -rf $TMPDIR" EXIT

>>797
言葉足らずで申し訳ない。問題のスクリプはzshスクリプトです

801 :名無しさん@お腹いっぱい。:2014/06/09(月) 00:57:13.18 .net
>>797はからかってるか、マジボケかのどっちかだろうよ

802 :名無しさん@お腹いっぱい。:2014/06/09(月) 02:38:45.23 .net
trap "command" EXIT
なんて用法があったのか。やはりこのスレは勉強になる

803 :名無しさん@お腹いっぱい。:2014/06/09(月) 11:27:14.45 .net
>>801
実装ミスであるなら、どんな仕組みを使っても同じ。
設計手法はそういったミスを抑えるためにもある。
そして設計ミスが生まれる。

おそらくは例外時だろうけど、具体的なバグを聞かないと実装による対処方法は確定しない。

804 :名無しさん@お腹いっぱい。:2014/06/09(月) 11:33:19.20 .net
それより一時ファイルを作らない方法でシェルスクリプトを記述するのがいいよ。
パイプやコマンド置換でかなりのところまで行ける。
どうしても一時ファイルが要る場合でも、openしたまま先にrmしとくとかでかなり対処できる。
trap 'rm file' 0 とかで消すのはkill -9 された場合は無理だし。

805 :名無しさん@お腹いっぱい。:2014/06/09(月) 13:22:45.34 .net
トラップ一家物語

806 :名無しさん@お腹いっぱい。:2014/06/09(月) 15:57:02.71 .net
Cでオブジェクト指向っぽい事するのは例があるけど、
シェルスクリプトでやるのは労力に見合うのだろうか…

807 :名無しさん@お腹いっぱい。:2014/06/09(月) 16:03:28.20 .net
Perlのblessされたスカラのリファレンスのようなもの?

808 :名無しさん@お腹いっぱい。:2014/06/09(月) 16:39:23.19 .net
そもそも構造体がないからねえ

809 :名無しさん@お腹いっぱい。:2014/06/09(月) 20:29:57.19 .net
そんなのより関数作るのが先だろ

810 :名無しさん@お腹いっぱい。:2014/06/09(月) 23:23:09.12 .net
HEADER
AA(55)
AA(20)
FOOTER
となっているファイルを食わせて、
HEADER
AA(11)
AA(4)
FOOTER
を吐かせたい。
つまり()内の数値を5で割ったものを吐かせたいんだが、これをshでやるとしたらどういうやり方する?
試しにsed噛ませようと試みたけどあれ演算するのすごいめんどくさそうで

811 :名無しさん@お腹いっぱい。:2014/06/09(月) 23:39:14.15 .net
つawk

812 :名無しさん@お腹いっぱい。:2014/06/09(月) 23:41:42.95 .net
$ expr "AA(55)" : ".*(\([[:digit:]]\+\)).*"
55
$ echo $((55/5))
11
$

813 :名無しさん@お腹いっぱい。:2014/06/10(火) 00:06:17.61 .net
IFS=
sed -e 's/\$/\\$/' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' | while read l; do eval echo "\"$l\"";done

814 :名無しさん@お腹いっぱい。:2014/06/10(火) 00:24:48.89 .net
sedの中で$((\1/5))なんて出来るのか?

815 :名無しさん@お腹いっぱい。:2014/06/10(火) 00:55:00.72 .net
出来ないね。でも>>813は要求仕様通りに動作する。

816 :名無しさん@お腹いっぱい。:2014/06/10(火) 01:23:49.76 .net
$$(expr 式)

817 :名無しさん@お腹いっぱい。:2014/06/10(火) 09:08:48.05 .net
>>814
sedにshスクリプトを書かせてるわけだね。

818 :名無しさん@お腹いっぱい。:2014/06/10(火) 10:03:19.34 .net
今時の sh は bash か ksh93 が標準なのか…

819 :名無しさん@お腹いっぱい。:2014/06/10(火) 10:44:55.16 .net
>>816
sed -e 's/\([$`]\)/\\\\\1/g' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' -e 's/^/"/'
-e 's/$/"/'|while read l; do eval echo "$l";done

>>818
$((expr))のこといってるならposix shellだよ
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html

820 :818:2014/06/10(火) 12:11:58.44 .net
>>819
Solaris8 や HP-UX10 あたりの sh は演算置換できなかった覚えがあるんだけど、
便利になったなあ…

821 :名無しさん@お腹いっぱい。:2014/06/10(火) 12:15:49.48 .net
何に準拠してるかではなく、スクリプトを書かせてる発想が大事であって、自分の環境で動かなかったら書き換えればいいだけ。

822 :810:2014/06/10(火) 12:29:01.86 .net
おお……すごいな
自分の発想が貧困だったことを思い知らされる
ありがとう

823 :名無しさん@お腹いっぱい。:2014/06/10(火) 14:09:06.28 .net
eval使うほどの案件じゃない

824 :名無しさん@お腹いっぱい。:2014/06/10(火) 14:28:20.32 .net
威張るな

825 :名無しさん@お腹いっぱい。:2014/06/10(火) 14:32:11.80 .net
eval使わずに、$((xx)) も使わずに:

while IFS='()' read a b; do
if [ "$b" ]; then
echo "$a(`expr $b / 5`)"
else
echo "$a"
fi
done

826 :名無しさん@お腹いっぱい。:2014/06/10(火) 14:53:54.80 .net
>>825
AA(55) や AA(20) の行末に何か文字が入ってしまうとエラーになる
>>819 なら "AA(20) BB(100) CC(65)" とかになっていてもOK

827 :名無しさん@お腹いっぱい。:2014/06/10(火) 14:56:24.36 .net
>>826
そんなことわかった上で、要求仕様だけ満たす最小限で書いているのだよ。

828 :名無しさん@お腹いっぱい。:2014/06/10(火) 14:58:01.83 .net
悔しいのぅ〜悔しいのぅ〜

829 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:05:19.71 .net
>>826
>>819 は入力に " が1個とか(奇数個)含まれてるとエラーになるぞ。
>>825 ならOK

830 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:08:54.44 .net
ほらよ
sed -e 's/\(["$`]\)/\\\\\1/g' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' -e 's/^/"/'
-e 's/$/"/'|while read l; do eval echo "$l";done

831 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:12:08.71 .net
う〜〜ん、A("55") だったりすると >>825 はエラーになるね
>>819 はそのまま出力される…仕様外だからしょうがないのかもしれない

832 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:13:25.19 .net
>>830
お見事

833 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:13:41.98 .net
>>830
入力行中に半角¥があると消えちゃうねw

834 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:15:51.89 .net
素直にこうじゃいかんの?

while read line; do
case "$line" in
AA\(*\)) echo AA\(`expr "$line" : 'AA(\(.*\))' / 5`\) ;;
*) echo "$line" ;;
esac
done

835 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:18:07.96 .net
>>834
AA() の AAは固定という解釈か? BB() とかないの?

836 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:20:27.44 .net
>>835
対応は簡単だけど、要求使用外だから別料金

837 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:25:43.37 .net
\は厄介だな

IFS=
sed -e 's/\\/!!!rougue_monster!!!/g' -e 's/\(["$`]\)/\\\\\1/g' -e 's!\(([0-9][0-9]*)\)!(\$((\1/5)))!g' -e 's/^/"/' -e 's/$/"/' |while read l; do eval echo "$l";done | sed -e 's/!!!rougue_monster!!!/\\/g'

838 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:28:31.93 .net
>>833
>>825 でも "\AA(55)" とかのバックスラッシュは消えちゃうんじゃない
まぁ、バックスラッシュを保存したかったら入力側で "\\\AA(55)" とかして
おけば良いような

839 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:33:12.06 .net
>>838
>>825 は read を read -r にすればバックスラッシュ保存されるよ。

840 :名無しさん@お腹いっぱい。:2014/06/10(火) 15:36:44.33 .net
そうすると今度は "AA(\55)" が…いや、仕様外だな

841 :白バラ十字軍:2014/06/10(火) 15:41:26.82 .net
今では殺人事件凶悪事件が起こると創価員かというぐらい
ネットではささやかれる時代になりました。刑務所受刑者の33%は創価員という事実は有名な話ですが、以下を見れば納得ができます

創価員が裁かれる    判決の際 法廷にこだまする「 池 田 先 生 万 歳 !」
◎以下これ以外にまだまだ創価員の犯罪多数あり、書類送検されていないだけであなたの街でも多数すさまじい事件の数が
発生しましたし、まだまだ毎日のように創価員による凶悪事件は発生しているのです!
しかもこれ以外にもTVでも報道された凶悪事件多数あり!。あなたの周りにも潜んでいる。
危険です。危機的状況です。酒鬼薔薇だけではありません。実にたくさんいるのです
あなたの街でも善良な人間のように取り繕い潜んでいるのです。

●宅間守(在日)→大阪 附属池田小学校児童殺傷 創価学会員。大量殺人犯 。8人殺害 15人が重軽傷。悪徳 朝鮮人部落出身。
(悪徳カルト)両親も創価学会員。獄中結婚したが相手の女も創価員。さすが創価員は悪徳な者を好む。あえて結婚する
とは殺人破壊者を賛美、美化、擁護する行為 2004年死刑執行 獄中結婚した女は慰謝料損害賠償払ったのか?被害者に詫びたのか?
宅間は被害者に詫びていない。つまり・・・判決の際 法廷にこだまする「 池 田 先 生 万 歳 !」ということ
日本の犯罪史上、稀に見る大事件
●畠山鈴香 (在日)→秋田県児童連続殺害事件 創価学会員。悪徳。(悪徳カルト)
●斉藤勇太 →JR取手駅前バス無差別殺傷事件 創価学会員。悪徳。(悪徳カルト)
●酒鬼薔薇聖斗→ 東慎一郎(在日)神戸の首切り魔で酒鬼薔薇聖斗 創価学会員。神戸の首切り魔。生首を校門に飾る。悪徳2人殺害。
元在日朝鮮人。両親も創価学会員(悪徳カルト)
●福田孝行(在日)→山口県母子殺害 殺害後屍姦、乳児も殺害 創価学会員。悪徳(悪徳カルト)
●阿部隆 →長野母子バラバラ殺人事件(平成元年)船橋市幼児バラバラ殺人事件 千葉県船橋市の熱心な創価学会員・A・A子さんと長男
のHちゃんが、同じく学会員である夫のA・Tに殺された。動機は生活苦。バラバラにされた死体が聖教新聞に包まれ、長野県の山中に捨
てられていた 悪徳(悪徳カルト)

842 :名無しさん@お腹いっぱい。:2014/06/10(火) 17:33:57.23 .net
お前らこういう問題好きすぎだろww
分かるけどさ

843 :名無しさん@お腹いっぱい。:2014/06/10(火) 18:07:53.19 .net
そういやオライリーから「Data Science at the Command Line」って本が
8月に出版されるそうな

http://www.oreilly.com/pub/e/3115
https://twitter.com/jeroenhjanssens/status/474948853284999168/photo/1

844 :名無しさん@お腹いっぱい。:2014/06/10(火) 18:10:14.13 .net
>>843
あくまでコマンドラインで操作するってだけで
シェルスクリプト関係なさそう
つーかこういうツールって大抵CLIだからわざわざタイトルに書かなくてもいいような

845 :名無しさん@お腹いっぱい。:2014/06/10(火) 20:07:24.97 .net
素直にperlでいいじゃんと思った俺は負け組か。。。

846 :名無しさん@お腹いっぱい。:2014/06/10(火) 23:27:05.36 .net
>>845
しかも Perl のワンライナーの方が速いっていう

847 :名無しさん@お腹いっぱい。:2014/06/10(火) 23:31:05.39 .net
せやろか?

848 :名無しさん@お腹いっぱい。:2014/06/11(水) 00:19:36.58 .net
速さより早さ。

849 :名無しさん@お腹いっぱい。:2014/06/11(水) 01:24:39.28 .net
早さより可読性
っていうのはスレ違いかな

850 :名無しさん@お腹いっぱい。:2014/06/11(水) 01:57:36.02 .net
>>844
関係なさそうどころか、普通にIPythonとR使いますって書いてある

851 :名無しさん@お腹いっぱい。:2014/06/11(水) 02:18:03.96 .net
男は度胸!何でもためしてみるのさ

852 :名無しさん@お腹いっぱい。:2014/06/13(金) 01:19:21.92 .net
問:下記のようなテキストファイルがある
>__BEGIN__
>NAME:xxx
>...
>STYLE:yyy
>...
>__END__
>__BEGIN__
>NAME:aaa
>...
>STYLE:bbb
>...
>STYLE:ccc
>...
>__END__
>__BEGIN__
>..
BEGIN-END間を1ブロックとして、1ブロック内にNAMEが1つ、STYLEが1つ以上。
1ブロックの情報を「NAME:STYLE,STYLE,,,,」というように1行にまとめて整形するようなスクリプトを考える。
全行数が数百万行、ブロック数は数千ほどあるとして、現実的実行時間で収まる事。
__BEGIN__は最初の1つ以外はすべて__END__の直後にあるとし、NAMEは__BEGIN__の直後に出現、STYLEの位置はブロック毎に異なるとする。
暇潰しにどうぞ

853 :名無しさん@お腹いっぱい。:2014/06/13(金) 02:05:55.88 .net
>>852
sedでいらない行消してNで適当にくっつけて改行を,に変えてちょっと整形すればいいんじゃね?

854 :名無しさん@お腹いっぱい。:2014/06/13(金) 08:51:41.06 .net
BEGIN{FS=":"}
$1=="NAME"{n=$2}
$1=="STYLE"{s=s$2","}
$0=="__END__"{sub(/,$/,s);print n":"s;s=""}

855 :名無しさん@お腹いっぱい。:2014/06/13(金) 11:30:59.14 .net
awkすげぇな……

856 :名無しさん@お腹いっぱい。:2014/06/13(金) 14:16:24.79 .net
うーん、もっとコンパクトに書きたい……
egrep '^(NAME:.*|STYLE:.*|__END__)$' | sed -E -e :begin -e N -e 's/\n__END__$/&/' -e tend -e bbegin -e :end -e 's/^NAME://' -e 's/\nSTYLE:/:/' -e 's/\nSTYLE:/,/g' -e 's/\n__END__$//'

857 :名無しさん@お腹いっぱい。:2014/06/13(金) 15:32:01.10 .net
egrepなくして冗長も減らしてみた
sed -e 's/^__BEGIN__$//' -e :B -e N -e 's/\nNAME://' -e 's/\nSTYLE:/,/' -e tB -e 's/\n__END__$//' -e tE -e 's/\n.*//' -e bB -e :E -e 's/,/:/'

858 :名無しさん@お腹いっぱい。:2014/06/13(金) 17:39:23.28 .net
856だとメモリ詰め込みまくりでなんだかなぁって思ったけど、
857だとうまくいきそうだな
実行時間どんなもんやろか

859 :名無しさん@お腹いっぱい。:2014/06/15(日) 02:37:40.63 .net
>>857もすごいが、個人的には>>854が好きだな
必要最低限のことしかしてない感じと可読性の高さが気に入った
何より仕様変更に強そう

860 :名無しさん@お腹いっぱい。:2014/06/15(日) 03:32:55.22 .net
alias でもなく pushd/popd でもなくて、もっと簡単にディレクトリを登録して呼び出せるような方法ってないですかね?ブックマーク(?)みたいに
ただし bash 限定で

861 :名無しさん@お腹いっぱい。:2014/06/15(日) 04:10:21.09 .net
symlinkでいくね?

862 :名無しさん@お腹いっぱい。:2014/06/15(日) 04:23:17.30 .net
aliasで十分すぎるぐらい簡単な気がするんだが……

863 :名無しさん@お腹いっぱい。:2014/06/15(日) 09:26:22.48 .net
>>860
Apparix とか
http://micans.org/apparix/

864 :名無しさん@お腹いっぱい。:2014/06/15(日) 18:39:14.24 .net
シェル勉強中だがesacみて吐き気がした
fiはfinish ifか何かの遊び心としてもこれはちょっと……

865 :名無しさん@お腹いっぱい。:2014/06/15(日) 18:42:20.05 .net
この程度で吐き気してたら先が思いやられるね

for … rof
while … elihw

とかも出てくるから慣れようねw

866 :名無しさん@お腹いっぱい。:2014/06/15(日) 18:50:25.87 .net
あ.そう

867 :名無しさん@お腹いっぱい。:2014/06/15(日) 20:45:19.15 .net
od が無ければ、algol にならって、do list; od だったのだろうか。

868 :名無しさん@お腹いっぱい。:2014/06/15(日) 21:41:52.54 .net
if .. fi や case ... esac のようなのと
do .. done がごっちゃになってるのは美しくない!
みたいなこと言ってる人見たことあるけど割とどーでもいいな

869 :名無しさん@お腹いっぱい。:2014/06/15(日) 22:25:33.36 .net
do .. done系は全部ループやしそれ以外は反転ってルールにしたんだろうね

870 :名無しさん@お腹いっぱい。:2014/06/15(日) 23:52:31.71 .net
esacは確かにキモいがだからと言ってendcaseとかやられてもうーん

871 :名無しさん@お腹いっぱい。:2014/06/16(月) 01:57:14.37 .net
シェルスクリプトに何を求めて勉強してんだ。

872 :名無しさん@お腹いっぱい。:2014/06/16(月) 12:54:05.03 .net
esacが嫌な人はCシェル使えばいいと思うよ

873 :名無しさん@お腹いっぱい。:2014/06/17(火) 12:58:22.00 .net
>>854のawk
最後のsub(/,$/,s);ってsub(/,$/,,s);の書き間違いかなと思うんだが

874 :名無しさん@お腹いっぱい。:2014/06/18(水) 22:51:23.12 .net
sub(/,$/,,s)じゃなくてsub(/,$/,"",s)か
勘違いだったらハズカシィ

875 :名無しさん@お腹いっぱい。:2014/06/19(木) 15:04:38.00 .net
セミコロンで区切るのだってキモいだろ
esacとたいして変わらん

876 :名無しさん@お腹いっぱい。:2014/06/19(木) 15:38:27.70 .net
C言語から学び始めた俺にとっては至極自然
とはいえサブシェルを{}で開くと違和感バリバリだが

877 :名無しさん@お腹いっぱい。:2014/06/19(木) 15:41:14.67 .net
>>876
サブシェルは () だぞ。{ ;} は同じシェルの単なるグルーピング。

キモいと言ってるのはcase(switch)文をbreakする仕組み自体のことじゃなく、
そのbreakを ;; という記号で表すことについて言ってるんだけど。

878 :名無しさん@お腹いっぱい。:2014/06/19(木) 15:43:46.40 .net
改行の代わりにコマンドを ; で区切る話じゃないのか?

879 :876:2014/06/19(木) 15:50:23.77 .net
すまん>>878のつもりでセミコロンの話解釈してたけどcaseの中身の話か
確かにありゃキモいな
そしてサブシェル勘違いorz

880 :名無しさん@お腹いっぱい。:2014/06/19(木) 16:26:09.26 .net
findの-execのセミコロン「ゆ…許された」

881 :名無しさん@お腹いっぱい。:2014/06/19(木) 16:29:05.11 .net
esacも;;も気にならんけど、(と対称にならないcaseのパターン指定はダメだ。

882 :名無しさん@お腹いっぱい。:2014/06/19(木) 16:37:30.82 .net
bashだと、
case $var in (hoge) echo hoge;; esac
とか書けるんだ。

883 :名無しさん@お腹いっぱい。:2014/06/20(金) 11:06:41.11 ID:fZxst1XVt
kshスクリプトなんだけど、ファイルを読んでその行が条件一致したら次の行を読みたいんだけど出来ないのかな?

while read LINE ; do
 if ${LINE}に特定文字列あり ; then
  ファイルの次の行を読んで処理
 fi
done < ファイル

行数数えてsedとかで抜き出せばできるんだけど、それもどうなのかと・・・

perlなら
while(<$file>){
 if /条件/ {
  $a=<$file>;
  処理
 }
}
これで行けるんだけどね。

884 :名無しさん@お腹いっぱい。:2014/06/24(火) 02:53:56.45 .net
なんか書き込みがずっとないからなんか書いてみよう
--
あるファイルに、
1
2
3..
という具合に、改行区切りで昇順に数字が書き込まれているとする
しかし、ファイル末尾の数値と行数が合わない為、どこかで数値が欠けている、もしくは重複していると予想される
ファイル内部は昇順ソート済みとして、重複・欠損している数値を洗い出す効率の良い仕組みを考える
shでもperlでもなんでもどうぞ

885 :名無しさん@お腹いっぱい。:2014/06/24(火) 06:25:38.91 .net
awk 'NR!=$1{print NR}'

886 :名無しさん@お腹いっぱい。:2014/06/24(火) 06:58:51.21 .net
i=1; while read line; do [ "$line" != $i ] &amp;&amp; echo $i; i=`expr $i + 1`; done

887 :名無しさん@お腹いっぱい。:2014/06/24(火) 07:07:29.80 .net
for((i=1; ;i++)){ read l||break;case $l in $i);;*)echo $i;;esac;}

888 :名無しさん@お腹いっぱい。:2014/06/24(火) 07:24:52.17 .net
exec 3<&amp;0;yes ''|cat -n|while read f <&amp;3;do read i;[ "$f" != $i ]&amp;&amp;echo $i;done

889 :名無しさん@お腹いっぱい。:2014/06/24(火) 08:29:05.51 .net
cat -n|while read a b; do case $b in $a);;*)echo $a;;esac;done

890 :名無しさん@お腹いっぱい。:2014/06/24(火) 09:28:26.18 .net
遅レスだが、>>860については、俺はシェル変数使ってるな。
rcファイルでd=/path/nameとしておいて ls $d とか。
ホーム直下に一文字シンボリックリンク作るより文字数は少なくて済む。

891 :名無しさん@お腹いっぱい。:2014/06/24(火) 13:20:13.16 .net
ファイル名をnumとして
diff -y --supress-common-lines <(seq 1 `tail -n1 num`) num

892 :名無しさん@お腹いっぱい。:2014/06/24(火) 13:39:07.32 .net
他のがぱっと分からんけど、>>885って1回ズレたとこ見つけたらそれ以降全部吐かない?
えらい邪魔なような

893 :名無しさん@お腹いっぱい。:2014/06/24(火) 15:02:19.92 .net
目的が差異の確認だしdiffが一番スマートな印象だなぁ…出力形式も変更が効くし

894 :名無しさん@お腹いっぱい。:2014/06/24(火) 15:04:16.55 .net
>>891 だと標準入力から読めない。one passで実行できない。

895 :名無しさん@お腹いっぱい。:2014/06/24(火) 15:28:53.02 .net
>>885がシンプルでいいと思う。

896 :名無しさん@お腹いっぱい。:2014/06/24(火) 15:41:08.12 .net
one passが何かはよく知らないんだが、
・ファイルに書き込まれたものをチェックする前提がある=標準入力使う必要がない
・重複、又は欠損がある=複数、両方ある場合に全て検出するのが理想
というのを考えると、diffが一番いい答えを返してくれそうな気がする
>>885は確かにシンプルなんだが、ファイルの比較的先頭のほうが狂ってた場合、それ以降を全部出力しちゃうっていう点で微妙な気もする

897 :名無しさん@お腹いっぱい。:2014/06/24(火) 17:00:58.98 .net
>>896
headすればいいじゃん。
そんなに頻繁に使うものとは思ってないので、書きやすい方がいいと思いました。

898 :名無しさん@お腹いっぱい。:2014/06/24(火) 17:31:03.08 .net
>>891 だと、
もしファイルの最終行が間違っていて 最終行の内容が 1 とかだったら、
どの行が違っているのか全然チェックできない。

899 :名無しさん@お腹いっぱい。:2014/06/24(火) 17:46:42.34 .net
シェルを書く際の注意事項があります。
コンピュータのCPUが何ビットであるか調ベておく事が大切です。

32ビットCPUを登載したコンピュータには、
32ビット用のシェルを書くこと。

64ビットCPUを登載したコンピュータには、
64ビット用のシェルを書くこと。

これを間違えればシェルが動きません

900 :名無しさん@お腹いっぱい。:2014/06/24(火) 18:07:22.22 .net
自閉症あらわる

901 :名無しさん@お腹いっぱい。:2014/06/24(火) 18:10:05.25 .net
シェルの意味が分かってないんじゃないの?

902 :名無しさん@お腹いっぱい。:2014/06/24(火) 18:16:36.30 .net
いつもの改変コピペ君。
相手しちゃいかん。

903 :名無しさん@お腹いっぱい。:2014/06/24(火) 18:36:12.99 .net
--suppress-common-lines のスペルが違ってたり、
プロセス置換使って互換性無いのに backquote 使ってるのも気になるが、
diff がいいんじゃないの。
重複、欠損が1つとは限らないし、ワンライナーでなくスクリプトの話でしょ?

あと、yes '' | cat -n とかおもしろい。
改行区切りで昇順なのに、 >>898 の "最終行の内容が 1" って突っ込んだら負けなのか?

904 :名無しさん@お腹いっぱい。:2014/06/24(火) 20:06:24.04 .net
>>884

$ cat a.txt | tee >(uniq -d) >(uniq | awk 'NR!=$1{for(i=NR;i<$1;i++){print i};NR=$1++}') &>/dev/null

moreutils の pee を使う場合

$ cat a.txt | pee "uniq -d" 'uniq | awk '\''NR!=$1{for(i=NR;i<$1;i++){print i};NR=$1++}'\'''

905 :名無しさん@お腹いっぱい。:2014/06/24(火) 20:38:13.53 .net
peeとかすごいネーミングw

906 :名無しさん@お腹いっぱい。:2014/06/24(火) 20:42:14.23 .net
$ seq 1 `cat a.txt | wc -l` > tmp.txt; diff a.txt tmp.txt; rm tmp.txt
とかでよくね

907 :名無しさん@お腹いっぱい。:2014/06/24(火) 20:48:11.55 .net
添付ファイルとか品質低下し杉

908 :名無しさん@お腹いっぱい。:2014/06/24(火) 23:31:47.05 .net
しばらく書き込みないと思ってたのに反応すごいな

>>903の「互換性ないのに`使ってる」っていう点なんだが、
プロセス置換の記述の中で``って使えない環境もあるのか?
プロセス置換自体よくわかってないとこあるからちょっとあれだが

プロセス置換と``が同時に使えない場合でも>>906みたいなのはさすがにな……

909 :名無しさん@お腹いっぱい。:2014/06/24(火) 23:33:33.50 .net
つか、--surpress-common-linesの綴り間違ってたんだな……
これmanページから引っ張ってきたんだけどマニュアルの誤植なのか……
http://linuxjm.sourceforge.jp/html/gnumaniak/man1/diff.1.html

910 :名無しさん@お腹いっぱい。:2014/06/25(水) 00:44:07.04 .net
出遅れたが、またawkで
awk '{if($0-p!=1)print NR,p,$0;p=$0}'

911 :名無しさん@お腹いっぱい。:2014/06/25(水) 01:16:53.80 .net
>>910
これいいな。>>885の欠点を補った感じで
ifの構文がちょっとよくわからんのだけど

912 :名無しさん@お腹いっぱい。:2014/06/25(水) 01:32:44.63 .net
この手のお題は入出力例が欲しいなぁ

913 :名無しさん@お腹いっぱい。:2014/06/25(水) 01:47:50.54 .net
>>912
次やる時にはそうする

914 :名無しさん@お腹いっぱい。:2014/06/25(水) 03:19:08.72 .net
>>852
出遅れどころじゃないけど、NULつけてLFと交換するとか:
sed -n -e 's/^NAME:\(.*\)$/\x00\1:/p' -e 's/^STYLE:\(.*\)$/\1,/p' | tr '\000\n' '\n\000'

915 :名無しさん@お腹いっぱい。:2014/06/25(水) 03:31:58.38 .net
ゆえとたまきんのおしっこ直飲みしたい

916 :名無しさん@お腹いっぱい。:2014/06/25(水) 08:35:03.52 .net
>>905 >>915 看過出来ないネーミング。直訳ひどいw
http://sourceforge.jp/projects/freshmeat_moreutils/releases/
> 0.7
> 2006-03-20 07:39
> おしっこ(パイプティー)ユーティリティが追加されました。

917 :名無しさん@お腹いっぱい。:2014/06/25(水) 09:48:52.03 .net
渋谷に集まったサポーターが痴漢してるわけじゃなくて、
人の多いところに痴漢常習者が集まっただけ。
ジャニのコンサート会場の最寄駅なんかも沢山いる。

918 :名無しさん@お腹いっぱい。:2014/06/25(水) 09:53:42.42 .net
>>916
まぁ機械翻訳だからな。

919 :名無しさん@お腹いっぱい。:2014/06/25(水) 13:05:29.67 .net
>>908 クドくなるので >>903 では文章を削るばかりだったが、
もっと言葉を選べば良かった。互換性でなく portability とかの方が適切だったかも。

 >>891 では、zsh bash ksh の機能であるプロセス置換を使っているので、
portability は既に失われている。
 この為、back quote はあえて使う必要が無い。
スペルミス同様大した事じゃあ無いが、何で back quote 使ってるの?と気になった。

以下、念の為の補足。
 参考他で議論されている通り、一般的に back quote は、
公式には非推奨ではないものの、使わない様にしたい古いやり方。

 `...` は、POSIX 非互換のとても古い Bourne shell でのみ必要なレガシーな構文。

 ただし、このスレは Bourne Shell(/bin/sh) がデフォルトで、heirloom sh がどうのと
>>1 に書いてあるので、portability を考え back quote を使うか、特記して
dollar parens を使用する事が望ましい。

 個人的には POSIX デフォにしたいですが。

参考
Have backticks (i.e. `cmd`) in *sh shells been deprecated?
http://unix.stackexchange.com/questions/126927/

920 :名無しさん@お腹いっぱい。:2014/06/25(水) 13:21:13.94 .net
>>919
890のbacktickは必要じゃないの?
というかコマンドの出力を文字列で参照するとき、backtickで括るのは珍しくないでしょbashでも

921 :名無しさん@お腹いっぱい。:2014/06/25(水) 13:31:15.56 .net
入れ子にするときどう書く?

922 :名無しさん@お腹いっぱい。:2014/06/25(水) 13:31:59.11 .net
2行に分ける

923 :名無しさん@お腹いっぱい。:2014/06/25(水) 13:33:39.24 .net
バッククォートの入れ子は基本だな。新入社員のテストで良く使う。
バッククォートの3重入れ子までできて一人前。$( )なんかに逃げるのは半人前。

924 :名無しさん@お腹いっぱい。:2014/06/25(水) 13:51:24.95 .net
cshでは入れ子にできないことを知って捨てる決意をした25年前

925 :名無しさん@お腹いっぱい。:2014/06/25(水) 15:05:29.35 .net
漏れutilsってところが、また、そそるよな

926 :名無しさん@お腹いっぱい。:2014/06/25(水) 16:48:43.67 .net
>>919
なるほど、/bin/shじゃ動かないのになんで/bin/shで使うバッククォート使ってるんだって話だったのか
個人的に$( )が使い慣れなてないだけだったんだけどね
bashなら問題なく動くから普通に記述してしまった

927 :名無しさん@お腹いっぱい。:2014/06/25(水) 16:51:45.83 .net
>>923
さすがにバッククォートの3重入れ子とかするぐらいなら$( )使えよって思う
一応出来たけど汚い

928 :名無しさん@お腹いっぱい。:2014/06/25(水) 17:08:35.73 .net
参考の様な意見が一般的だと言うだけで、ポータビリティが関係ないスクリプトでも、
`cmd` で書きつづける人もいるでしょうね。
たとえ、Obsolete and deprecated syntax とか legacy とか言われても。

少なくとも、>>920 >>923 >>923 は back quote なわけでしょ?
無用な議論するつもりは無いけど、しかしながら、
back quote を肯定する理由が有るなら、参考までに聞いてみたい。
何故に back quote を使っていますか?

929 :名無しさん@お腹いっぱい。:2014/06/25(水) 17:38:16.92 .net
>>925 ダメ押しわろた
しかし、peeってw 分かった上であえて、peeなんだろうな。き、汚過ぎるわ
slとかtacみたいな、ひねりの効いたネーミングにはならなかったのかな

930 :名無しさん@お腹いっぱい。:2014/06/25(水) 18:42:08.63 .net
>>920 いや、bash で backtick は、初心者か、
最近まで商用 UNIX さわってて、そのままの人とかじゃないですか?
ある程度、O'Reilly とか本を読んだり、ネットで知識を漁ったりすれば、backtick は無いはず。

ちょっと、検索しておいたのを、挙げておきます。
1. Classic Shell Scripting: Hidden Commands that Unlock the Power of Unix
http://books.google.co.jp/books?id=J9WbAgAAQBAJ
p156 $(...) を指して、
This style is recommended for all new development,and it is what we use in many of the examples in this book.

931 :名無しさん@お腹いっぱい。:2014/06/25(水) 18:43:19.31 .net
2. Learning the Korn Shell, 2nd Edition
http://oreilly.com/catalog/korn2/chapter/ch04.html
The syntax of command substitution is:
$(Unix command)
...
(For backwards compatibility, the Korn shell supports the original Bourne shell (and C shell)
command substituion notation using backquotes: `…`. However, it is considerably harder to
use than $(…), since quoting and nested command substitutions require careful escaping.
We don't use the backquotes in any of the programs in this book.)

932 :名無しさん@お腹いっぱい。:2014/06/25(水) 19:00:58.91 .net
>>928
バッククオートならどのシェルでも使えるからだよ
bash専用だから$()使ってもいい、という考えは別に否定しない

933 :名無しさん@お腹いっぱい。:2014/06/25(水) 19:05:59.07 .net
見栄え重視。
入れ子にするなら$( )のほうが綺麗になるが、単発ならバッククォートのほうが見やすく思える

934 :名無しさん@お腹いっぱい。:2014/06/25(水) 20:02:42.64 .net
>>933 >>933 ありがとう。
議論はしたくないので、お礼だけ。

935 :名無しさん@お腹いっぱい。:2014/06/25(水) 21:09:05.97 .net
昔からやってる人間なら 新しい記法は知ってるけど慣れで昔のままってだけだよね
議論したくないとか言って古い人間の習慣をただdisってるだけだな

936 :名無しさん@お腹いっぱい。:2014/06/25(水) 22:37:49.34 .net
人様に見せるコードなら着飾るけど
ワンショットの使い捨てなんてのは
各々書きやすいように書けばいいと思う

937 :名無しさん@お腹いっぱい。:2014/06/25(水) 22:56:49.49 .net
逃げられたな。

938 :名無しさん@お腹いっぱい。:2014/06/25(水) 23:07:46.42 .net
>>935 ありがとう。古い人間の習慣か。
バッククォートは一般的に、使わない様にしたい古いやり方だとは思うけど、参考を紹介する位。
議論しても平行線だろうし、人それぞれだなあと思ったよ。
それに、このスレはバッククォートがデフォだし。

>>937 けんか腰だな。

939 :名無しさん@お腹いっぱい。:2014/06/25(水) 23:12:47.46 .net
逃げられたな。(170cm 60kg) <- 言いそう
逃げられたな。(190cm 90kg) <- 言わなそう

940 :名無しさん@お腹いっぱい。:2014/06/25(水) 23:15:15.27 .net
逃げられたな。(178-75-32)

941 :名無しさん@お腹いっぱい。:2014/06/25(水) 23:26:54.42 .net
>>940
誰だよw

逃げられたな。(163*90*53)

942 :909:2014/06/25(水) 23:32:22.49 .net
>>911
{if($0-p!=1){print NR,p,$0}
p=$0}
なら分かりやすかった? >>910の;はif文そのものを終わらせている
上記()の後の{}は中身が単文なので必須ではない
もし続けるならawkスレで

943 :名無しさん@お腹いっぱい。:2014/06/25(水) 23:51:38.16 .net
>>936 使い捨ての話してどうする

944 :名無しさん@お腹いっぱい。:2014/06/26(木) 00:07:16.26 .net
>>942
おおわざわざ解説ありがとう
やっぱシンプルかつ欲しい情報が的確に手に入る感じで好きだなこれ

945 :名無しさん@お腹いっぱい。:2014/06/26(木) 00:12:19.21 .net
>>943
その点が明示されてないから好きにやれよとね

946 :名無しさん@お腹いっぱい。:2014/06/26(木) 00:14:13.89 .net
その点てのはなんちゃら性とかいういわば目的ね

947 :名無しさん@お腹いっぱい。:2014/06/26(木) 01:03:51.25 .net
決定版は >>910 だけど、性懲りもなく moremore pee でやってみる
とは言え、頭に D(uplicate)、S(kip)を付けただけだけど

$ cat a.txt | pee \
"uniq -d | sed -r 's/.+/D &/'" \
'uniq | awk '\''NR!=$1{list="S";for(i=NR;i<$1;i++){list = list " " i};print list;NR=$1++}'\'''

948 :名無しさん@お腹いっぱい。:2014/06/26(木) 02:16:29.93 .net
しかしawkが思った以上に優秀だな
>>854といい>>910といい、フィールド抽出だけにしか使ってなかったawkがこうまで活躍するとは思わなんだ

949 :名無しさん@お腹いっぱい。:2014/06/26(木) 02:25:28.73 .net
せ、sedだってチューリング完全だし、数字の計算くらいかけるはずだよ……

950 :名無しさん@お腹いっぱい。:2014/06/26(木) 02:48:31.76 .net
awkすごいな あこがれちゃうな

951 :名無しさん@お腹いっぱい。:2014/06/26(木) 20:57:17.17 .net
それほどでもない

952 :名無しさん@お腹いっぱい。:2014/06/26(木) 22:40:09.50 .net
お前などperlに変えてやる a2p

953 :名無しさん@お腹いっぱい。:2014/06/26(木) 22:42:34.98 .net
整数型を持たず浮動小数点で数扱ってるせいで
大きな数はまともに足し算すらできないawkが何だって?

954 :名無しさん@お腹いっぱい。:2014/06/26(木) 22:43:26.49 .net
お前よりは有能だよ

955 :909:2014/06/26(木) 23:46:34.93 .net
>>885のお題がたまたまawkにぴったりだったということで。
>>885>>910をa2pに掛けてみたけど、やっぱり読みにくい。
rubyやpythonだと見た目よくなるの?

956 :名無しさん@お腹いっぱい。:2014/06/26(木) 23:59:19.69 .net
1,a,あああ,2,b,いいい,3,c,ううう
11,A,あ,12,B,い,13,C,う
↑みたいなCSV形式のテキストがあるのですが、これを
1,a,あああ
2,b,いいい
3,c,ううう
11,A,あ
12,B,い
13,C,う
と、カンマ区切りの3列毎に改行させたく思ってます

今はawkを使い$1〜$9として取り出して、printfで$1","$2","$3;みたいに処理させてるのですが
かなり冗長な感じで、個人的に気に入ってません

何かいい方法ありますでしょうか

957 :名無しさん@お腹いっぱい。:2014/06/27(金) 00:04:54.49 .net
cvsならVBA
クォート処理から解放される

958 :名無しさん@お腹いっぱい。:2014/06/27(金) 00:42:46.87 .net
そういやこのスレのやり方よく知らないんだけど、次スレはいつ立てるん?
じきに埋まりそうだが

959 :名無しさん@お腹いっぱい。:2014/06/27(金) 00:46:17.58 .net
sed 's/,/\
/6; s/,/\
/3'
ちょっと手元に検証環境がないから間違ってたらだれか修正してくれ

960 :名無しさん@お腹いっぱい。:2014/06/27(金) 01:25:56.61 .net
>>959
955です

期待通り動作しました!!
ありがとうございます

sedの仕様等しらべて、動作原理を把握しようと思います…

961 :名無しさん@お腹いっぱい。:2014/06/27(金) 01:33:49.62 .net
s/,/\
/n  ←n番目の","を改行に置換する
まず6番目置換して、次に3番目を置換。
順番逆だとうまく動かないから気を付けてな

962 :名無しさん@お腹いっぱい。:2014/06/27(金) 03:24:34.12 .net
cat filename | sed 's/,/\ /3' | sed 's/,/\ /3' これを繰り返すのはだめなのかな。3と6で数字を2つも使うのがなんとも言えなくて スクリプト詳しくないから、何か問題があったら教えて欲しいです

963 :名無しさん@お腹いっぱい。:2014/06/27(金) 08:13:10.13 .net
これでどうかな。繰り返してくれるよ
sed -e 's/,/\n/3; P; D'

964 :名無しさん@お腹いっぱい。:2014/06/27(金) 08:32:22.50 .net
sedって大容量ファイルに弱いイメージあるから、パイプでsedを何回もつなげるのって
動作遅くなる印象がある
検証してないから実は早いかもしれんけど、綺麗さ考えてもなるべくsedは1回で終わらせたいな

965 :名無しさん@お腹いっぱい。:2014/06/27(金) 08:34:49.66 .net
>>949
sedでlispを実装した剛のものがいる。
https://github.com/shinh/sedlisp

966 :名無しさん@お腹いっぱい。:2014/06/27(金) 08:40:29.48 .net
>>963
おお、こんなの知らなんだ。これはイディオムになってるのか?

967 :名無しさん@お腹いっぱい。:2014/06/27(金) 08:44:13.06 .net
>>964
昔のCPUではsedを複数パイプでつなぐと遅かったが、
今のマルチコア(スレッド)のCPUだとsed複数をパイプでつないだ方が(それぞれ別CPUコアで実行されるので)速くなる。
わざわざsedひとつにまとめるとかえって遅くなるので注意。

968 :名無しさん@お腹いっぱい。:2014/06/27(金) 12:10:12.50 .net
>>966 す、すごいな。全体で591行は、思いのほか短いな
頭おかしいとか褒められてるしw

で、書き上げた後の感想がw
> 正直疲れたんで s/// 以外の sed script 書くのやめようかと思いますね

やっぱり、goto 文相当しかないし、きついよね。
深入りしない方が吉って事かな?とかいいつつ、sedlisp.sed 保存


>>966 ちょw イディオムってw てれるなー。ただ考えながらコマンド並べただけ
たぶん引っかかるのは、d と D や s/.*\n// の違いとかでしょ?

>>958 いつもぎりぎり。ってか埋まってから次スレとかもある

969 :名無しさん@お腹いっぱい。:2014/06/27(金) 12:46:39.33 .net
sedも使い慣れるとほんとなんでもできるよな
lispはさすがに変態だとは思うが

さっと検索したらsedスレもあるな
スレタイシンプルすぎて笑ったw

970 :名無しさん@お腹いっぱい。:2014/06/27(金) 12:55:52.08 .net
967 です
info sed の Examples/uniq とかみたら
> As you can see, we mantain a 2-line window using `P' and `D'. This
> technique is often used in advanced `sed' scripts
とかあるから、イディオムかって言えば、そうかもね

971 :名無しさん@お腹いっぱい。:2014/06/27(金) 13:50:32.44 .net
lispは神言語だから、様々な環境上で再現されている
ニコニコ動画の投稿者コメント(ニワン語)とか、
エロゲスクリプト環境のNScriptとかでlisp実装した変態もいる

lispを変な環境で実装する、というのはlisperにとってある種の習性なのかもしれない

972 :名無しさん@お腹いっぱい。:2014/06/27(金) 14:44:29.63 .net
>>956
grep -o '[^,]\+,[^,]\+,[^,]\+'

973 :名無しさん@お腹いっぱい。:2014/06/28(土) 01:22:09.24 .net
>>972
目から鱗だわ
grepやりおる

974 :名無しさん@お腹いっぱい。:2014/06/28(土) 08:31:21.71 .net
それならGNU awkでも
awk '{print RT}' RS="([^,]+,){2}[^,]+"
と思ったが、ヌルのフィールドがあるとうまくいかん

975 :名無しさん@お腹いっぱい。:2014/06/28(土) 22:33:32.71 .net
>>972
すげー
だけどなぜ3つずつで改行されるのかわかりません(><)
アホなおれに原理を教えて誰かエロイ人

976 :名無しさん@お腹いっぱい。:2014/06/28(土) 23:06:59.94 .net
>>972
[^,] が ',' 以外の任意の文字一つ
その後に "\+" で1つ以上ありったけ
その右にある','が1つ目の','
以下同文

1,a,あああ,2,b,いいい,3,c,ううう
には、まず
1,a,あああ がマッチする
-o オプションの説明通りにそのマッチしたのを出力した後、次に
2,b,いいい がマッチする
以下同文

977 :名無しさん@お腹いっぱい。:2014/06/28(土) 23:49:55.98 .net
grep の -o オプションは、マッチした行じゃなくマッチした箇所を全部表示する
123abc456
という行にgrep -o [0-9] とかやると、
1
2
3
4
5
6
とかなる

978 :名無しさん@お腹いっぱい。:2014/06/30(月) 16:33:37.27 .net
暇つぶし問題俺も作ってみるか。あまり面白いものは作れないが…

自然数の数値を与えると、2^10で割ってB,K,M...の単位を付与する仕組みを考える。
例)
入力:1000 出力:1000B
入力:1000000 出力:976.5K
入力:1000000000 出力:953.6M
・出力の小数点第一位以降は切り捨て
・対応単位はB, K, M, G, T
・入力方法は不問。$1に入ってるよとかでもいい

979 :名無しさん@お腹いっぱい。:2014/06/30(月) 16:55:13.03 .net
すまん、切り捨てるのは第二位以下だな

980 :名無しさん@お腹いっぱい。:2014/06/30(月) 16:58:10.85 .net
>>978
n="$1"0
set B K M G T
while (($n / 1024 >= 10)); do shift; ((n /= 1024)); done

case $((n % 10)) in
0) echo $((n / 10))$1;;
*) echo $((n / 10)).$((n % 10))$1;;
esac

981 :名無しさん@お腹いっぱい。:2014/06/30(月) 16:58:57.49 .net
B=バイトのつもりだろうけど
板的にはBKMのBはBlock

982 :名無しさん@お腹いっぱい。:2014/06/30(月) 17:19:13.47 .net
Oh...
今回はバイトと思ってくれorz

>>980
早速ありがとう。分かりやすくて無駄がないな
setとshift活用する手段は思いつかなかった…配列使うことしか頭になかったわ

983 :名無しさん@お腹いっぱい。:2014/06/30(月) 17:23:15.08 .net
>>981
そんな決まりないよ。

984 :名無しさん@お腹いっぱい。:2014/06/30(月) 21:38:33.06 .net
>>980
罰種胃損はイカンなぁ。純正シェルで書こうな。

#!/bin/sh
n="$1"0
set B K M G T
while [ "$n" -ge 10240 ]; do shift; n=`expr "$n" / 1024`; done

f=`expr "$n" % 10`
n=`expr "$n" / 10`
case $f in 0) echo $n$1;; *) echo $n.$f$1;; esac

985 :名無しさん@お腹いっぱい。:2014/07/01(火) 00:56:36.07 .net
dd if=/dev/zero of=/tmp/hoge.$$ bs=1 count=$1 2>/dev/null
ls -lh /tmp/hoge.$$ | awk '$0=$5'
rm -f /tmp/hoge.$$

986 :名無しさん@お腹いっぱい。:2014/07/01(火) 08:37:43.26 .net
>>985
ジョークで書いてるんだろうけど滅茶苦茶無駄な上に、1Kバイト未満の時 B の単位が付かないからNG

987 :名無しさん@お腹いっぱい。:2014/07/01(火) 10:58:43.15 .net
>>984
純正シェルで利用できるシェル変数は$aから$m, 制御構文は
if/switch/while/goto/exitだけ, コマンド置換(`command`)は無い。

失格

988 :名無しさん@お腹いっぱい。:2014/07/01(火) 11:05:05.54 .net
純正シェル道は奥が深いな。

989 :名無しさん@お腹いっぱい。:2014/07/01(火) 12:41:53.89 .net
>>987 純正師江留道秘伝書第七巻を見ると、コマンド置換はあるようです
http://www.in-ulm.de/~mascheck/bourne/v7/
http://heirloom.sourceforge.net/sh/sh.1.html#4

>>978 GNU coreutils で小数点とかの指定がダメなのですが、
numfmt --to=iec --suffix B "$1"

伝統的に SI units を流用して2進接頭辞を表していたけど、いつのまにか
IEC units を使ってないのは、日本だけって事に成りません様に
メビバイト MiB とか、まだまだ若いし、頭が固くないし、完全拒否とかはない。余裕。汗

990 :名無しさん@お腹いっぱい。:2014/07/01(火) 12:45:47.54 .net
純正の意味はわからんけど、ボーンシェルならいいのでは

991 :名無しさん@お腹いっぱい。:2014/07/01(火) 13:07:30.36 .net
>>989,989
bourneシェルの中でもV1-V6はコマンドラインインタプリタとしての
機能しかもっていないので、本スレでは対象外

プログラミング可能な制御構造を導入したPWBシェルでも動作可能なことが純正シェル道
http://www.in-ulm.de/~mascheck/bourne/PWB/

992 :名無しさん@お腹いっぱい。:2014/07/01(火) 13:31:46.64 .net
純正とか割とどーでもいい

993 :名無しさん@お腹いっぱい。:2014/07/01(火) 13:51:27.90 .net
よく分からんな
#!/bin/sh
で動く範囲ならOK?

994 :名無しさん@お腹いっぱい。:2014/07/01(火) 14:01:06.07 .net
>>993
それじゃ/bin/shが実際何なのかわからん。

995 :名無しさん@お腹いっぱい。:2014/07/01(火) 14:24:32.56 .net
>>993
まあ、個人的には誰しも、どーでもいいと思うだろう
だけど、色々な環境が有って、>>1でお約束を決めるに至った事を考えると、そうも思えない

>>993
ここは、総合。明示すればどんなシェルもOK
$ ls -l /bin/sh
/bin/sh -> dash
とかなってれば/bin/dashとか書けばいいし、少し調べてPOSIXシェルでとかでもいい

996 :名無しさん@お腹いっぱい。:2014/07/01(火) 14:26:17.93 .net
おれもどうでもいいんだけど、一部求道者がいるのよね。

997 :名無しさん@お腹いっぱい。:2014/07/01(火) 14:28:04.05 .net
>>1を決めた経緯なんてそんなたいしたもんあったっけ。
誰かが勝手に付け加えてっただけだろう。

>>995
シンボリックリンクかどうか見ただけじゃ不十分。
シンボリックリンクになってなくてもOS違えば挙動が変わる。

998 :名無しさん@お腹いっぱい。:2014/07/01(火) 14:35:51.47 .net
専用スレがあるシェルはそっちに行ってもらって
あくまでもelseで落ちてきたシェルだけがここというのは?

999 :名無しさん@お腹いっぱい。:2014/07/01(火) 14:40:48.56 .net
却下します。

1000 :名無しさん@お腹いっぱい。:2014/07/01(火) 14:57:35.22 .net
>>997 確かに変わるな
それで、不十分だから >>997 は明示の仕方について異論が有るのか?
>>1ではシェルを明示すればいい様だが

1001 :名無しさん@お腹いっぱい。:2014/07/01(火) 15:08:14.47 .net
>>1000
どのシェルかわかるように明示してくれればそれでいいよ。

1002 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1002
240 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200