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

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その20
http://toro.2ch.net/test/read.cgi/unix/1339083351/
2名無しさん@お腹いっぱい。:2012/11/15(木) 19:26:11.32
Q. シェルは UNIX の勉強に使えますか?
A. シェルは UNIX に慣れた人間がスクリプトを書いて楽するのには向いていますが、
  UNIX の勉強には向いていません。
3名無しさん@お腹いっぱい。:2012/11/15(木) 19:55:58.11
今月はじめ、職場に新しいPC(Core i7の結構ハイエンド構成)が入りました。
多分私が運用保守をまかされそうな雰囲気です。業務的にとある構造分析や
シミュレーションなど行う必要があり、制御コマンドとしてシェルスクリプトを
使用するのは聞いていたのですが、そのファイルを開いて1行目に書かれていたのは
#!/bin/tcshという文字列でした。

「うへぇ〜、よりによってtcshかよ」

ファイル記述子のリダイレクト不可、クオートのネスティング等に無理あり、
今の奴でさえシェル関数は使えないし、パイプラインの終了ステータスもおかしいし、
今時の担当者が扱ってセキュリティは大丈夫なのか不安はつきませんし、
スクリプトとしてのcshは嫌われるのでネット上の情報も少なく調べるのも大変です。
おそらく導入に際して、大学など教育機関で最初にcshに触れて刷りこまれた人間が
強気の知ったかぶりをして発言権を得て「俺流」をつらぬき紛れ込ませたのでしょう。

昔、当時、シェルで唯一aliasやhistoryやジョブコントロールの機能が使えた
cshは大学など教育機関に浸透していて、日本のシェル界に多くのバカが輩出しました。

これから私は、おそらくそういうバカが、$*でスペース入りファイル名が扱えないとか
$<でファイルから読めないのかとか、変数に*を入れた場合だけ構文エラーになって
実行できないなどと、シェル通気取りの偏ったどうでもいい我侭を言い出し
(だからcshスクリプト書くんじゃねーよ)それと戦わなければならないのでしょう。
そして時代によって決着している、過去25年のシェル界隈のくだらないそれらの議論が
再現され、それに巻き込まれるのでしょう。もう今からうんざりです。

だからお願いです。教育現場ではbashでもzshでもkshでもashでも
Bourne shでもなんでもいいですがBシェル系のシェルにしてください。

教育機関で懐古趣味のバカを量産されると現場が非常に苦労するのです。
4名無しさん@お腹いっぱい。:2012/11/15(木) 20:00:38.47
>>2
シェルとシェルスクリプトの区別がついてないアホレスをコピペすんなよ
5名無しさん@お腹いっぱい。:2012/11/15(木) 20:05:57.42
確かにww
シェルがないとコマンド実行すらできないし
何がユーザーの入力を受け付けるんだ
6名無しさん@お腹いっぱい。:2012/11/15(木) 20:10:10.87
前スレ最後の頓珍漢は私です
アドバイス通り$args[1]→$1にしたらすんなりいきました。
ありがとうございました。スレなめるように見て勉強させて頂きます。
7名無しさん@お腹いっぱい。:2012/11/15(木) 20:30:38.10
俺のもなめて。
8名無しさん@お腹いっぱい。:2012/11/18(日) 11:50:01.58
Gnome Shellのスクリプトの話題もここでいいのか?
9名無しさん@お腹いっぱい。:2012/11/20(火) 18:14:10.06
以下のような文章があったとします。
〜aaa〜bbbaaa〜bbbaaa〜bbb〜
(〜は文字数の定まっていない文字列を表しています。)
ここから、それぞれ最初のaaa〜bbbだけを抽出、真ん中のaaa〜bbbだけを抽出、最後のaaa〜bbbだけをgrepなどで抽出したい時、どう正規表現で表せばよいのでしょうか?
10名無しさん@お腹いっぱい。:2012/11/20(火) 18:23:34.33
grepは抽出するというより、マッチした行は全部表示しちゃうけど?
sedなら
sed 's/\(aaa.*bbb\)\(aaa.*bbb\)\(aaa.*bbb\)/\2/'
みたいな?
11名無しさん@お腹いっぱい。:2012/11/20(火) 18:31:07.64
>>9
>>1
>正規表現の話題はスレ違い(正規表現スレへ)
12名無しさん@お腹いっぱい。:2012/11/20(火) 18:34:56.83
>>11
いや、それは
>>1
> ・シェルで使えるワイルドカード等は正規表現ではありません。
って話だからまた違う。
13名無しさん@お腹いっぱい。:2012/11/20(火) 18:38:12.26
>>12
恥ずかしい奴。
14名無しさん@お腹いっぱい。:2012/11/20(火) 18:40:22.60
正規表現スレはまともに機能してないし、ここでいいだろ。
15名無しさん@お腹いっぱい。:2012/11/20(火) 18:45:22.53
だな。
16名無しさん@お腹いっぱい。:2012/11/20(火) 18:47:12.07
正規表現スレがまともに機能してないというなら
まともに機能させるためにも正規表現スレに行くべき。

sedスレもあるし、sedスレでもいいよ。
17名無しさん@お腹いっぱい。:2012/11/20(火) 20:02:12.24
了解です
正規表現スレに行ってきます

>>10
grep -oとしてマッチした部分のみ出力しようと考えてます
18名無しさん@お腹いっぱい。:2012/11/20(火) 20:25:59.98
>>9
ってかこれ俺も分かんないんだけど
どうやんのさ
19名無しさん@お腹いっぱい。:2012/11/20(火) 21:32:57.96
>>17
$ echo "〜aaa〜bbbaaa〜bbbaaa〜bbb〜" | grep -o "aaa〜bb"

ってやったら3個表示されちゃうな。。。
20名無しさん@お腹いっぱい。:2012/11/21(水) 14:15:55.18
あとは、sed -n 1p 等でいいじゃない
21名無しさん@お腹いっぱい。:2012/11/22(木) 18:12:58.50
あるシェルスクリプトに渡された空白を含む可変長引数を、別のコマンドに転送したいのですが書き方がわかりません
具体的にはシェルスクリプトhoge.shを./hoge.sh "a b" "c d"…と実行すると,内部で別のコマンドcmdを引数"a b" "c d"…で実行するような場合です.
引数の数が固定であればhoge.shの中にcmd "$1" "$2"…と記述すれば良いのですが,可変長に対応しようと$*をそのまま用いると
展開されてcmd a b c dというコマンドになり,引数が4つになります.

どなたかわかる方がいましたら,ご教授ください.
22名無しさん@お腹いっぱい。:2012/11/22(木) 18:17:06.55
>>21
"$@"
2322:2012/11/22(木) 18:22:31.99
ありがとうございます.これで彼女ができそうです><
24名無しさん@お腹いっぱい。:2012/11/24(土) 16:38:01.78
ffmpeg(avconv)では連番のpngファイルから動画ファイルを作り出すことができます.
このような機能を利用して,画像生成スクリプトの吐き出す静止画群から動画を作っています.

これを,中間ファイルのpngを作ることなく実現したいのですが何かいい方法はないでしょうか.
静止画をまとめて標準出力に書き出すことはできそうなので,標準入力からの複数の静止画を
avconvが認識できれば簡単に実現できそうな気がするのですが.
25名無しさん@お腹いっぱい。:2012/11/24(土) 16:41:34.97
26名無しさん@お腹いっぱい。:2012/11/24(土) 20:36:48.33
>>24
良い事を教えてやろうwebブラウザでhttp://www.google.com/を開くんだ
まんなかにテキストボックスがあらわれるから
ffmpeg jpeg
ここまで入れれば候補に
ffmpeg jpeg 動画
がでてくるから、それをクリックする。あとは上から順番に開いていけばいい。

わかったか? http://www.google.com/はブックマーク(お気に入り)しとくと捗るぞ。
27名無しさん@お腹いっぱい。:2012/11/24(土) 21:15:55.69
すみませんが詳しい方のみ回答をお願いします
28名無しさん@お腹いっぱい。:2012/11/25(日) 03:38:19.25
賢者タイムの方のみお願いします
29名無しさん@お腹いっぱい。:2012/11/25(日) 09:34:07.71
おかずもあげずに
30名無しさん@お腹いっぱい。:2012/11/28(水) 00:27:12.03
質問です。

まず、以下のファイルがあります。
--------
$ cat hoge.dat
aaa
bbb
ccc
--------

次に、下記のスクリプトを用意します。
--------
$ cat hoge.sh
#!/bin/sh
cat hoge.dat | while read -r line
do
alldata=$alldata$line
done
echo $alldata
--------

処理結果は以下のようになりました。
--------
$ ./hoge.sh

$
--------

自分のイメージとしては、処理結果は、aaabbbcccと表示されるはずなのですが、
なぜ表示されないのでしょうか?表示するためにはどうすればいいでしょうか?
31名無しさん@お腹いっぱい。:2012/11/28(水) 00:52:03.02
>>30
パイプ使うとサブシェルが作成されるから。この場合ループの中身はサブシェルで実行される。
bashでこれを避けるにはcatとパイプの代わりに<でファイルを渡せばいい。

#!/bin/sh
while read -r line
do
alldata=$alldata$line
done < hoge.dat
echo $alldata
32名無しさん@お腹いっぱい。:2012/11/28(水) 00:54:33.58
ただのファイルなら < でいいけど、どうしてもパイプが必要ならこうかな

#!/bin/sh
alldata=`cat hoge.dat | (while read -r line
do
alldata=$alldata$line
done; echo $alldata)`
echo $alldata

あんまりエレガントじゃないか
33名無しさん@お腹いっぱい。:2012/11/28(水) 01:02:24.57
<() 使うのはナシですか
34名無しさん@お腹いっぱい。:2012/11/28(水) 07:45:45.49
sh(bash)ではなく、kshに変えるのが一番手っ取り早いな。
35名無しさん@お腹いっぱい。:2012/11/28(水) 09:52:28.20
#!/bin/sh
while read -r line
do
alldata=$alldata$line
done <<EOF
`cat hoge.dat`
EOF
36名無しさん@お腹いっぱい。:2012/11/28(水) 10:07:00.10
ほほー
37名無しさん@お腹いっぱい。:2012/11/28(水) 21:38:42.24
やっぱカッケーな
38名無しさん@お腹いっぱい。:2012/11/28(水) 23:36:34.31
>>32
これじゃだめ?
#!/bin/sh
cat hoge.dat | (while read -r line
do
alldata=$alldata$line
done
echo $alldata)

質問がほんとうにやりたいことなら、こんなのもあるかも。

#!/bin/sh
cat hoge.dat | while read -r line
do
echo -n $line
done
echo
39>>30:2012/11/29(木) 01:07:49.13
みなさん、ご丁寧にありがとうございました。
なぜ、期待どおりにならないか理解しました。

ちなみに、こういうやりかたもありますね。
-----------
for line in `cat hoge.dat`
do
alldata=$alldata$line
done
echo $alldata
-----------
40名無しさん@お腹いっぱい。:2012/12/02(日) 21:10:12.06
求めてるのと違うだろうけど、これでもできた

sed -n 'H;${g;s/\n//gp}' hoge.dat
41名無しさん@お腹いっぱい。:2012/12/06(木) 22:17:50.48
bash の brace expansion {...} について教えてください.
環境は bash 4.2.39 MacOSX 10.7.5 です.

1$ a=foo
2$ echo $a{_a,_b,_c}

3$ echo $a{,_a,_b,_c}
foo
4$ echo ${a}{,_a,_b,_c}
foo foo_a foo_b foo_c

この変数aの区切りを明示しない時(2$,3$)の挙動がよく分かりません.
どう解釈すればいいのでしょうか?
42名無しさん@お腹いっぱい。:2012/12/06(木) 22:24:28.37
>>41
このように展開される

$a{_a,_b,_c}→$a_a $a_b $a_c
$a{,_a,_b,_c}→$a $a_a $a_b $a_c
${a}{,_a,_b,_c}→${a} ${a}_a ${a}_b ${a}_c
43名無しさん@お腹いっぱい。:2012/12/06(木) 22:32:45.24
>>42
ああ、よく分かりました。ありがとうございます。
44名無しさん@お腹いっぱい。:2012/12/06(木) 22:33:08.64
>>41
手元で動作を確認する限り

2$ は {} の展開を先にしてる
つまり $a_a $a_b $a_c としてから変数の処理
=> 何も出力されない

3$ も同様
$a $a_a $a_b $a_c としてから変数の処理
=> $a だけ定義されてるから foo が出力

どこかマニュアルに展開の優先順位があるかもしれないがそれは確認してない
4544:2012/12/06(木) 22:34:57.60
リロードしてなかった(´・ω・`)
すまない...
46名無しさん@お腹いっぱい。:2012/12/07(金) 14:07:46.57
screen使いです。
bash_historyって何行ぐらいにしている?
直近のhistory | grep hoge | lessってするなら3桁の900行で十分だよね。
もうちょっと前のも検索したいなら4桁の9900行。 # 自分は余裕もってこれ。
9366$

メモリ食いそうだから、スクリプトを組んで今までの全部の履歴十数万行を検索するのも
超ひさしぶりのコマンド用途としてはありそう。その超ひさしぶりに使うコマンド用途なら
# とコメントをつけておくとちょっと使いやすいかも。
47名無しさん@お腹いっぱい。:2012/12/07(金) 14:16:03.49
好きにしろ。
48名無しさん@お腹いっぱい。:2012/12/07(金) 14:57:28.68
ヒストリーは何行にしてても
端末複数開いてたら消えちゃうし
いつ打ったかの時間情報ないし
あんまり意味がないよね
49名無しさん@お腹いっぱい。:2012/12/07(金) 15:29:36.16
>>48
> ヒストリーは何行にしてても
> 端末複数開いてたら消えちゃうし
自分の力量の視野の狭さだとちゃんとexitって閉じると残るよ。
> いつ打ったかの時間情報ないし
> あんまり意味がないよね
時間情報は環境変数の設定で秒数まで残るかな。秒数の小数点はスクリプトで工夫すれば
残せそうかな。そこまでの必要性がないからやっていないけど。
50名無しさん@お腹いっぱい。:2012/12/07(金) 15:43:25.01
シェルスクリプトでヒストリ残して何がうれしいの?
51名無しさん@お腹いっぱい。:2012/12/07(金) 17:11:43.25
シェルスクリプト内でhistory使う方法教えて。

#!/bin/sh
コマンド1
コマンド2
history

と書いて実行してもhistoryが何も表示されない><
52名無しさん@お腹いっぱい。:2012/12/07(金) 17:17:08.00
>>51
set -o history でどうかな。
53名無しさん@お腹いっぱい。:2012/12/07(金) 19:52:21.63
>>46
zsh使いなら死ぬまで履歴を残すもんだってばっちゃが言ってたから
50万行にしてる。
もちろん複数の端末起動してもちゃんとshare_historyされる設定。
54名無しさん@お腹いっぱい。:2012/12/07(金) 23:24:10.48
プログラミング初心者です。
以下のコードがシェルの文法的におかしい点を教えて下さい。
ex1はargvでファイル名を読み込む外部のC++プログラムです。
不足してる情報もあると思いますが、分かる範囲で教えていただけたら助かります。

#!/bin/sh

DIRx=$1
DIRy=$2

filesA=`ls $DIRx/*.data`
filesB=`ls $DIRy/*.data`
for x in $filesA;
for y in $filesB;

do
./ex1 $f $fi
done
55名無しさん@お腹いっぱい。:2012/12/07(金) 23:31:28.06
なんでそんな間違い方するのか意味不明
釣りっぽい
56名無しさん@お腹いっぱい。:2012/12/07(金) 23:39:25.77
すみません、釣りじゃないです。
ちょっと調べて、これでできたかもしれないです。
もし間違っていたら教えて頂けないでしょうか。
如何せんコンパイルはできるものの実行結果が合っているか確認する術が無いもので…

for x in $filesA;
do
for y in $filesB;
do
./ex1 $x $y
done
done
57名無しさん@お腹いっぱい。:2012/12/07(金) 23:51:12.55
質問者ではないのですが この for/do/done の構文
言語仕様策定の上で、do の存在はどうしても必要だったの?
改行かセミコロンでループブロックの区切りは付きますよね
もし無かったらアレができないよみたいな do の活用法なんてあるのでしょうか?
単に do/done なら覚え易いよね!程度だったら残念かも
58名無しさん@お腹いっぱい。:2012/12/08(土) 00:12:36.76
>>56
*.data で得るファイル名に空白がないのなら問題ない
空白があれば
IFS=$'\n'
が必要

文法はいい。というか文法以外のex1の意図がわからないけど
59名無しさん@お腹いっぱい。:2012/12/08(土) 01:40:05.03
>>58
ありがとうございます、空白はありません。
お陰様でなんとかできました、ありがとうございました。
ex1はただの実行ファイルで、名前に特に意味はありません。
60名無しさん@お腹いっぱい。:2012/12/08(土) 08:14:05.32
>>54,>>56
釣りとは思わないけど、やりたいことはなんとなくわかるけどケアレスミスが多すぎて
判読不可能。
>>57
どの力が働いて、今の構文なのかはわからない。おまじないってことでいいんじゃないのw

Unix創世期はほとんどがディスプレイなし、テレタイプ端末、スペック貧弱と想像できるから
テキストエディタvi, emacsは使えずに開発環境はラインエディタ。
創世期シェルを作った開発形態・志向も違うだろうし、for-do-doneを言うならcase-esac,
if-fiもどうなのってツッコミたくなるしなあ。その当時回文みたいなのが流行っていたの?
教育言語のPascalも律儀に{}だからね。
現在のemacsでksh, bashのfor文テンプレート使うとdo-doneってつくね。過剰に装飾している
だけかもしれないけど。
61名無しさん@お腹いっぱい。:2012/12/08(土) 09:21:06.89
>>60

ラクダ本(オライリーのPerlの本)の初版用語集によると、ある語の逆綴りを
採用するのはALGOL主義、だそうだが、elif(fileの逆綴りでもある)がない
理由として半ばジョークめいた書き方だったので話半分に。

# Pascalはbegin/endじゃ…
62名無しさん@お腹いっぱい。:2012/12/08(土) 14:39:25.53
>>60
born shellの作者がAlgolが好きだったから。
63名無しさん@お腹いっぱい。:2012/12/08(土) 16:02:40.46
骨?
64名無しさん@お腹いっぱい。:2012/12/08(土) 17:03:07.57
>>62-63
英語の成績悪かったらしい奴が2人いるみたいだが、突っ込んだら負け。
65名無しさん@お腹いっぱい。:2012/12/08(土) 22:04:44.58
?マークの意味が分からない奴がいるな・・・
66名無しさん@お腹いっぱい。:2012/12/08(土) 22:22:47.71
任意の一文字マッチって意味でしょ。それぐらい知ってるよ。
67名無しさん@お腹いっぱい。:2012/12/09(日) 10:42:10.50
シェルスレなんだから変数が未設定かどうかの確認って答えるべきだな
68名無しさん@お腹いっぱい。:2012/12/09(日) 10:43:37.85
シェルglobだから>>66で正しい。
69名無しさん@お腹いっぱい。:2012/12/09(日) 10:46:03.34
>>66
bo?rn?
70名無しさん@お腹いっぱい。:2012/12/09(日) 18:39:45.90
誰もシェルグロブなんて言ってないけどな
71名無しさん@お腹いっぱい。:2012/12/10(月) 09:34:25.06
>>67
どういう意味? ?で変数の何が分かるの?
72名無しさん@お腹いっぱい。:2012/12/10(月) 10:11:21.88
>>71
${hoge:?}
73名無しさん@お腹いっぱい。:2012/12/10(月) 13:52:17.02
${foo:+hello}
fooが nullかunset なら "", それ以外は "hello"

${foo+hello}
fooが unsetなら "", それ以外は "hello"

前者は man bash にて仕様が
${parameter:+word}
Use Alternate Value. If parameter is null or unset, nothing is
substituted, otherwise the expansion of word is substituted.
のように確認できたのですが、後者が見あたりません
どの辺を見れば載っているでしょうか? 或いは man レベルでは載っていない仕様でしょうか?
74名無しさん@お腹いっぱい。:2012/12/10(月) 14:13:26.18
>>73
あ、それちょうど今週のレポートで学生に課したネタなんで、
知ってる人も答をここには書かないでね。(偶然は恐ろしい)
75名無しさん@お腹いっぱい。:2012/12/10(月) 14:36:02.61
うち学生じゃないんですが・・・
ならせめてレポート提出日が過ぎたら教えてください
76名無しさん@お腹いっぱい。:2012/12/10(月) 14:38:03.86
さっきのは null か unset の判別はどうやったらいいのか調べていたら見つけた小技です
77名無しさん@お腹いっぱい。:2012/12/10(月) 14:57:36.75
>>73
http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbBB
> コロンを省略した場合には設定されているかどうかのみを調べます。
これじゃね。
78名無しさん@お腹いっぱい。:2012/12/10(月) 17:47:50.38
>>77
ありがとうございます。それですね。
辿ってみたら man bash でも該当する箇所がありました。
79名無しさん@お腹いっぱい。:2012/12/10(月) 17:55:03.11
そりゃman bashの和訳だもの。
80名無しさん@お腹いっぱい。:2012/12/10(月) 18:53:49.37
わらかすなよ
81名無しさん@お腹いっぱい。:2012/12/13(木) 04:02:30.30
>>79
意味不明
82名無しさん@お腹いっぱい。:2012/12/13(木) 11:02:31.60
>>81
もともとbashのmanは英語で書かれていたんだよ
83名無しさん@お腹いっぱい。:2012/12/13(木) 23:00:47.57
わかる方がいたら教えてください。

引数で入力した値で、設定ファイル(~/test.conf)の置換文字列(%replace%)を置換することを考えています。

replace_str=%replace%
input=$1
sed -e "s/${replace_str}/${input}/" ~/test.conf

上記のようなことを考えていますが、入力値に /(スラッシュ)があると、sedコマンドがエラーになってしまい、うまく置換ができません。
入力値に /(スラッシュ)がある場合でも正しく置換する方法はありますか?

また、/(スラッシュ)以外でもNGになってしまう文字はありますか?
その文字も正しく置換することは可能でしょうか。
84名無しさん@お腹いっぱい。:2012/12/13(木) 23:11:09.68
>>83
入力値に絶対入らない文字はある?
あれば / のかわりにそれを使う。

sed -e "s,${replace_str},${input}," ~/test.conf

みたいに。
85名無しさん@お腹いっぱい。:2012/12/13(木) 23:14:17.61
そんな文字を仮定できないなら、
$1中の / を \/ に置換してからinputに入れるしかないかな。
この置換がまたやっかいかもだが。
86名無しさん@お腹いっぱい。:2012/12/13(木) 23:29:11.48
replace_str=${replace_str//\//\\/}
たぶんこれでいけるでしょう
87名無しさん@お腹いっぱい。:2012/12/14(金) 12:41:31.89
>>83
\や&も特殊な意味を持つと思うよ
俺なら、sedを使わざるをえないなら$inputに使える文字に制限を付けるかな
88名無しさん@お腹いっぱい。:2012/12/14(金) 12:52:19.32
sed 's/%replace%/_replace_/g' | m4 -D_replace_="$input"
89名無しさん@お腹いっぱい。:2012/12/14(金) 20:54:59.74
>>87
相手がWebの先の人間だったりするとそういう制限は難しいんじゃ
90名無しさん@お腹いっぱい。:2013/01/03(木) 00:00:22.31
シェルスクリプトでHex値を書き換える事は出来ますか?

バイナリファイルAのHex値
00100000のようなものを01100000のように書き換えたいです。
駄目元で、
cat A | sed -

e 's/00100000/01100000/' > A
のようにやってみましたがダメでした。
91名無しさん@お腹いっぱい。:2013/01/03(木) 00:02:32.45
>>90
きみのsedは16進数値をかけるsedなのかい?
92名無しさん@お腹いっぱい。:2013/01/03(木) 00:23:12.33
>>91
やっぱり無理なんでしょうか。…
93名無しさん@お腹いっぱい。:2013/01/03(木) 01:02:55.97
bcかawkでも使っとけ
94名無しさん@お腹いっぱい。:2013/01/04(金) 01:11:51.48
シェルスクリプト バイナリファイル でぐぐると最初になかなか面白そうなのが出てきた
個人的にはperl使うのが楽だと思うけど
95名無しさん@お腹いっぱい。:2013/01/04(金) 10:22:05.55
96名無しさん@お腹いっぱい。:2013/01/05(土) 23:39:03.74
FreeBSDの/bin/shのソースって単体配布されてないのん?
97名無しさん@お腹いっぱい。:2013/01/06(日) 00:05:05.98
これを見る限り、それさえ既に魔改造版でしかないみたいw

ttp://www.in-ulm.de/~mascheck/various/ash/ash.png
98名無しさん@お腹いっぱい。:2013/01/06(日) 00:25:20.45
shのソースV7のでおなかいっぱい
99名無しさん@お腹いっぱい。:2013/01/06(日) 04:34:44.00
>>96
基本的に全部まとめて配布なのが
BSDの良い所の一つだよ。

でも単体取得する方法もある。
100名無しさん@お腹いっぱい。:2013/01/06(日) 09:24:06.28
その方法とは!?
101名無しさん@お腹いっぱい。:2013/01/06(日) 10:44:45.32
>>92
xxdで変換したの編集してからxxdで復元
102名無しさん@お腹いっぱい。:2013/01/07(月) 00:09:45.57
>>100
svnからゲッツ、じゃね
http://svn.freebsd.org/base/head/bin/sh/
103名無しさん@お腹いっぱい。:2013/01/07(月) 13:31:44.54
>>91
うちのsedは書ける
104名無しさん@お腹いっぱい。:2013/01/07(月) 22:27:46.05
>>102
僕のケータイでも読めた。
でもインストールがわからない。
みんなどーやってインストールしてるの?
僕のケータイリナックスってやつらしいけど
客がシェル使えるよーになってないから
これインストールしたら客もシェル使えるんだ。
でもインストールがわからない。
105名無しさん@お腹いっぱい。:2013/01/08(火) 11:07:30.16
>>104
configureしてmake install
106名無しさん@お腹いっぱい。:2013/01/08(火) 15:17:53.67
でもライブラリに分割されるとか魔改造されてて、あっさりとコンパイルできないのが常。
baseシステムに組み込まれてるのは取り出せないと思った方がいい。
107名無しさん@お腹いっぱい。:2013/01/08(火) 16:40:37.49
MINIX(86)のシェルを移植するのだ!
108名無しさん@お腹いっぱい。:2013/01/08(火) 18:03:08.60
フリーなの無いでしょ。
109名無しさん@お腹いっぱい。:2013/01/12(土) 21:11:02.86
2> /dev/null

2>&amp;-
って書くとまずいことあるの?

おしえて先生!
110名無しさん@お腹いっぱい。:2013/01/12(土) 22:41:52.39
>>106
ほとんど手が入っていないであろう net2 のソース持ってくるってのは?
111名無しさん@お腹いっぱい。:2013/01/13(日) 14:15:52.18
>>109
writeの失敗を検出するようなコードが書いてあると困る
112名無しさん@お腹いっぱい。:2013/01/13(日) 14:36:10.22
どこにですか?
113名無しさん@お腹いっぱい。:2013/01/13(日) 15:03:28.37
#include <unistd.h>
int main(){
if(write(2,"hello",5) == -1){
return 1;
}
return 0;
}
こんな感じかな。
114名無しさん@お腹いっぱい。:2013/01/19(土) 01:07:47.55
>>109 &amp;- ってどういう構文なの? htmlとか?
>>111 エラーを返さない方が困ります
115名無しさん@お腹いっぱい。:2013/01/19(土) 02:20:17.72
仕様変更した2chと、
それに対応してない専ブラ使うやつと、
&amp;が何かも知らずにつっこむやつ
116名無しさん@お腹いっぱい。:2013/01/19(土) 02:32:56.96
と、ドヤ顔で解説する奴と

ニヤニヤしながら傍観してるオレ。
117名無しさん@お腹いっぱい。:2013/01/19(土) 10:36:37.19
あー &ー なのか
失礼
118名無しさん@お腹いっぱい。:2013/01/19(土) 18:28:47.20
初心者だから使えるコマンドがlsとかなのは共通事項。
たまにネットがおかしいと聞くと言われて打った
ifconfigは command not found になったりするんだよね。
119名無しさん@お腹いっぱい。:2013/01/19(土) 18:39:44.08
ifconfigは/usr/sbinにあったりするからな。
120名無しさん@お腹いっぱい。:2013/01/19(土) 18:50:09.03
解決策を聞いてるんじゃないよ。(というか知ってるし)
そうそうと共感してくれればいいのに。
面倒臭い人ね。
121名無しさん@お腹いっぱい。:2013/01/19(土) 21:26:02.44
そういう大事なコマンドは/sbinだろ。
122名無しさん@お腹いっぱい。:2013/01/20(日) 00:53:25.44
どこにシェルスクリプト要素があるんだ?
123名無しさん@お腹いっぱい。:2013/01/20(日) 02:42:53.88
>>120
誰でも知ってるような事を書いて
共感しろとは、勘違いも甚だしい
124名無しさん@お腹いっぱい。:2013/01/20(日) 03:42:08.87
さすがに生まれたての赤ん坊は知らねぇだろ
125名無しさん@お腹いっぱい。:2013/01/20(日) 05:26:07.60
赤ん坊が無知を装うのは大昔からの通例だろ
126名無しさん@お腹いっぱい。:2013/01/20(日) 05:38:37.73
会話できない以上知ってるかどうか確認する手段がないからな。
127名無しさん@お腹いっぱい。:2013/01/20(日) 10:43:48.19
くだらない質問ですが、
次のシェルスクリプトで★マークに入る方法があれば教えてください。
ARG0="$0"
while [ -h "$ARG0" ]; do
ls=`ls -ld "$ARG0"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
  ★
ARG0="$link"
else
ARG0="`dirname $ARG0`/$link"
fi
done

処理時代はシンボリックリンクの実体を辿る処理だという事は調べて、
なんとか分かったんですが、★の処理にはいる条件がどうしても分かりません。
別に入らなくてもいいのですが、気になってしまって・・・
128名無しさん@お腹いっぱい。:2013/01/20(日) 10:50:31.37
絶対パスへのリンク、じゃないの?
129名無しさん@お腹いっぱい。:2013/01/20(日) 10:54:20.46
>>127
解答を聞いてるんじゃないよ。
そうそう、こういう構文だと条件がわかりにくいよねぇー、
って共感してくれればいいんだけど。
130名無しさん@お腹いっぱい。:2013/01/20(日) 11:06:43.97
ってかreadlinkを自分で分かりにくく書いてみたってことでいいの?
131127:2013/01/20(日) 11:12:54.89
>>128
ありがとうございます。
絶対パスで調べて、リンクを作りなおしたら通りました。
132127:2013/01/20(日) 11:25:51.23
>>130
Linuxを使い始めたばかりで、
とりあえず適当なソフトをWebを見ながらインストールしていました。
その中でTomcatというソフトをインストールするのに、
シェルスクリプトの設置が必要と書かれており、そのサンプルが記載されていました。
しかし、サンプルの意味が全く分からなくて、そのまま使っていいのかも分からず
一から調べている最中でした。
133名無しさん@お腹いっぱい。:2013/01/20(日) 13:47:00.29
>>130
http://svn.apache.org/repos/asf/commons/proper/daemon/tags/COMMONS_DAEMON_1_0_7/src/samples/Tomcat7.sh
の事だな。特定の環境にしか存在しないreadlinkは使いたくなかったんだろ。
素人は黙ってなよ。
134名無しさん@お腹いっぱい。:2013/01/20(日) 14:49:14.74
リテラシ高いな
感心感心
135名無しさん@お腹いっぱい:2013/01/23(水) 14:41:17.73
もし、Aのディレクト内が空だったら、○○しなさい

の一番簡単なスクリプトは?
136名無しさん@お腹いっぱい。:2013/01/23(水) 14:56:34.29
find A -empty | fgrep -x A >/dev/null && ○○
137名無しさん@お腹いっぱい。:2013/01/23(水) 15:51:12.07
解答を聞いてるんじゃないよ。
そうそう、ディレクトリが空かどうかの判断って簡単にできないよねぇー
って共感してくれればいいんだけど。
138名無しさん@お腹いっぱい。:2013/01/23(水) 16:51:23.23
簡単にできるけど、回答知りたくないらしいから黙っておこう。
139名無しさん@お腹いっぱい。:2013/01/23(水) 17:03:26.94
コピペやん
140名無しさん@お腹いっぱい。:2013/01/23(水) 19:43:01.34
>>137
さぁ、お前のハードリンクを数えろ
141名無しさん@お腹いっぱい。:2013/01/23(水) 20:37:43.99
それだと内部のディレクトリ数しかわかんねえよ
142名無しさん@お腹いっぱい。:2013/01/23(水) 21:01:24.46
141が何を主張しているのかエスパーお願い
143名無しさん@お腹いっぱい。:2013/01/23(水) 21:27:00.12
エスパーしよう。
>>141 は、ディレクトリのハードリンク数が2かどうかで空ディレクトリを判断しても、
それは「サブディレクトリ数+2」の値でしかないから、
内部のディレクトリ数が0で通常ファイルだけ存在する場合まで
空ディレクトリと誤判定してしまう、と主張しているようだ。

要するに、空ディレクトリ≠葉(leaf)ディレクトリ
144名無しさん@お腹いっぱい。:2013/01/23(水) 21:31:31.38
.と..が必ず存在するから、空ディレクトは存在しない。
ゆえに判定式は定数式。
145名無しさん@お腹いっぱい。:2013/01/23(水) 21:56:03.02
エスパーってほどじゃないだろ
146名無しさん@お腹いっぱい。:2013/01/23(水) 23:08:40.40
>>137
消してみればいいんだしね。
147名無しさん@お腹いっぱい。:2013/01/23(水) 23:09:52.41
権限がなかったり
148名無しさん@お腹いっぱい。:2013/01/24(木) 01:17:26.13
>>137
共感できない。
149名無しさん@お腹いっぱい。:2013/01/24(木) 05:53:53.02
教官!できない…
150名無しさん@お腹いっぱい。:2013/01/24(木) 08:38:20.39
ようするに >>141 は . と .. がリンク数に含まれることを知らないってことかな
151名無しさん@お腹いっぱい。:2013/01/24(木) 08:43:24.58
>>150
すでに>>143が解説済み。
152名無しさん@お腹いっぱい。:2013/01/24(木) 09:15:47.01
空ディレクトリが存在しないのであれば
rmdirはどのディレクトリも削除できないのでは?
153名無しさん@お腹いっぱい。:2013/01/24(木) 09:35:00.86
こまけぇことは気にしないで消せばいいんだよ
154名無しさん@お腹いっぱい。:2013/01/24(木) 11:20:22.52
>>152
空ディレクトリは.と..以外のファイル/ディレクトリが無いディレクトリのこと
155名無しさん@お腹いっぱい。:2013/01/24(木) 18:41:29.19
/a.appを起動
プロセスを終了

を5秒ごとに繰り返すコマンド書いてくださいな
156名無しさん@お腹いっぱい。:2013/01/24(木) 18:47:02.12
なんでそんな傲慢なの?
157名無しさん@お腹いっぱい。:2013/01/24(木) 18:51:36.35
そうそう、アプリを起動してプロセスを終了を、
5秒ごとに繰り返したりしたいこと多いよね、共感します。
158名無しさん@お腹いっぱい。:2013/01/24(木) 21:04:28.31
>>155
プロセスを終了 って、どのプロセスでもいい?
159名無しさん@お腹いっぱい。:2013/01/24(木) 21:33:59.04
>>155
while sleep 5;do pkill a.app;/a.app &;done

ほんとはpid拾うべきか。$?だっけ。
160名無しさん@お腹いっぱい。:2013/01/25(金) 01:43:15.60
$! な
161名無しさん@お腹いっぱい。:2013/01/25(金) 11:02:15.89
.appって拡張子はMac OS Xのbundleか?
だとするとopen -a /a.appだろうけど、まあapplescriptで書いた方がいいよ。
ジェントルに終了させられるし。
162名無しさん@お腹いっぱい。:2013/01/25(金) 11:31:59.01
applescriptって#がコメントにならないから
#!/usr/bin/osascriptって書けないんだよね…。
163名無しさん@お腹いっぱい。:2013/01/25(金) 11:46:54.65
ファイルの一行目だけ特殊扱いしてくれればいいんだけどな。
そういうLisp系のインタープリタある。(そもそもLisp系は行頭の#がちと特殊だが)
164名無しさん@お腹いっぱい。:2013/01/25(金) 13:38:52.29
>>162
2行目以降を使うスクリプトを書いてそれをシェバングにしたら?
165名無しさん@お腹いっぱい。:2013/01/25(金) 14:09:28.74
>>164
残念。
シェバングに指定できるのはバイナリだけ。(スクリプトじゃ駄目)
166名無しさん@お腹いっぱい。:2013/01/25(金) 16:53:20.52
>>165
じゃあperlかなんかで1行に凝縮させればおk
167名無しさん@お腹いっぱい。:2013/01/25(金) 16:57:50.64
あれ?バイナリじゃなくても動くぞ?
うちの壊れたか?
168名無しさん@お腹いっぱい。:2013/01/25(金) 17:47:21.06
shellが実行する場合もある。
169名無しさん@お腹いっぱい。:2013/01/25(金) 17:48:02.97
いずれにせよexecve(2)の中でやることだし、
最近は自分で処理するシェルもいるし。
170名無しさん@お腹いっぱい。:2013/01/25(金) 21:06:05.27
osascript は Leopard 以降なら sh-bang を理解するお。
171名無しさん@お腹いっぱい。:2013/01/25(金) 22:24:03.73
うろ覚えだけどbashの挙動は
とりあえずexec*してみる -> 駄目だったら/bin/bashで実行してみる
の2段構えだったような。
172名無しさん@お腹いっぱい。:2013/01/26(土) 13:02:07.76
FreeBSDだと #!インタプリタ にバイナリしか指定できないが、
Linuxだとインタプリタがスクリプトでも動くようだ。
173名無しさん@お腹いっぱい。:2013/01/26(土) 13:06:41.79
BSDはダメだな
ずいぶんと中途半端な意識だな
174名無しさん@お腹いっぱい。:2013/01/26(土) 17:08:04.37
>>172
だから、それはLinuxの機能じゃなくてbashの機能でしょ。
175名無しさん@お腹いっぱい。:2013/01/26(土) 17:11:06.38
_人人人人人人人_
> bashの機能 <
 ̄Y^Y^Y^Y^Y^Y ̄
176名無しさん@お腹いっぱい。:2013/01/26(土) 17:39:24.66
>>174
bashの機能じゃなくてカーネル(システムコール)のexecve(2)の機能なんだけど。
177名無しさん@お腹いっぱい。:2013/01/26(土) 19:52:37.75
178名無しさん@お腹いっぱい。:2013/01/26(土) 23:23:34.63
BSD系って結構厳密みたいだね。
#!/usr/bin/env PATH=/bin:/usr/bin:/usr/local/bin sh
のどこか適当なshを使ってという方法もできないような。
179名無しさん@お腹いっぱい。:2013/01/26(土) 23:31:57.82
それって厳密か?
180名無しさん@お腹いっぱい。:2013/01/27(日) 03:11:09.66
何を厳密といってるのか知らないけど、#!行ではオプションは一つしか指定できない。
↓これはダメ
#!/usr/bin/env PATH=/bin:/usr/bin:/usr/local/bin sh
181名無しさん@お腹いっぱい。:2013/01/27(日) 08:31:23.75
>>180
だから、それはFreeBSDの仕様じゃなくてashの仕様でしょ。
182名無しさん@お腹いっぱい。:2013/01/27(日) 08:38:44.48
_人人人人人人人_
>  ashの仕様 <
 ̄Y^Y^Y^Y^Y^Y ̄
183名無しさん@お腹いっぱい。:2013/01/27(日) 09:16:38.06
>>176
http://linux.die.net/man/2/execve
The interpreter must be a valid pathname for an executable which is not itself a script.
って書いてあるけど。

>>177
http://www.tamacom.com/tour/kernel/linux/S/11237.html#L19 だと
26 if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') || (bprm->sh_bang))
27 return -ENOEXEC;
となってるので、仕様変えたのかな。

これ、
# cat /bin/aho
#!/bin/baka

$ cat /bin/baka
#!/bin/aho

とループしてたらどうなる?
184名無しさん@お腹いっぱい。:2013/01/27(日) 09:31:47.72
>>183
仕様変えた。Linuxでも古いカーネルだと#!/スクリプトは不可。

#!スクリプトがループしてた場合は単にexecve(2)がエラーになるだけ。
一応ループ判定はしてるみたい。
185名無しさん@お腹いっぱい。:2013/01/27(日) 09:43:22.30
>>183
スクリプトのネスティングが4回程度でエラーになるようになってるから、
ループしてたらそれでエラーになる。無限ループでハマることはない。
186名無しさん@お腹いっぱい。:2013/01/27(日) 10:16:14.90
なるほど、
>>177
25 if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') ||
26 (bprm->recursion_depth > BINPRM_MAX_RECURSION))
BINPRM_MAX_RECURSIONまでは再帰するのか。
>>183の例では/bin/aho, /bin/bakaの実行を何回も試みてBINPRM_MAX_RECURSIONに
達してやっとエラーか。 ダサッ
187名無しさん@お腹いっぱい。:2013/01/27(日) 10:42:07.89
シンボリックリンクのループ検出と一緒だろ。OSによらず。
2つだけでループしててもMAXに達するまでずっとたどってようやくエラー。
188名無しさん@お腹いっぱい。:2013/01/27(日) 12:47:54.49
そういえばそうだな。でも自己参照くらいはその場でチェックしてもいいだろ。
$ cat /bin/aho
#!/bin/aho
189名無しさん@お腹いっぱい。:2013/01/27(日) 12:52:21.55
その場でチェック()
190名無しさん@お腹いっぱい。:2013/01/27(日) 13:55:52.24
Patches Welcome
191名無しさん@お腹いっぱい。:2013/01/27(日) 14:29:29.40
そもそも自己参照していない正常なスクリプトの方が圧倒的に多いんだから、
自己参照をチェックするとそのオーバーヘッドが、全ての正常なスクリプトにも
負担させられることになって、実行速度がかえって遅くなるかと。
192名無しさん@お腹いっぱい。:2013/01/27(日) 16:42:35.29
ファイルからの読み込み行ってるんだから、スクリプトファイル名の比較の
負荷なんてゴミでしょ。
193名無しさん@お腹いっぱい。:2013/01/27(日) 17:04:30.10
>>192 のプログラマのセンスのなさはわかった。
194名無しさん@お腹いっぱい。:2013/01/27(日) 17:42:33.16
>>193
具体的に解説ヨロシク
195名無しさん@お腹いっぱい。:2013/01/27(日) 17:53:16.99
まずコードを書け、話はそれからだ
196名無しさん@お腹いっぱい。:2013/01/27(日) 18:21:24.09
>>195
だよな
>>193には具体的なコードを示す義務がある
197名無しさん@お腹いっぱい。:2013/01/27(日) 18:25:49.84
>>196
何を言ってるんだ?コードの話をしているお前ら全員だよ
198名無しさん@お腹いっぱい。:2013/01/27(日) 19:34:09.72
>>187
> シンボリックリンクのループ検出と一緒だろ。OSによらず。

シンボリックリンクのループ検出なんてある?
どういった場合に検出する?
199名無しさん@お腹いっぱい。:2013/01/27(日) 19:56:14.74
>>198
$ ln -s hoge /tmp/hoge
$ cat /tmp/hoge
cat: /tmp/hoge: Too many levels of symbolic links
200名無しさん@お腹いっぱい。:2013/02/12(火) 18:33:08.66
ttp://d.hatena.ne.jp/m-hiyama/20071221/1198221671
some-command 3>&amp;1 >/dev/null 2>&amp;3 3>&amp;- | less

1番の値が最終的にどこいったのがかわからんのです・・・
1→3→2とコピーされて標準エラー出力になるんじゃないの?
201名無しさん@お腹いっぱい。:2013/02/12(火) 18:46:22.72
>>200
1は/dev/nullだよ。
202名無しさん@お腹いっぱい。:2013/02/12(火) 18:53:12.63
>>200
1は3経由で最終的に2にコピーされて、その状態でsome-command が実行されてる、
で合ってるよ。

その「2にコピーされたもの」はパイプの入力だから、
結果的にsome-commandの標準エラー出力がパイプにつながる。

some-commandの標準出力は >>201 のとおり /dev/nullに捨てられてる。
203名無しさん@お腹いっぱい。:2013/02/12(火) 19:05:35.88
リダイレクトは左から順番に解釈していけば良いよ。
(1) 3は1(標準出力)に向けられる。
(2) 1は/dev/nullに向けられる。
(3) 2は3(標準出力)に向けられる。
(4) 3は閉じられる。
結果として
1は/dev/nullに2は標準出力に向いてる。
204名無しさん@お腹いっぱい。:2013/02/12(火) 20:55:57.35
再度質問です
shの機能で >>200 みたいに だーってリダイレクトが出来るじゃないですか
その文法から「1」が最終的にどこ行ったのか わーって追跡したいんです
出来ますの?勿論ググりましたが、当方馬鹿なのでわかりません
サルでも分かるような回答を強く期待します
僕はこういう小バカにしたような書き方しか出来ませんが、凄く切実に知りたいです
さぁどうぞ↓
205200:2013/02/12(火) 21:09:43.68
うごごごご
206名無しさん@お腹いっぱい。:2013/02/12(火) 21:24:31.15
>>204
> aその文法から「1」が最終的にどこ行ったのか わーって追跡したいんです
ktrace とか truss とか strace ってのはダメ?
207名無しさん@お腹いっぱい。:2013/02/14(木) 11:04:26.66
シェル変数にコマンドを文字列として設定しておいて、それを実行したい。

CMD="printf '%x %x\n'" #これはダメ
$CMD 13 32
を実行して
printf '%x %x\n' 13 32
と同じ出力を得たい。
$CMD 13 32の行は変更不可。

CMD="printf '%x %x\n'"ではダメでした。
CMDにどのような文字列を与えると実現できるでしょうか?
bashの拡張機能を使ってもよいですが、なるべく使わない方向で。
208名無しさん@お腹いっぱい。:2013/02/14(木) 11:09:32.45
お題が不正確でした
> $CMD 13 32の行は変更不可。

$CMD 13 32

を含むシェルスクリプトがある。環境変数としてCMDを与えて
printf '%x %x\n' 13 32
と同じ出力を得たい。
CMDに
#!/bin/sh
printf '%x %x\n' "$@"
というスクリプトのパスを与える方法は思いつきましたが、スクリプトファイルを作成しないで実現したい。
209名無しさん@お腹いっぱい。:2013/02/14(木) 11:44:48.59
>>208
CMD='printf %x\040%x\n'

バックスラッシュが化けるので全角にしたので半角に直してね
210名無しさん@お腹いっぱい。:2013/02/14(木) 13:05:11.46
evalって知ってる?便利だよ
211名無しさん@お腹いっぱい。:2013/02/14(木) 13:12:07.63
>>210
> $CMD 13 32の行は変更不可。

evalも使用不可
212名無しさん@お腹いっぱい。:2013/02/14(木) 14:38:40.47
>>211
CMDの中にeval入れれば行けるだろ

CMD="eval print ..以下略
213名無しさん@お腹いっぱい。:2013/02/16(土) 14:38:00.54
>>212
それでOKでした。
214名無しさん@お腹いっぱい。:2013/02/16(土) 21:58:07.02
215名無しさん@お腹いっぱい。:2013/02/17(日) 00:35:16.20
ももクロはズリネタ探しをしている人には理解出来ないよ
216名無しさん@お腹いっぱい。:2013/02/17(日) 00:51:10.81
awkのprintで
1, print $2
2, print \$2
3. print\ \$2
1、2は2列目て事だと思うけど3てどうなるの?
217215:2013/02/17(日) 01:31:05.17
あれ・・盛大に誤爆ってたwごめん
218名無しさん@お腹いっぱい。:2013/02/17(日) 02:55:22.76
>>214
呼び出すところが変わってないから良いんじゃないの?
219名無しさん@お腹いっぱい。:2013/02/20(水) 21:18:41.67
2chの画像スレ開いて、Ctrl+aでコピーしたのをdl.txtにコピーしておいて
そのカレントフォルダでこれ実行すると、びっくりするほどユートピア
grep -E "(^http|^ttp)" dl.txt |sed -e "s/http/ttp/g; s/ttp/http/g"| wget -A jpg,png,gif -N -i -
220名無しさん@お腹いっぱい。:2013/02/20(水) 21:43:00.53
昔そういう事やってたけど
グロ画像が紛れ込んじゃうからやめたよ
安心してシコシコできない
221219:2013/02/20(水) 21:54:17.39
>>220
それなんだよ...URLのブラックリストとか出来ないかな?まぁ出来ても遅くなりそうだけど
222名無しさん@お腹いっぱい。:2013/02/20(水) 22:04:29.90
ブラックリスト作っておいてgrep -vで除外するくらいかな?
いちいちグロ画像調べてNG登録するのが嫌でね…
223名無しさん@お腹いっぱい。:2013/02/20(水) 22:48:10.03
grepしてからsedですか、そうですか
224名無しさん@お腹いっぱい。:2013/02/21(木) 00:53:50.25
>>221
専ブラ使えよ。
グロってレスがついてたら、モザイクかけてくれたり。
225名無しさん@お腹いっぱい。:2013/02/21(木) 01:03:43.88
>>219
スレとってくんのもwgetでいいだろ。なぜに手動。
226名無しさん@お腹いっぱい。:2013/02/21(木) 10:19:46.09
>>224
>グロってレスがついてたら、モザイク
それ便利そうだな! どこの専ブラ?
うちはかちゅ〜しゃ使ってるけど
227名無しさん@お腹いっぱい。:2013/02/21(木) 13:17:14.46
>>220
いやいや、落としたら、シコシコする前に、まず賢者モードで分類とか整理しろよ。
228名無しさん@お腹いっぱい。:2013/02/21(木) 15:56:58.86
>>227
モード切替どうやってするつもりだよ
229名無しさん@お腹いっぱい。:2013/02/21(木) 21:47:15.77
>>226
2chmate
230名無しさん@お腹いっぱい。:2013/02/22(金) 12:12:03.87
シェルスクリプト内でtarアーカイブ化するとき、アーカイブ名に変数を指定したいのですが、
エラーが出てtarが生成されません。なにが間違っているか教えてください。

strArch="~/Desktop/a.tar"
/usr/bin/tar cf ${strArch} 1.jpg 2.jpg 3.jpg
と書くと
/usr/bin/tar: ~/Desktop/a.tar: open 不能: No such file or directory
/usr/bin/tar: Error is not recoverable: exiting now
というエラーが出ます。

一方、
/usr/bin/tar cf ~/Desktop/a.tar 1.jpg 2.jpg 3.jpg
と書くと正常にa.tarが生成されます。
231230:2013/02/22(金) 12:13:52.84
環境はcygwinで、シェルはbashです。
232名無しさん@お腹いっぱい。:2013/02/22(金) 12:40:05.30
>>230
変数の中のチルダは展開されない。
$HOME/Desktop/a.tar
を使え。
233名無しさん@お腹いっぱい。:2013/02/22(金) 13:01:39.80
>>232
できました!
ありがとうございました。
234名無しさん@お腹いっぱい。:2013/03/06(水) 16:19:19.20
iPhoneのSBSettingsのトグルを押すとIMAProwlが起動するようにしたいのですが嵌りました。
/private/var/mobile/Library/SBSettings/Commandsにcom.hoge.imaprowl-launch-when-toggle-is-off
というスクリプトから、/private/var/root/scripts/に置いたprowlchk.shを実行してimaprowl.rbを起動
させたいのですが失敗してます。
ターミナルから直接prowlchk.shを実行すれば起動します。

com.hoge.imaprowl-launch-when-toggle-is-offの中身は
#!/bin/sh

touch /var/mobile/Library/Preferences/com.hoge.imaprowl.flagfile

echo "com.hoge.imaprowl-launch-when-toggle-is-off" >>/var/mobile/script.txt

source /private/var/root/scripts/prowlchk.sh

です。
235名無しさん@お腹いっぱい。:2013/03/06(水) 16:27:07.05
/private/var/root/scripts/に置いたprowlchk.shの中身は

#!/bin/sh

ps ax | grep '[i]maprowl'

if [ $? -eq 1 ]; then
cd /private/var/root/IMAProwl
./imaprowl.rb
fi

です。

private/var/mobile/Library/SBSettings/Commands/com.hoge.imaprowl-launch-when-toggle-is-off
をターミナルから実行すると、
883 s000 R+ 0:00.02 /bin/sh ./com.hoge.imaprowl-launch-when-toggle-is-off
となって、ログにボタンが押された事は出力されてますが、
/private/var/root/scripts/に置いたprowlchk.shは実行されずに、imaprowl.rbが起動しません。
検索してみてcdじゃなくドットコマンドやらsource使えだの試してみましたが、限界です。
アドバイス下さい。
236名無しさん@お腹いっぱい。:2013/03/06(水) 16:33:01.26
grep '[i]maprowl'
のところで、
com.hoge.imaprowl-launch-when-toggle-is-off
自身が引っかかっててif文の内部が実行されてないんじゃないの?
237名無しさん@お腹いっぱい。:2013/03/06(水) 17:07:14.83
>>236さん、全く気が付かなかったです、今からちょっと治して試してみます、ありがとうございます。
238名無しさん@お腹いっぱい。:2013/03/06(水) 17:18:45.56
ファイル名変えて動きました。
>>236さん有難う御座いました。助かりました。
239234:2013/03/06(水) 20:58:57.40
連投してすみません。
>>236さんのアドバイスで
/private/var/mobile/Library/SBSettings/Commandsにcom.hoge.imaprowl-launch-when-toggle-is-off
から
/private/var/root/scripts/prowlchk.shを実行させることが出来るようになったのですが、
IMAProwlがDaemon化に失敗しているのかすぐに落ちてしまいます。

ターミナルから直接/private/var/root/scripts/prowlchk.shを実行すると、
hoge:~ root# /private/var/root/scripts/prowlchk.sh
LoadConf: /private/var/root/IMAProwl/config.yml
hoge:~ root# Daemonized. PID=4412
All logs will be written into /var/root/logs/imaprowl.log.

となって、ps axで見てみると
4412 ?? S 0:02.23 /usr/bin/ruby ./imaprowl.rb
でstatがSでちゃんとimaprowlが動作するのですが、

com.hoge.imaprowl-launch-when-toggle-is-offからprowlchk.shを実行した直後に、
ps axで見ると
4549 ?? R 0:02.75 /usr/bin/ruby ./imaprowl.rb
でstarがRになっています。
もう一回ps axで見ると./imaprowl.rbが落ちています。

なんでSにならずにRになってしまうのか、全く見当が付きません。
prowlchk.shに不足や問題があるんでしょうか。
240名無しさん@お腹いっぱい。:2013/03/10(日) 20:45:09.98
cat のコマンドライン引数で指定できる参照ファイルの数はいくつなのか、どうしたらわかりますか
241名無しさん@お腹いっぱい。:2013/03/10(日) 21:09:19.61
>>240
ファイルの数での制限じゃなくて、引数(ファイル名)の文字列の合計のバイト数で制限される。

man sysconf で出てくる sysconf(_SC_ARG_MAX) の値が最大値。
普通2MB程度ある。
242名無しさん@お腹いっぱい。:2013/03/11(月) 09:14:37.19
>普通2MB程度ある。

「普通」と言い切るには辛いような。

>uname -sr; getconf ARG_MAX
FreeBSD 9.0-RELEASE-p3
262144

$ uname -sr; getconf ARG_MAX
Linux 2.6.18-194.11.4.el5
131072

$ uname -sr; getconf ARG_MAX
Linux 2.6.32-279.9.1.el6.x86_64
2621440
243240:2013/03/12(火) 01:55:55.14
なるほどめちゃよくわかりました
244名無しさん@お腹いっぱい。:2013/03/12(火) 06:45:07.31
なるほど普通のOSでは2.5MBほどあるんですね
245名無しさん@お腹いっぱい。:2013/03/12(火) 07:26:34.92
昔の普通のOSでは数KB程度だったよ
246名無しさん@お腹いっぱい。:2013/03/12(火) 09:39:44.34
windowsなんてもっともっと少なかったような。
247名無しさん@お腹いっぱい。:2013/03/12(火) 10:34:57.84
DOSは128バイト
248名無しさん@お腹いっぱい。:2013/03/12(火) 19:35:11.23
>>247
MS 系の OS はほとんど使ったことがないので聞くんだけど,

Unix 系でも, tty からの入力に対しては別の制限があること
はあるけど, それは, スクリプト内部の処理でも同様だったの?

だとすると, グロブの展開できないんじゃないの?
249名無しさん@お腹いっぱい。:2013/03/12(火) 20:06:02.97
MS-DOSはCP/Mと互換のメモリ配置で、CP/MではDMAバッファ領域(80H〜FFH)
だったところに初期値としてコマンドライン引数が展開された。
グロブの展開はシェルの仕事ではなく、プログラムが自分でやる。

MS-DOSの新しい奴は知らん。
250 忍法帖【Lv=4,xxxP】(1+0:8) :2013/03/12(火) 21:04:44.16
ps ax って人と ps -ef って人がいるんだけど、どっちなのよ
251名無しさん@お腹いっぱい。:2013/03/12(火) 21:08:27.16
ps axはbashの機能
252名無しさん@お腹いっぱい。:2013/03/12(火) 21:35:11.65
SYS-VとBSDの違いだろ
253名無しさん@お腹いっぱい。:2013/03/12(火) 22:16:08.23
DOSの話はよその板でやれよ。
254名無しさん@お腹いっぱい。:2013/03/13(水) 07:44:16.19
ps -efはDOSの機能
255 忍法帖【Lv=4,xxxP】(1+0:8) :2013/03/13(水) 07:53:20.45
>>254
Redhatで出来てるけど
256名無しさん@お腹いっぱい。:2013/03/13(水) 08:59:58.41
>>252
書く順番が逆じゃんw

linuxのpsはどっちも理解する。
257名無しさん@お腹いっぱい。:2013/03/13(水) 09:36:44.66
>>256
linuxっていうかGNUのpsな
258名無しさん@お腹いっぱい。:2013/03/13(水) 12:40:03.05
>>256
もとより順番揃えて書いてないんだけど・・・
259名無しさん@お腹いっぱい。:2013/03/13(水) 12:52:37.70
それは意識して揃えようよ
260名無しさん@お腹いっぱい。:2013/03/13(水) 17:23:13.42
構文が合ってるはずなのに、どうしても動いてくれないスクリプトがある。
メインスクリプトから裏で呼び出されるため、コンソール上でエラーを確認できなかった。
一晩みても、原因不明だった。 echo ここまでOK >>log.txt を随所に入れて
トレースデバッグすると、途中で止まる。あきらめて寝た。

翌日、再開したら1分で原因判明!
他言語とゴッチャになって、1箇所だけコメントの先頭をセミコロンにしてたwww
#に直したら一発起動。はぁあああああああああああ。

あとテストの [ $a =1 ] とイコールの次にスペースを開け忘れて、
常に不動作のif文もあった。

こういう超基本的な凡ミスに対して、作りたてのスクリプトを流し込むと
アラートを出すツールってありますか?
windows上でもシェル上でも、どちらでもおkです。
261名無しさん@お腹いっぱい。:2013/03/13(水) 17:40:25.41
>>260
それってどうやってミスなのか意図的なのか判断するんだよ?
キミがミスした所は使い方によっては正しい場合もあるんだよ。
262名無しさん@お腹いっぱい。:2013/03/13(水) 17:40:46.27
ありません。これ昔からだなぁ
ハイ次↓
263名無しさん@お腹いっぱい。:2013/03/13(水) 17:56:47.43
>>261
そりゃそうなんだけど、イコールの次にスペースないよ、とかwarningレベルで教えてくれるとか

http://server-retrieval.sakura.ne.jp/sakura/ga/g10.gif

こういうの、ないの?
264名無しさん@お腹いっぱい。:2013/03/13(水) 17:57:47.72
>>261
横槍を入れてすまんが、
「これってミスじゃねーの?」っていちいち指摘してくるコンパイラがあるのだから、
シェルスクリプトも同様の支援プログラムがあってもよいのでは。
需要があるのかどうか知らないが。
265名無しさん@お腹いっぱい。:2013/03/13(水) 18:25:45.28
sh -n
266名無しさん@お腹いっぱい。:2013/03/13(水) 18:26:09.13
>>263
ないよ。
267名無しさん@お腹いっぱい。:2013/03/13(水) 18:28:30.23
>>264
需要はあるね
走行するまでわからん、ってのはダサいからな
268名無しさん@お腹いっぱい。:2013/03/13(水) 18:29:08.34
>>263
その=はファイル名の=かもしれないからなぁ
[ $a =1 ]
はもしかしたらa='-d'でファイル「=1」がディレクトリかどうか
判断してる場合もあるよ
ところで数値のテストをしたいなら
[ $a -eq 1 ]
とした方が良いんじゃないかな
269名無しさん@お腹いっぱい。:2013/03/13(水) 18:33:28.83
>>268
warningはほしいよな
Cコンパイラですら = と == は警告対象だ
270名無しさん@お腹いっぱい。:2013/03/13(水) 18:38:16.82
たとえあったとして、「このセミコロンって#の間違いじゃね?」とか警告だすか?
それはそれでウザいんだが。
271名無しさん@お腹いっぱい。:2013/03/13(水) 18:42:23.86
>>263
必要だと思う人が作ればいいさ。
272名無しさん@お腹いっぱい。:2013/03/13(水) 18:46:38.57
そうだな自分が良く間違うパターンを検索するスクリプトを書けば良い。
他の人には必要ないよ。
273名無しさん@お腹いっぱい。:2013/03/13(水) 22:01:47.54
>>250
「カッコウはコンピュータに卵を産む」で、侵入者が使ったpsコマンドの
オプションから、SysVユーザーと看破していた。
274名無しさん@お腹いっぱい。:2013/03/13(水) 22:25:37.58
それわざわざ書き込むほどのことか?
275名無しさん@お腹いっぱい。:2013/03/14(木) 11:50:50.62
>>270
-n でチェックしてるときは出してほしいな
276名無しさん@お腹いっぱい。:2013/03/14(木) 11:51:35.63
>>273
まじか。そんなかっこいい小説だったのか。
277名無しさん@お腹いっぱい。:2013/03/14(木) 16:17:13.28
お尋ねします。
list.txtに
a 111
b 222
c 333
といった各行二つの要素のデータを格納しています。
それぞれの行について、一つ目の要素をファイル名に、二つ目の要素をファイルの中身に
しようと思います。
a.txtの中身は111
b.txtの中身は222
c.txtの中身は333
といったたぐいです。

書いたスクリプトは
#!/bin/bash
for a in `awk '{print $0}' list.txt`
do
for b in `awk '{print $1}' list.txt`
do
echo $a >$b.txt
done
done

とした結果全てのファイルの中身が111となってしまいました。
for文を理解出来ていないように思います。

どなたか救いの手をよろしくお願いします。
278名無しさん@お腹いっぱい。:2013/03/14(木) 16:29:15.04
while read filename data; do
echo "$data" > "$filename"
done < list.txt
279名無しさん@お腹いっぱい。:2013/03/14(木) 16:40:39.76
動きました。
readのあとに変数を並べればその順番に読み込むことを
教えていただきありがとうございました。

一行ずつデータを読むreadと
無限ループのwhileの組み合わせを用いると。
多謝
280名無しさん@お腹いっぱい。:2013/03/14(木) 16:56:50.18
いや無限ループじゃねーよ?
281名無しさん@お腹いっぱい。:2013/03/15(金) 10:43:03.35
もしもデータが無限なら?
282名無しさん@お腹いっぱい。:2013/03/15(金) 12:07:01.54
それは>>279がnamed pipeを知っている場合に限られる。
283名無しさん@お腹いっぱい。:2013/03/15(金) 12:14:48.15
思いのすべてをデータにして
284名無しさん@お腹いっぱい。:2013/03/16(土) 00:36:18.61
シェルとバッチって、癖の回避的に、どっちがクソ?
285名無しさん@お腹いっぱい。:2013/03/16(土) 00:48:46.58
>>282
いつかはマシンがお亡くなりになって終わるんじゃね?
286名無しさん@お腹いっぱい。:2013/03/16(土) 01:40:44.77
>>284
対話と一括を比較されても。
287名無しさん@お腹いっぱい。:2013/03/16(土) 01:54:23.55
シェルスクリプトとバッチって、癖の回避的に、どっちがクソ?
288名無しさん@お腹いっぱい。:2013/03/16(土) 02:24:05.98
何言ってるかさっぱり分からん。
癖の回避?
289名無しさん@お腹いっぱい。:2013/03/16(土) 02:51:57.34
>>287
シェルスクリプトでバッチ処理書けよ。
290名無しさん@お腹いっぱい。:2013/03/16(土) 02:57:24.95
燃料を投下したのにあっさり流された
291名無しさん@お腹いっぱい。:2013/03/16(土) 03:27:10.82
>>289
仕様の提示をお願いします
292名無しさん@お腹いっぱい。:2013/03/18(月) 10:03:03.01
対話型しか選べないコマンドってクソだと思うわ
293名無しさん@お腹いっぱい。:2013/03/18(月) 11:16:27.60
expectやptyがあれば怖いものはないです。
294名無しさん@お腹いっぱい。:2013/03/18(月) 12:18:58.23
expectやpty通さなきゃならないコマンドってクソだと思うわ
295名無しさん@お腹いっぱい。:2013/03/18(月) 12:47:55.91
ヒアドキュメントで良いじゃん
296名無しさん@お腹いっぱい。:2013/03/18(月) 14:06:22.94
>>295
おまえヒアドキュメントでsshのパスワード入力できんのかよ
297名無しさん@お腹いっぱい。:2013/03/18(月) 14:40:08.45
じゃあ冷やすとリングで
298名無しさん@お腹いっぱい。:2013/03/20(水) 09:12:19.32
>>296
ssh 自動化させるならパスフレーズ設定しない公開鍵作成しろよ。
299名無しさん@お腹いっぱい。:2013/03/20(水) 10:01:53.76
>>296
公開鍵使えよ。
300名無しさん@お腹いっぱい。:2013/03/20(水) 13:11:02.19
>>298
できないサーバがあるんだよ
301名無しさん@お腹いっぱい。:2013/03/20(水) 13:30:49.45
公開鍵とパスフレーズ両方使うよ (震え声)
302240:2013/03/20(水) 14:17:01.94
manが壊れて真っ白なんだけどどうしたらいいですか
303名無しさん@お腹いっぱい。:2013/03/20(水) 14:47:31.51
何言ってんだ。
304名無しさん@お腹いっぱい。:2013/03/20(水) 14:56:14.39
>>303
manのDBがぶっ壊れたんじゃねーの?
mandb -c
でもやっときゃ治るんじゃね?
305名無しさん@お腹いっぱい。:2013/03/20(水) 15:54:26.54
roffソースは見えるのか?
nroff -man とか -mandoc とかでは見えるのか?
306名無しさん@お腹いっぱい。:2013/03/20(水) 16:29:00.10
>>300
それは自動化するなってポリシーだろ。
307名無しさん@お腹いっぱい。:2013/03/20(水) 16:34:18.88
>>302
スレ違い
308名無しさん@お腹いっぱい。:2013/03/20(水) 16:50:03.97
>>306
そんなポリシー知ったことか
309名無しさん@お腹いっぱい。:2013/03/20(水) 18:25:40.65
>>308
ならヒアドキュメントに書けよ。
310名無しさん@お腹いっぱい。:2013/03/20(水) 18:47:24.36
元々は>>292
で、>>308 サーバーがクソだという結論(sshの場合は)
対話が必要ってことは人間(>>308)にも使い道があるってことだよ。
なるべく減らした方が良いのは言うまでもないけど難しいね。

すれ違いだけどsshにはssh-agentとかagent forwardとかあるから
そういうことにも配慮されてる。agent forwardするとbackgroundで
動かしつつlogoutすると新規に接続できなくなるけど。
311名無しさん@お腹いっぱい。:2013/03/20(水) 18:54:36.87
>>309
ヒアドキュメントじゃ動かないよ・・・
312名無しさん@お腹いっぱい。:2013/03/20(水) 18:56:53.20
パスワードでのrloginはできるけどssh/rshは使っちゃダメな会社はあるらしいね
リモートでシェルコマンド実行したいときは仕方なくexpect+rlogin使ってるらしい
何を考えてそういうポリシーになってるのかは謎
313名無しさん@お腹いっぱい。:2013/03/20(水) 19:48:21.83
>>311
expectの中に書くってことだよ。
314名無しさん@お腹いっぱい。:2013/03/20(水) 21:20:00.49
>>300
どうやってサーバーサイドで公開鍵のパスフレーズ必須にできるんだよ。
315名無しさん@お腹いっぱい。:2013/03/20(水) 21:40:52.89
できないと思いこんでる情弱だらけだな
316名無しさん@お腹いっぱい。:2013/03/20(水) 21:45:17.55
ssh1,ssh2ともにプロトコル上パスフレーズ送らないんだから、制限なんか出来るわけがない。
317名無しさん@お腹いっぱい。:2013/03/20(水) 21:46:23.08
そもそもパスフレーズは秘密鍵側に設定するものであってだね。
318名無しさん@お腹いっぱい。:2013/03/20(水) 21:47:36.65
「長いログインパスワード」だと思ってるんじゃねーの。
319名無しさん@お腹いっぱい。:2013/03/20(水) 21:58:29.79
「鍵認証を禁止してパスワード認証のみ許す」なら
出来るから、それと混同してるんじゃないかな。
320名無しさん@お腹いっぱい。:2013/03/20(水) 22:46:51.79
expectって古くない?それ専用でスクリプト書かないといけないし、tclが要るし。emptyってどうよ
321名無しさん@お腹いっぱい。:2013/03/20(水) 22:58:21.11
>>316
もう1つ方法があるだろ、知らないのか?
322名無しさん@お腹いっぱい。:2013/03/20(水) 23:33:19.79
>>321
ないよ。
323名無しさん@お腹いっぱい。:2013/03/20(水) 23:40:01.59
>>321
バカに教えておいてやる。rfc4252で定義されている認証方式は
7. Public Key Authentication Method: "publickey"
8. Password Authentication Method: "password"
9. Host-Based Authentication: "hostbased"
の三種類。このうち公開鍵を利用した認証方式は7と9
7,9のどちらもパスフレーズは送らない。
324名無しさん@お腹いっぱい。:2013/03/21(木) 00:14:14.88
あきらかに間違ったことを書いて適当に煽ると正しい情報が出てくる。
2chの情強視点の正しい使い方。
325名無しさん@お腹いっぱい。:2013/03/21(木) 00:44:29.26
何という高等テクニック
326名無しさん@お腹いっぱい。:2013/03/21(木) 01:09:02.59
>>324
たださらに間違いを重ねてくる場合も。微妙に間違える場合も。自分で確認しろってことやね
327名無しさん@お腹いっぱい。:2013/03/21(木) 01:29:06.00
>>314
サーバサイドってか、会社のポリシーで強制してんじゃないの。
328240:2013/03/21(木) 07:35:03.32
流れ無視してわるいけど
303、304、305、307さんありがとね
ちょっと試してみます
329名無しさん@お腹いっぱい。:2013/03/21(木) 11:34:13.49
うちのサーバは秘密鍵使えない仕様になってる
330名無しさん@お腹いっぱい。:2013/03/21(木) 19:29:52.66
>>327
「会社の方針」を↓このように説明する奴は会社員失格

> From: [300] 名無しさん@お腹いっぱい。 <sage>
> Date: 2013/03/20(水) 13:11:02.19
>
> >>298
> できないサーバがあるんだよ
331名無しさん@お腹いっぱい。:2013/03/21(木) 19:34:05.87
いつまでやってんだ。
332名無しさん@お腹いっぱい。:2013/03/21(木) 20:07:34.29
>>300が「できないサーバ」を解説すれば終了するんじゃないかな。
333名無しさん@お腹いっぱい。:2013/03/21(木) 23:24:51.13
商用で使ってるから sendmail に設定入れちゃダメだけど、
メールで毎日ヘルスチェックレポートをメールで飛ばしたい。
SW側で smtp も pop も閉じてる。
とか、意味の分かんない要望を満たすスクリプトを組んだことがある。

世の中、変態が多いと思ったよ。
334名無しさん@お腹いっぱい。:2013/03/22(金) 11:22:35.11
>>332
鍵を使わせてもらえない
335名無しさん@お腹いっぱい。:2013/03/22(金) 11:32:33.35
ここ何のスレだっけ。
336 忍法帖【Lv=8,xxxP】(1+0:8) :2013/03/23(土) 19:42:31.83
[[ ! -d hoge ]] && mkdir hoge
[ ! -d hoge ] && mkdir hoge
これってどっちも同じ?
337名無しさん@お腹いっぱい。:2013/03/23(土) 20:05:46.61
[[ ]] は bashの機能!

わざわざtestしなくても mkdir hoge 2> /dev/null でいいよ。
test方式だとクリティカルパスになるから不完全だし。
338名無しさん@お腹いっぱい。:2013/03/23(土) 20:13:10.91
>>336
[[ ! -d hoge ]] の場合、hogeにワイルドカードが含まれていても展開しない。
[ ! -d hoge ] の場合はワイルドカードを展開する、という違いがある。
339 忍法帖【Lv=8,xxxP】(1+0:8) :2013/03/24(日) 10:14:14.17
>>337,338
なるほど!ありがとう!
340名無しさん@お腹いっぱい。:2013/03/25(月) 00:31:16.37
シエルってやはりプログラム言語として万能では無いね
341名無しさん@お腹いっぱい。:2013/03/25(月) 00:47:35.18
あたりまえー。
342名無しさん@お腹いっぱい。:2013/03/25(月) 04:27:54.82
未だに万能なプログラミング言語に出会ったことがない。
汎用なら使っているが。
343名無しさん@お腹いっぱい。:2013/03/25(月) 09:11:43.16
>>337
[[ は bash じゃなくて ksh 由来。
344名無しさん@お腹いっぱい。:2013/03/25(月) 10:09:29.81
まぁ bash の機能ではあるな。
それ言ったら [ も bash の機能だけど。
345名無しさん@お腹いっぱい。:2013/03/25(月) 10:10:49.35
kshってポジックス()準拠じゃなかったのかよ
346名無しさん@お腹いっぱい。:2013/03/25(月) 10:46:57.85
市販のルータやNASに同梱されてるスクリプトを覗くとき

cd /home/LANDISK/scripts/
cat *.sh

ってやると、バイナリファイルが混じっててビビるんですが、
あれはなんなんですか。
347名無しさん@お腹いっぱい。:2013/03/25(月) 10:57:34.31
自己解凍のtar玉とかじゃないの
ファイル先頭部分のみシェルスクリプトになってて、
ファイル後半にtar玉とかのバイナリが連結されてる。
シェルはバイナリ部分を読む前にexitするし、バイナリ部分をtail -n +XXX とかで
取り出すからこれで動作できる。
348名無しさん@お腹いっぱい。:2013/03/25(月) 11:04:42.92
ただの文字化けじゃないの。
349名無しさん@お腹いっぱい。:2013/03/25(月) 11:23:49.36
どうも。文字化けではなく、でもなぜかしょっぱなからバイナリです。

setuser.sh
ELF

エディタで開くと、こんな感じです。
350名無しさん@お腹いっぱい。:2013/03/25(月) 11:37:57.53
だったら普通のELFのバイナリじゃん。ファイル名の統一上、*.shになってるだけ。
351名無しさん@お腹いっぱい。:2013/03/25(月) 11:43:03.16
牛肉偽装より悪質ですね。失望しました。
352名無しさん@お腹いっぱい。:2013/03/25(月) 11:52:02.76
file setuser.sh
353名無しさん@お腹いっぱい。:2013/03/25(月) 12:06:24.73
>>352
bash$ file
sh: file: command not found
354名無しさん@お腹いっぱい。:2013/03/25(月) 12:09:46.54
>>353
おそらくlddコマンドもないだろうから、

LD_TRACE_LOADED_OBJECTS=1 ./setuser.sh

してみ。動的リンクならライブラリが表示されるし、
静的なら not a dynamic executable ってなる。
355名無しさん@お腹いっぱい。:2013/03/25(月) 12:15:56.58
>>354
ありがとうございます。こうなりました。

# LD_TRACE_LOADED_OBJECTS=1 ./setuser.sh
libc.so.6 => /lib/libc.so.6 (0x2957c000)
libnss_dns.so.2 => /lib/libnss_dns.so.2 (0x296bb000)
libnss_files.so.2 => /lib/libnss_files.so.2 (0x296cf000)
libresolv.so.2 => /lib/libresolv.so.2 (0x296e9000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x29556000)

このようなバイナリファイルが中で何をしているのか可読化するには、
どこまで可能でしょうか。
356名無しさん@お腹いっぱい。:2013/03/25(月) 13:03:19.36
いいかげんスレ違い。
357名無しさん@お腹いっぱい。:2013/03/25(月) 13:14:51.48
LANDISKって玄箱だろ。とっくに解析しつくされてたんじゃねーの。
ソースだって入手可能だった気がするが。
358名無しさん@お腹いっぱい。:2013/03/25(月) 15:23:30.31
>>320
perlで動く expect.pm 使ってね
日本語マニュアル、古いのはあったんだけど公開サーバ無くなちゃったな
どうすっかな…
359名無しさん@お腹いっぱい。:2013/03/29(金) 22:14:00.55
diffでファイルをだーって比較すると相違行が表示されるじゃないですか
その相違行の違う文字の部分だけぱーっと色を付けて表示して欲しいんです
出来ますの?勿論ググりましたが、当方馬鹿なのでわかりません
サルでも分かるようなシェルそのものの回答を強く期待します
さぁどうぞ↓
360名無しさん@お腹いっぱい。:2013/03/29(金) 22:44:19.37
docdiff でぐぐるといいかも。
361名無しさん@お腹いっぱい。:2013/03/29(金) 23:57:55.81
>>359
GNUのsource-highlightとかでもいいの?
362名無しさん@お腹いっぱい。:2013/03/30(土) 21:06:24.18
>>359
二行の文字列の相違部分を目視で比較して認識でいないと
吐露していますか?

猿以下の認識能力しかないのに、猿が理解できるレベルの回答を得ても
無駄でしょうに。
363名無しさん@お腹いっぱい。:2013/03/30(土) 22:06:33.56
>>362
自分の文章(文字列)のtypoを発見できない人に言われても…
やっぱりハイライト表示あった方がいいわな
364名無しさん@お腹いっぱい。:2013/04/01(月) 10:49:45.08
>>362
できる/できない論と、効率化、処理コスト削減を同列に語ったら駄目だよ。
365名無しさん@お腹いっぱい。:2013/04/01(月) 11:25:52.57
>>363-364
弱いものいじめはよせ!
>>362だって一生懸命生きているんだぞ!
366名無しさん@お腹いっぱい。:2013/04/02(火) 00:19:37.72
>>362
涙拭けよ
367名無しさん@お腹いっぱい。:2013/04/07(日) 21:03:01.88
すいません。
教えてください。
sh=${SH:-/bin/bash}
と言う処理の
:-
ってどういう意味でしょうか?
368名無しさん@お腹いっぱい。:2013/04/07(日) 21:20:47.08
>>367
似たのがいろいろあるからman shした方が良い。
:-は「Use Default Values.」$SHだけど$SHがunset or nullなら/bin/bashになる。
369名無しさん@お腹いっぱい。:2013/04/07(日) 21:24:34.44
なるほど、bashの機能でしたか、、
370名無しさん@お腹いっぱい。:2013/04/07(日) 21:24:43.66
371名無しさん@お腹いっぱい。:2013/04/07(日) 21:25:16.12
>>369
bashに限らない。
372名無しさん@お腹いっぱい。:2013/04/07(日) 21:31:29.01
何を質問しても全部否定的に回答されるスレ
373名無しさん@お腹いっぱい。:2013/04/07(日) 21:36:24.43
んなこたーない。
374名無しさん@お腹いっぱい。:2013/04/07(日) 21:45:17.21
そうですね
そしてこれは否定的でない回答です
375名無しさん@お腹いっぱい。:2013/04/07(日) 21:46:56.83
すみません、if ! command ってどういう意味ですか?
「もし!」って強調してるんですか?
376名無しさん@お腹いっぱい。:2013/04/07(日) 22:00:51.30
ステータスの否定です。
377名無しさん@お腹いっぱい。:2013/04/08(月) 01:04:46.20
ネタ書き込む前にほんとに面白いかどうかいったん考えような。
378名無しさん@お腹いっぱい。:2013/04/08(月) 06:23:01.14
>>377
そう思うのはおまえのスキルの問題、もっと勉強しましょう
zshを極めた俺は腹抱えた笑ったぞ
HAHAHAHAHAHA
379名無しさん@お腹いっぱい。:2013/04/08(月) 08:57:53.24
かわいそうに…
380名無しさん@お腹いっぱい。:2013/04/08(月) 13:54:30.20
ネタを書いた奴がつまらんのはいいとして
つまらんものにつまらんってマジレスしちゃうバカは救いようがない
381名無しさん@お腹いっぱい。:2013/04/08(月) 13:58:20.19
つまらんものはつまらんってマジレスしちゃうバカは救いようがない
ってマジレスしちゃうバカは救いようがない
382名無しさん@お腹いっぱい。:2013/04/08(月) 14:05:52.15
>>380
つまらんものはつまらんと言っとかないといかんでしょ。
おもしろいと勘違いしたまま書き続けられたらたまらん。
383名無しさん@お腹いっぱい。:2013/04/08(月) 14:27:38.89
マジレス否定派ってマジだと勝てない人達だよな
384名無しさん@お腹いっぱい。:2013/04/08(月) 17:23:40.16
>>382
本当につまらんならつまらんとか書いちゃいかんでしょ。
「つまらん」の反応が欲しくて書き続けるから。
385名無しさん@お腹いっぱい。:2013/04/08(月) 17:24:20.77
>>384
1回は言っとかないと。
それでやめないようならもうしょうがない。
386名無しさん@お腹いっぱい。:2013/04/08(月) 17:52:19.80
つまらんだらけの掲示板なんて誰も読まない
つまらないなら自分が面白いことを書けばいいんでね?
つまらん だけ書いても誰も同意しねえよ
387名無しさん@お腹いっぱい。:2013/04/08(月) 18:23:14.76
やっぱり全部否定的に回答されるスレ
388名無しさん@お腹いっぱい。:2013/04/08(月) 18:45:53.94
別に同意求めてるわけじゃないもの。
389名無しさん@お腹いっぱい。:2013/04/08(月) 20:32:40.68
bashで
hoge=`command1 | command2`
としたときにcommand1,command2の返り値を得たいのですがどうすれば良いのでしょう。
${PIPESTATUS[@]}にはcommand2の返り値しか入らないようで。
うーむ。
390名無しさん@お腹いっぱい。:2013/04/08(月) 20:47:34.14
command2の返り値というよりサブシェルのパイプライン全体が親シェルの普通のコマンドになって、
その返り値が親シェルのPIPESTATUS[@]に入るから、親から見たコマンドはひとつしかないので値はひとつ。
391名無しさん@お腹いっぱい。:2013/04/08(月) 20:52:27.52
そんなのすでに知ってます
392名無しさん@お腹いっぱい。:2013/04/08(月) 20:58:57.19
set `command1 | command2; echo ${PIPESTATUS[@]}`
hoge=$1
echo $2 # command1の返り値
echo $3 # command2の返り値

…じゃ駄目か
393名無しさん@お腹いっぱい。:2013/04/08(月) 21:09:03.19
そんなのもちろんだめです
394名無しさん@お腹いっぱい。:2013/04/08(月) 22:06:41.78
質問者です。
解答ありがとうございます。

>>391 >>393
の失礼な方は私ではありません。
395名無しさん@お腹いっぱい。:2013/04/08(月) 23:18:36.07
>>389
素直にこれじゃいけないの。
hoge=$(command1)
fuga=$(echo $hoge|command2)
396名無しさん@お腹いっぱい。:2013/04/08(月) 23:28:03.96
そうやって書いてくと、スクリプトさしいスマートさが消えますよね。
他のbashスクリプトを見てますけど、例外処理って一部しかしていない。
そんなものですか?
397名無しさん@お腹いっぱい。:2013/04/09(火) 05:19:45.47
何故標準出力とPIPESTATUS全てが必要になるかだな。
command1が失敗したら終了させるには pipefail で十分だし
一個でも処理が失敗したら終了させるには set -e でいい

>>396の想像する完璧な例外処理とスクリプトのスマートさってのは良く分からんが
少なくともtry...catchみたいなのが言語に用意されていない以上すっきりした解決策はないんじゃなかろうか
まあ普通のプログラミング言語でも必要になるのは最後の例外だけで
PIPESTATUS全てが必要になることなんて滅多にないんだが
398名無しさん@お腹いっぱい。:2013/04/09(火) 07:29:49.70
> ${PIPESTATUS[@]}にはcommand2の返り値しか入らないようで。
PIPESTATUSにはhoge=の結果、すなわち変数hogeへの代入の終了ステータスが入る。
hoge=`command1 | command2; echo ${PIPESTATUS[@]} >file`
でfileから読める。
399名無しさん@お腹いっぱい。:2013/04/09(火) 08:44:52.50
一時ファイルとかmkfifo使っていいならいくらでも方法はあるな
400名無しさん@お腹いっぱい。:2013/04/09(火) 09:03:27.73
後出しならいくらでも方法はあるな。
401名無しさん@お腹いっぱい。:2013/04/09(火) 09:29:22.70
set -o pipefail
知りませんでした。
402名無しさん@お腹いっぱい。:2013/04/09(火) 10:02:07.14
質問する人はトリップつけといた方がいいね。
403名無しさん@お腹いっぱい。:2013/04/09(火) 10:34:37.23
pipefailの動きがよくわからない
とちゅうでエラーになったら中断してそのエラーになったプロセスの
エラーコードを返すの?
404名無しさん@お腹いっぱい。:2013/04/09(火) 11:11:29.31
rightmost command to exit with a non-zero status
405名無しさん@お腹いっぱい。:2013/04/09(火) 11:14:31.68
そんなのもちろん知ってます
406名無しさん@お腹いっぱい。:2013/04/09(火) 12:58:14.15
最後から2番目のコマンドのエラーを持ってくるの?
407名無しさん@お腹いっぱい。:2013/04/09(火) 13:07:13.14
rightmost の英語の意味通り
408名無しさん@お腹いっぱい。:2013/04/09(火) 21:31:54.15
for file in hoge*; do ... done 的なことをするときに hoge* にマッチするファイルがない
と、file に hoge* そのものが渡されてしまいますよね? これに対して
1) マッチしないときは何もしない or 2) マッチしなかったことを知りたい という挙動に
したいのですが、何かいい方法はありますかね?

今のところ 1) のためにループ内で -f $file を調べているのですが、
ちょっとどうにかならないかなあと思いまして。
409名無しさん@お腹いっぱい。:2013/04/09(火) 21:36:47.77
というかまあアスタリスクの挙動のことですよね。

何もマッチしないときだけパターンそのものを返されても誰得?
個人的には何も返さないでほしいような。
もしかしてパターンそのものが返ってきてるかどうかをチェックすることにより
マッチングの状況を調べることが想定されてるとか?
410名無しさん@お腹いっぱい。:2013/04/09(火) 21:42:52.49
>>408
shopt -s nullglob

>>409
すみませんが詳しい方のみ回答をお願いします
411名無しさん@お腹いっぱい。:2013/04/09(火) 21:51:21.35
いや、408と409同一人物だろ
412名無しさん@お腹いっぱい。:2013/04/09(火) 21:52:55.88
>>410
おおそんなものが。ありがとうございます。

ちなみにPOSIXなshの範囲で同様なものはないですよね? bashでないshを
使うときもあるので...
413名無しさん@お腹いっぱい。:2013/04/09(火) 21:53:48.33
ああすいません 408 = 409 です。ひとりボケひとりつっこみすみません。
414名無しさん@お腹いっぱい。:2013/04/09(火) 22:02:46.38
何もマッチしないときにパターンそのものを返す理由

xterm -fn -*-fixed-medium-r-normal--14-*
みたいな感じでアスタリスクそのものをコマンドに渡すことがある。
たまたま-*-fixed-...みたいなファイルがカレントにある確率は無視できるので、
そのままパターンそのものを返すという仕様の方がコマンドラインではありがたい。

xterm -fn '-*-fixed-medium-r-normal--14-*'
みたいにきちんとクォートするのが厳密ではあるが。
415名無しさん@お腹いっぱい。:2013/04/09(火) 22:55:49.85
>>414
なるほど。
ちなみにそれはどこかからの引用でしょうか? どこかにこの展開ルールの
意味が説明されているのかなあと。

>みたいにきちんとクォートするのが厳密ではあるが。

ですかね。久しぶりにxfontselを覗いてみたら、私の環境では&や空白を含む
名前があったりするのでクォートしないとうっかりやらかしそうです。
416 忍法帖【Lv=9,xxxP】(1+0:8) :2013/04/14(日) 22:23:25.30
findであるファイルより古い一覧って出来る?
! -newer やったらあるファイルも含まれるよね?
417名無しさん@お腹いっぱい。:2013/04/15(月) 01:55:26.21
418 忍法帖【Lv=9,xxxP】(2+0:8) :2013/04/15(月) 02:10:38.74
ごめんggっても見つからんかった。
! -newer やったらその時間も含まれちゃうよね?
419名無しさん@お腹いっぱい。:2013/04/15(月) 07:11:37.16
! -name そのふぁいる
420名無しさん@お腹いっぱい。:2013/04/15(月) 07:24:31.73
>>419
それでも そのふぁいる 以外のその時間も含まれちゃう
421名無しさん@お腹いっぱい。:2013/04/15(月) 20:46:51.65
悪いけど !-newer からあるファイルと同時刻のものを
取り除かないというシチュエーションが思いつかない。
同時かどうかなんてファイルシステムの時間精度によって異なる訳だし。
422名無しさん@お腹いっぱい。:2013/04/15(月) 20:49:25.92
きっついな〜
423名無しさん@お腹いっぱい。:2013/04/15(月) 22:23:40.92
差分backupだと前回生成したファイルを参考にして含みたくない時はある。他のとこに置いとけと言われれば、そのとおりだけど。
+newerってなかったっけ。
424 忍法帖【Lv=10,xxxPT】(1+0:8) :2013/04/15(月) 22:23:55.60
>>421
日単位や月単位のディレクトリに更新日でファイルを振り分けたいのよ
例えば、

mkdir 2013-01
touch 201301010000 start
touch 201302010000 end
find . -newer start ! -newer end | xargs -I{} mv {} 2013-01

みたいな。
んでも、201302010000のファイルも移動しちゃうじゃんね。逆に201301010000のファイルは移動しないし……
なんかいい方法ある?
425名無しさん@お腹いっぱい。:2013/04/16(火) 00:54:28.67
find2perlつかえ
426名無しさん@お腹いっぱい。:2013/04/16(火) 18:57:33.17
初めてスクリプト触ったんだが、これelifとかオプションが-rみたいにかなり省略してるんだけど何か理由があるの?
renameとか分かるように書きたいんだが、何か方法は有りますか?
427名無しさん@お腹いっぱい。:2013/04/16(火) 19:01:10.23
変わったやつだな。
それぞれの言語に流儀ってもんがあるんだ。
どう考えてもそのまま覚えたほうが身のためだろ。
428名無しさん@お腹いっぱい。:2013/04/16(火) 19:52:45.30
>>426
理由なんてないよ

昔の人がそうやって短縮してそのまま放置して
今なおそうとしても 昔のコードが動かなくなるから
もうにっちもさっちもいかなくなってるだけ
429名無しさん@お腹いっぱい。:2013/04/16(火) 20:12:34.44
>>427
長くてもパッと見てどういう処理なのか分かりたいんだ
オプション覚えろって言われたらそれまでだが
430名無しさん@お腹いっぱい。:2013/04/16(火) 20:13:20.18
はいそれまでです
431名無しさん@お腹いっぱい。:2013/04/16(火) 20:15:03.29
bashはスクリプトであると同時に毎日書くものだからな
$ tar zxvf hage.tar.gz
ってタイプすれば済むところを
$ tapeArchiver --gzip --extract --verbose --file hoge.tar.gz
とは書きたくないだろ。
まあ最近は長いオプションと短いオプション両方用意してるのも多いけど。

あとelifとかelse if とかelsifの違いは本当に好みの問題だな。
elifに文句行ってたらpythonなんて使えんぞ
432名無しさん@お腹いっぱい。:2013/04/16(火) 20:26:00.52
pythonなんて誰も使ってないから大丈夫
433名無しさん@お腹いっぱい。:2013/04/16(火) 22:37:18.08
elif大好き!
434名無しさん@お腹いっぱい。:2013/04/16(火) 22:58:56.66
このALGOL主義者め!
435名無しさん@お腹いっぱい。:2013/04/17(水) 00:02:40.83
>>426
#
436名無しさん@お腹いっぱい。:2013/04/17(水) 00:13:35.86
>>426
alias
437名無しさん@お腹いっぱい。:2013/04/17(水) 00:50:48.02
>>429
慣れろ。よく使われるオプションなんて、似たり寄ったりだ。長い物には巻かれとけ。
-v は verbose
-h は help
-f は force
-f は file
-r は…シラネ。
438名無しさん@お腹いっぱい。:2013/04/17(水) 01:07:51.84
r は --recursive だろ?
439名無しさん@お腹いっぱい。:2013/04/17(水) 01:32:02.46
-v は --version だな
440名無しさん@お腹いっぱい。:2013/04/17(水) 01:49:06.96
--dry-runとか--sumilationとか--testとか、大事なやつなので統一してほしいな。-nが多い気がするけど。
441名無しさん@お腹いっぱい。:2013/04/17(水) 05:34:53.54
趣味レーション?
442名無しさん@お腹いっぱい。:2013/04/17(水) 06:44:29.58
コンバットレーショーン
て歌あったよな
てんむすだっけ
443名無しさん@お腹いっぱい。:2013/04/17(水) 07:17:40.10
>>440-441
カタカナ表記でそれ間違える奴よくいるが、英語スペルで間違えてる奴初めて三田。
444名無しさん@お腹いっぱい。:2013/04/17(水) 08:40:04.91
>>443
あースマフォのゴダン入力で悩んだ末に間違えたよ。qwertyキーボードなら指が勝手に動くだろうから大丈夫。
445名無しさん@お腹いっぱい。:2013/04/17(水) 09:36:01.74
>>426はこの際オプションのm17nやれ。
-r, --recursive
-再, --再帰
な。
446名無しさん@お腹いっぱい。:2013/04/17(水) 09:39:18.82
コマンドオプションはビックリするほど統一感ないけど
-r はそのなかでも飛びぬけてバラバラだよな
447名無しさん@お腹いっぱい。:2013/04/17(水) 09:48:24.98
まだ - を使うだけ統一されてる。
ddコマンドなんとかしろ。if= of= bs= とか、UNIXのコマンドじゃないみたいな世界観。
448名無しさん@お腹いっぱい。:2013/04/17(水) 10:33:08.22
tarのオプションもいやだな
まああれはシンタクスシュガーだけど
449名無しさん@お腹いっぱい。:2013/04/17(水) 10:34:13.40
getoptsでついでにusageの書き方も定義してほしかったな
450名無しさん@お腹いっぱい。:2013/04/17(水) 10:35:08.44
>>448
最近はハイフンつきオプション使えるtarも多いっしょ。
451名無しさん@お腹いっぱい。:2013/04/17(水) 11:39:48.22
>>450
そうなのか
あれハイフン使えるのって最近の話だったのか
逆に思ってた
UNIX文化は業が深いな
452名無しさん@お腹いっぱい。:2013/04/17(水) 12:42:32.11
tarのoptionはarから来ていて、
arとかddは他のOSの類似コマンドの模倣だったはず。
(t)ar, dd, findが鬼門かな?
cpioもdebianのdpkgが使ってるんだっけな?
453名無しさん@お腹いっぱい。:2013/04/17(水) 13:24:50.18
cpio使ってるのはrpmだったと思う
debはar系だな
454名無しさん@お腹いっぱい。:2013/04/17(水) 13:33:31.99
いーかげんな知識で語るやつばっかだな。
455名無しさん@お腹いっぱい。:2013/04/17(水) 15:11:02.40
どこがいい加減なのか正解込みで指摘してみろ
456名無しさん@お腹いっぱい。:2013/04/17(水) 15:13:04.79
>>450とか>>453とかでもう指摘されてるよ。
457名無しさん@お腹いっぱい。:2013/04/17(水) 15:59:03.36
それはおれだ
458名無しさん@お腹いっぱい。:2013/04/17(水) 19:38:24.54
>>452
psのオプションのカオスっぷりに比べればまだ分かり易い方だと思う
459名無しさん@お腹いっぱい。:2013/04/17(水) 20:23:31.15
まあ色々だね
headとかの+スイッチとか、commの-123とか、
460名無しさん@お腹いっぱい。:2013/04/17(水) 20:43:44.35
head/tail の +スイッチは、ポジックス()によって潰されました
461名無しさん@お腹いっぱい。:2013/04/17(水) 21:33:08.69
>>459
headの + ってどんなのなのなの?
462名無しさん@お腹いっぱい。:2013/04/17(水) 21:44:13.25
head +3
ファイルの末尾3行を除いて表示
463名無しさん@お腹いっぱい。:2013/04/17(水) 21:52:02.52
head -n -3 で桶
464名無しさん@お腹いっぱい。:2013/04/17(水) 21:57:46.87
ddは許してやれ。ccに名前取られてスネてる。
465名無しさん@お腹いっぱい。:2013/04/17(水) 21:58:20.81
+ じゃなくて - の話だが、

tail -5 とかが突然使えなくなって tail -n 5 に書き換えろという話だったが
既存スクリプトへの影響が大き過ぎて
結局 tail -5 とかの形式だけは使えるようにされたんだよな。
466名無しさん@お腹いっぱい。:2013/04/17(水) 22:17:23.08
cc if=hoge.c of=hoge optimize=2 strip=true library=libXt,libX11,libm
467名無しさん@お腹いっぱい。:2013/04/17(水) 23:03:00.57
老害のせいで、むちゃくちゃな言語
468名無しさん@お腹いっぱい。:2013/04/18(木) 09:10:20.74
>>460
sort も忘れるな。
469名無しさん@お腹いっぱい。:2013/04/18(木) 09:17:44.11
>>458
psがカオスなのはlinuxだけじゃね?
BSDとSysVはまったく違うけど、それぞれの中では一貫してる。
linuxはそのまったく違うものを両方使えるようにした上で
さらにgnu long optionsも採用するとかいうバカなことをやって混乱の極みに。
470名無しさん@お腹いっぱい。:2013/04/18(木) 22:08:44.74
某書に、使うpsのオプションで侵入者の素性が分かるというエピソードがあったな
471名無しさん@お腹いっぱい。:2013/04/21(日) 20:35:11.01
/bin/sh、もう使いたく無くなって来た‥
ユーティリティのコマンドオプションに統一性が無いって、どうしてこうなってしまったんだろう
472名無しさん@お腹いっぱい。:2013/04/21(日) 20:41:46.60
/bin/shが使いたくないなら/bin/tcshでも
/usr/local/bin/bashでも/usr/local/bin/zshでも
好きなシェル使えばいいじゃない
473名無しさん@お腹いっぱい。:2013/04/21(日) 21:12:21.58
>>472
いまどき、/bin/bash じゃないの?
474名無しさん@お腹いっぱい。:2013/04/21(日) 21:18:16.31
FreeBSDですしおすし
475名無しさん@お腹いっぱい。:2013/04/21(日) 21:27:21.72
>>471 のいう/bin/shって、/bin/shに限らずシェル一般っていう意味だろ。
ユーティリティのコマンドオプションに統一性が無いとか言ってるし。
それはどのシェルでも変わらない。
476名無しさん@お腹いっぱい。:2013/04/21(日) 21:27:45.57
UNIX じゃないじゃん
477名無しさん@お腹いっぱい。:2013/04/21(日) 21:29:31.89
シェル一般?に対して、/bin/sh とは言わないでしょ?
478名無しさん@お腹いっぱい。:2013/04/21(日) 21:31:17.80
>>477
471はよくわかってないからシェル一般に対して、/bin/shと言ったりする。
479名無しさん@お腹いっぱい。:2013/04/21(日) 21:33:16.90
>>477
もし本当の/bin/shの意味だったら、
「ユーティリティのコマンドオプションに統一性が無い」
の文章につながらない。
480名無しさん@お腹いっぱい。:2013/04/21(日) 21:37:08.55
そこまで推し量ってやることも無いでしょ?
ほんとのとこは本人しかわかんないんだし。
「ユーティリティのコマンドオプションに統一性が無い」ってのも、
別にその「シェル一般?」とも関係ないし
481名無しさん@お腹いっぱい。:2013/04/21(日) 22:11:48.86
>>471
そろそろ正解発表を頼む。
482471:2013/04/21(日) 22:40:23.29
ユーティリティのコマンドオプションに統一性が無い、どうしてかな
というのが今の疑問です

/bin/shならびにUNIXシェル一般に興味無くしたってのは早とちりでしたご免ください
いつもお世話になってます
483名無しさん@お腹いっぱい。:2013/04/21(日) 23:02:39.87
オプションを統一するなんて無茶な話だし、使っていればおぼえれるし、ヘルプも参照しやすいからあまり気にしたことなかったなぁ。

バージョン表示とオンラインヘルプだけは、統一あっても良い気がするな。
たまーに違うのが混ざっているからなやましい
484名無しさん@お腹いっぱい。:2013/04/22(月) 00:00:32.49
オンラインヘルプが統一されてないってのは、man と info が混在してることを指して言ってるの?
485名無しさん@お腹いっぱい。:2013/04/22(月) 00:04:04.98
オプションって、なんで棒1本と2本とバラバラなの?
--help
とか
-h
とか

省略形と思ったら、そうでもないし、どうなってんの
486名無しさん@お腹いっぱい。:2013/04/22(月) 00:05:00.13
>>482
君が1人で全部作り直せば互換性がうまれるよ。でもショートのオプション数は限りがあるね。どのように設計するのか見物です。
>>483
man hogeで統一されている。Sh組み込みはshのmanかhelpにしかなかったりするか。
487名無しさん@お腹いっぱい。:2013/04/22(月) 05:09:33.94
>>485
具体的にどのコマンドのどのオプションが不満で
自分が開発者ならどういう名前に変更するか挙げてみてくれ
488名無しさん@お腹いっぱい。:2013/04/22(月) 05:15:05.29
>>485
基本的に、GNU形式の長いオプションが -- で、
旧来の短い(一文字)オプションの場合が - でしょ?

ちなみにコマンドラインから直接実行する場合は短いオプションで、
スクリプト等に記述する場合は(分かりやすくするため)長いオプションを使ったりする。
489名無しさん@お腹いっぱい。:2013/04/22(月) 14:59:57.78
>>488
オプションの意味がアプリごとにバラバラで統一感無い
ってのが統率取れてない印象を与えると思う。
490名無しさん@お腹いっぱい。:2013/04/22(月) 16:13:56.87
>>489
アプリの中で統一されていれば、他のアプリと異なっていても構わないと思うが。
他のアプリやインターフェイスと統一するなら、どこまで統一するのかその範囲は?
Windows/MacOSX/Unix系を全て統一?
GNUアプリを全て統一?
491名無しさん@お腹いっぱい。:2013/04/22(月) 17:08:44.33
>>490
そんなでかい話じゃないが、紳士協定レベルというか
オプションの意味のガイドラインくらいあってもよかったよな
-vや-hの意味くらい統一しとけよという
492名無しさん@お腹いっぱい。:2013/04/22(月) 17:21:27.15
まぁ今から統一するのは無理だから
あきらめて覚えるしかないよ。
493名無しさん@お腹いっぱい。:2013/04/22(月) 19:12:57.59
一番意味がたくさんあるオプションってどのアルファベットかな
-iや-rなんかはけっこう上位に食い込むと思う
494名無しさん@お腹いっぱい。:2013/04/22(月) 19:14:57.79
あきらめておぼえないw
495名無しさん@お腹いっぱい。:2013/04/22(月) 19:26:36.66
統一されたところで完全じゃなきゃ結局man引くことになるじゃん
んで他のプラットフォームは統一されてんのかっていう
496名無しさん@お腹いっぱい。:2013/04/22(月) 19:35:58.93
一つ、コマンドの引数は、操作対象(主にファイル名)を表すものとす
一つ、コマンドの動作に関するオプショナルな指定は、ハイフン+アルファベット一文字とす
一つ、オプションのアルファベットは、それを表す英単語の先頭の一文字になるよう努めるものとす

複数のオプション指定はハイフンの後に同時に書いても良いことにする(例 ls -la)
追加で指定してもよいオプションではなくて、原則指定すべきサブコマンドはハイフンはなしにする(例 tar x)
こういうのも暗黙のルールに加わった。

こういうルールは、決まりがあるわけではなく、コマンド作成者がなんとなくそうしている約束事だった。

コマンドがバージョンアップし、オプションが増え、文字が足りなくなったり、被ったりが目立つようになった。
さらにBSD系、System/V系に分岐し、それぞれでコマンドのオプションが追加された。
コマンドの私家版が独自に配布されたりして、もう大変な状況に…

GNUコマンドが降臨し、ハイフン+一文字形式に加えてハイフン+ハイフン+文字列(等号+文字列)形式が普及、今日に至る。

-h や -v が同じじゃないのは、別々の意味で先に使っていたから仕方ない。
497名無しさん@お腹いっぱい。:2013/04/22(月) 19:57:02.89
ここでどれだけ文句言ったってオプションが統一される訳ないんだから
オプション統一して欲しい人はコマンドラインアプリの作者にメール送ったらいいんじゃないの
それか自分自身か思うオプションに変更するラッパーでも書くか。
498名無しさん@お腹いっぱい。:2013/04/22(月) 21:07:57.82
>>486
用語間違えてた?
manでなく、--helpとかで出てくるやつをオンラインヘルプ言うと思ってた。

一応、GNU系ならhelpとversionはコード規約的な指標にはなってた気がする。helloworldレベルだけど。。。
499名無しさん@お腹いっぱい。:2013/04/22(月) 22:47:59.51
500名無しさん@お腹いっぱい。:2013/04/22(月) 22:55:36.85
GNU的なものを作るための規範として、その名もGNU helloというプログラムがあるな。
501名無しさん@お腹いっぱい。:2013/04/22(月) 23:43:29.70
あれは規範ていうか例じゃね。
502名無しさん@お腹いっぱい。:2013/04/22(月) 23:44:15.62
なんで開発者って、思いつきでオプション作るの?
おまえのせいでみんな迷惑してるんだけど
503名無しさん@お腹いっぱい。:2013/04/23(火) 00:00:55.59
んじゃどうやってオプション決めればいいの?
504名無しさん@お腹いっぱい。:2013/04/23(火) 00:06:06.60
憲法で規則を作ればいい
505名無しさん@お腹いっぱい。:2013/04/23(火) 01:45:12.76
憲法が何かわかってないだろ。
506名無しさん@お腹いっぱい。:2013/04/23(火) 02:12:16.82
>>502
そんなにみんなが使ってくれるとは思わなかったから。コマンドラインよりAPIから呼ぶのが殆どとかもあるかもだけど。

>>498
そういう解釈もあると思う。
ただドキュメント読むためだけにプログラムを実行するのもなぁ。
http://sp.e-words.jp/w/E382AAE383B3E383A9E382A4E383B3E38398E383ABE38397.html
印刷物ではなく、コンピュータ上で閲覧する 形で用意されているヘルプ文書のこと。
507名無しさん@お腹いっぱい。:2013/04/23(火) 11:32:05.75
条約でないと
508名無しさん@お腹いっぱい。:2013/04/23(火) 12:21:44.52
>>502
他のコマンドのことを考慮はしたと思うが、後から作られるコマンドのオプションと
バッティングしないことまでは考えられなかったであろう。

私は迷惑してないですけどね。
509名無しさん@お腹いっぱい。:2013/04/23(火) 13:15:52.18
こんな些細なこと(コマンドオプション)、どうでもいいんじゃないの?
嫌だからといって、じゃぁ何に乗り換えるの?
まともにPOSIXにも準拠してない閉鎖的なOSは、コマンド体系やオプションに統一が図られてるのかな?
てか、それ以前に使えないでしょ?
510名無しさん@お腹いっぱい。:2013/04/23(火) 13:27:09.12
>>509
×使えない
○役に立たない
511名無しさん@お腹いっぱい。:2013/04/23(火) 14:27:53.80
ls コマンドのヘルプを見ようと思って-hつけたり
バージョンを見ようと思って-vつけたりしたあの日
512名無しさん@お腹いっぱい。:2013/04/23(火) 16:21:59.64
話はそれるが、
ヘルプなんてのはコマンドに内蔵するべきでないと思ってたな。
プログラム動作に必要ない、人間だけのためのただの文字列で
コマンドのバイナリファイルや実行時メモリを消費するんだから。
マニュアル(man lsとか)として分離してれば
プログラム動作のみ必要な時はマニュアルをアンインストールして
HDDサイズを縮小することもできた。
513名無しさん@お腹いっぱい。:2013/04/23(火) 16:24:56.09
いまやそんなにちまちま節約する必要もなくなったな。
514名無しさん@お腹いっぱい。:2013/04/23(火) 16:30:30.62
catmanが贅沢だった時代だな。
515名無しさん@お腹いっぱい。:2013/04/23(火) 16:31:20.11
DD-WRTで、ロム4MBに、カーネル+root+busyboxとか諸々全部詰め込む関係で、
容量節約のためにヘルプもエラーメッセージもほとんど出ない。

たまに現地でいじる必要性が出たり、即席で診断スクリプト組んで走らせたいときに、
やっぱ不便だった。不便な理由は、使えるオプションが極端に少ないのだが、
どのオプションが使えて、どれが使えないかを調べることすら出来なかったため。
516名無しさん@お腹いっぱい。:2013/04/23(火) 16:51:44.59
愛三かマルツへ行きます。
技能試験の器具セットはどっちのやつがいいでしょうか。
517516:2013/04/23(火) 16:52:17.09
すんません。
518名無しさん@お腹いっぱい。:2013/04/23(火) 16:53:45.87
実体と簡易ヘルプが一つのファイルになってるなんて素敵じゃないか。
リソースフォークはいらないけどな。

そもそもUNIXは独禁法絡みで汎用コンピュータが作れないAT&Tが、
ドキュメント作成システムということで開発継続出来たのが発端。
だからオンラインドキュメントであるmanpageや
/usr/docの下のドキュメントが充実していた。
519名無しさん@お腹いっぱい。:2013/04/23(火) 16:58:11.06
〜config みたいにシェルスクリプトでもヘルプ表示してたり
520名無しさん@お腹いっぱい。:2013/04/24(水) 04:02:05.02
debぱけーじはxz増えてるよ



オンラインヘルプて公式とかミラーで公開してる分じゃねーのか
521名無しさん@お腹いっぱい。:2013/04/24(水) 05:55:35.41
ローカルHDD上にあるのにオンラインマニュアルとか言うんだよな。
1台のホストマシンに複数のシリアル端末からログインしてたからそれがオンラインだったということか
522名無しさん@お腹いっぱい。:2013/04/24(水) 20:34:17.68
変数STRには文字列が入っているとして、
$STRと${STR}と"${STR}"って展開され方違いますか?
echoで出して見ると同じに思えるんですが、
コマンドのパラメータにSTRを渡したときに
書き方によって正しく動くときとダメなときがあって
使い分けがさっぱりわかりません。

そもそも代入する時点で、どういうときに明示的に
ダブルクォートで括るべきなのか、サンプル見てもまちまちで
よくわかりません。

誰か、ズバッと教えてくれませんか?
523名無しさん@お腹いっぱい。:2013/04/24(水) 20:39:15.37
>>522

STR='*'
echo $STR
echo "$STR"

を試してみろ。$STR と ${STR} は同じ。
524名無しさん@お腹いっぱい。:2013/04/24(水) 20:41:53.61
>>523
結果はどうなるの?
525名無しさん@お腹いっぱい。:2013/04/24(水) 20:43:15.39
その例じゃカレントディレクトリにファイルがない場合は
同じになるんじゃなかろうか。
nullglobがshoptされてない限り。
526名無しさん@お腹いっぱい。:2013/04/24(水) 20:44:04.14
試してみろとか偉そうなこといってるやつがウッカリミスの無能じゃんwww
527名無しさん@お腹いっぱい。:2013/04/24(水) 20:54:08.19
>>525
その裏返しで、カレントディレクトリにファイルがある場合は違うんだから、
試してみろ、でいい。「カレントディレクトリにファイルがある場合」とか
ヒント言っちゃ駄目。本人に試させたいんだから。

>>526 馬鹿は引っ込んでろ
528名無しさん@お腹いっぱい。:2013/04/24(水) 22:02:49.41
>>522です。
試してみました。

実行時に変数は展開されるけど、ダブルクォートはそのまま
コマンドに渡される、ってことでしょうか?

出してくれた例だと、スクリプト実行時に
echo *

echo "*"
となっているってこと?

んー、スクリプト言語はよくわからん。。
529名無しさん@お腹いっぱい。:2013/04/24(水) 22:09:30.10
echo じゃ分かりにくいかもな

STR="hoge fuga"
touch $STR
ls -l
STR="hoo bar"
touch "$STR"
ls -l
530名無しさん@お腹いっぱい。:2013/04/24(水) 22:41:49.07
やってみた。

スペースやらワイルドカードやらチルダやらが入ってたら
展開のされ方によって動作が変わってくる可能性があるってことか。

明日出社したらスクリプト見直してみるわ。
531名無しさん@お腹いっぱい。:2013/04/24(水) 23:44:50.78
以上、3時間のコンサル料として30万円、末締めで請求させていただきますね
532名無しさん@お腹いっぱい。:2013/04/25(木) 06:48:29.69
>>530
>スペースやらワイルドカードやらチルダやらが入ってたら

チルダは展開されない。スペースとワイルドカードの類が解釈される。
533名無しさん@お腹いっぱい。:2013/04/26(金) 10:49:11.44
ファイルに追記しようとしてるんですが

"/var/www/html/logs/ sample >/dev/null 2>&1 &" >>/var/log/sample

と書くと「そのようなファイルやディレクトリはありません」と表示されます。
こういう場合はどう書けばファイル自体はありますし権限やオーナーも全て許可している状態です。
534名無しさん@お腹いっぱい。:2013/04/26(金) 11:00:58.38
>>533
どのコマンドを実行したいの。
535名無しさん@お腹いっぱい。:2013/04/26(金) 11:11:31.71
/var/www/html/logs/ sample >/dev/null 2>&1 &
という文字列を
/var/log/sample
に追記したいだけなんですが
どこかでファイルやディレクトリとして判断されているようです。
536名無しさん@お腹いっぱい。:2013/04/26(金) 11:24:05.04
>>535
あんた、UNIXの標準入出力とリダイレクション、全然理解してないね
537名無しさん@お腹いっぱい。:2013/04/26(金) 11:26:12.00
すいません

そういったことを理解していないと質問してはいけないということですね
シェルスクリプト側で出来れば便利そうだったんですが別の方法を考えてみます。
ありがとうございました。
538名無しさん@お腹いっぱい。:2013/04/26(金) 11:45:45.96
スレ違いの典型を見た
539名無しさん@お腹いっぱい。:2013/04/26(金) 11:54:12.16
>>535
echo "/var/www/html/logs/ sample >/dev/null 2>&1 &" >>/var/log/sample
540名無しさん@お腹いっぱい。:2013/04/26(金) 12:12:44.98
シェルは最初のパートをコマンドとして実行しようとするので
その出力したい文字列をコマンドとして探して、無いとエラーを出している。
リダイレクト先のファイルがない、と言っているのではなく、コマンドがない、といっている。

その文字列を出力するコマンドを、まず書かなくてはならない。例えば echo

echo "xxxxx yyy > zzz" >> sample
541名無しさん@お腹いっぱい。:2013/04/26(金) 18:11:51.46
ディレクトリを実行しようとしておいて何か言われたらすぐ逆ギレかよ
542名無しさん@お腹いっぱい。:2013/04/26(金) 18:30:22.16
>>541
>>533が&までの文字列を実行しようとしていることは分かれ。
543名無しさん@お腹いっぱい。:2013/04/27(土) 00:38:46.41
とある理由で cat の出力を何もしないで素通しする必要があるんですが
何が最適でしょうか? 今は sed '' を使ってます。

cat hoge.txt | sed ''
544名無しさん@お腹いっぱい。:2013/04/27(土) 01:20:56.41
>>543
sed に渡すってこと?
なんでもいいなら、

cat hoge.txt | cat

では?
545名無しさん@お腹いっぱい。:2013/04/27(土) 01:31:18.66
''必要かな?
cat hoge.txt | sed
だとまずいsedってある?
546名無しさん@お腹いっぱい。:2013/04/27(土) 01:36:03.55
>>544
あ、cat でいいんですね、思いつかなかった・・・
ありがとうございました。

>>545
ほんとだ、'' は要らないですね。
547名無しさん@お腹いっぱい。:2013/04/27(土) 10:13:59.37
>>545
GNU sedは '' ないとマズ杉
548名無しさん@お腹いっぱい。:2013/04/28(日) 00:16:28.95
シェルスクリプトで、セキュリティ上パスに気をつけろという話がありますが、

1. コマンドを絶対パスで呼ぶ(/bin/ls とか)
2. PATHをスクリプトの冒頭で適切な値に再設定する

ですよね? でこれらに関して何ですが、とりあえず両方やった方がいいですかね?
あと、1. に関してはやはり test コマンドなんかも if /usr/bin/[ ... ] ; then ... fi って
やることになりますよね?

あと、1. で readonly LS=/bin/ls して ${LS} と呼ぶとしたら安全性は落ちますかね?
549名無しさん@お腹いっぱい。:2013/04/28(日) 00:24:04.62
少なくともbashの[ は組込み
550名無しさん@お腹いっぱい。:2013/04/28(日) 00:24:25.98
>>548
いったいどんな環境で使ってるの?
で、そこには悪意のあるユーザーがいて、悪意のあるプログラムに ls とか名前をつけてそこら中に散りばめられてる可能性があるの?
551名無しさん@お腹いっぱい。:2013/04/28(日) 00:44:59.50
/bin/lsがrmに置き換えられているかもしれないからハッシュ値を確認しないとな
552名無しさん@お腹いっぱい。:2013/04/28(日) 02:56:32.10
で、md5sum 自身も書き換えられてるとかw
553名無しさん@お腹いっぱい。:2013/04/28(日) 09:03:13.99
>>548 ですが、
とりあえず/binや/usr/binがあるパーティションは書き込み不能。
データ用の書き込み可能なパーティションが別にあります。
基本的にはログイン不能なシステムです。がネットワークのやり取りとか
はあるので何がどうなるかは...

システムのデーモンから呼ばれるスクリプトを作ろうとしていて、
一応、パスが改ざんされる可能性を考えています。
554名無しさん@お腹いっぱい。:2013/04/28(日) 09:10:39.10
どんなにスクリプトの書き方に注意しても人為的なミスは防げないんだし
その辺真面目にやるならAppArmorとかSELinuxとかその辺使った方がいいような希ガス
555名無しさん@お腹いっぱい。:2013/04/28(日) 09:20:46.40
>>553
>何がどうなるかは… (わからない)ようなシステムかよwww
パスが改ざんされるって、「誰」のパスが改ざんされるの?
そんなことする奴がいたらそもそもパスの改ざんだけですまんだろ?
556名無しさん@お腹いっぱい。:2013/04/28(日) 09:23:21.45
>>548
1.と2. 両方やった方がいい。

readonly PATH='' ってやって、PATHなしに強制する (''は書かなくても同じ意味)
これで、lsとか絶対パスでしか実行できなくなる。

testについては >>549 の指摘通り内部コマンドなので、
if [ ... ]; then って普通に書いていい。

readonly LS=/bin/ls はどっちでもいいかな。
見やすくなるかどうかくらいの意味なので。
557名無しさん@お腹いっぱい。:2013/04/28(日) 09:30:53.19
>>556
ダウト。
甘いな。
PATH='' だと、逆にカレントディレクトリ上のファイルが実行できる。
PATH=. と同じ状態。かえって危ない。

PATH=/dev/null がお勧め。
558名無しさん@お腹いっぱい。:2013/04/28(日) 09:44:14.51
あほばっかだな(笑)
PATHだけ取り上げて安全とか危ないとかwww
素直にセキュアOSの適用を考えろよ
559名無しさん@お腹いっぱい。:2013/04/28(日) 13:50:32.70
環境変数が改ざんされてたらエラー吐いて異常終了した方がよくね?
「パスが改ざんされてても正常終了します」とかゴミ仕様すぎる
560名無しさん@お腹いっぱい。:2013/04/28(日) 15:45:42.42
PATHが改ざんされてる(改ざんが疑われる)ような状況じゃ何やっても無駄だわw
好きなように書けw
561名無しさん@お腹いっぱい。:2013/04/28(日) 16:05:40.29
インフラをお客さんが握っている場合、自衛のために対策することがある
いちゃもんつけられても困るし
562名無しさん@お腹いっぱい。:2013/04/29(月) 02:37:46.66
質問です。

#! /bin/sh
run=:
msg="hanamogera"

case $1 in
--run)
run=
shift
"$@" && exit 0
if test $? -ne 0; then
run=:
echo "$msg"
fi
;;
esac
563名無しさん@お腹いっぱい。:2013/04/29(月) 02:38:51.05
って
bash-2.02$ ./hoge.sh --run ls -e
ls: illegal option -- e
usage: ls [-1ACFLRTWacdfikloqrstu] [file ...]
hanamogera
という実行結果なんですが、
なんで、
"$@" && exit 0
でシェルスクリプトが終了しないんですか?
564名無しさん@お腹いっぱい。:2013/04/29(月) 06:40:13.68
そりゃ ls -e が失敗したからだろ。
565名無しさん@お腹いっぱい。:2013/04/29(月) 07:19:07.54
>>563
C言語と同じで、&amp;&amp; はショートカット動作する。

A &amp;&amp; B
は、Aが偽だった場合、Bを実行しない。
566名無しさん@お腹いっぱい。:2013/05/02(木) 11:31:15.22
exit値が、
0:成功
それ以外:失敗
を理解してないのかな?
&&は左辺が成功したら、右辺実行。
567名無しさん@お腹いっぱい。:2013/05/02(木) 13:57:32.04
>>566
0 が 真
ということに非常に戸惑いを覚える
568名無しさん@お腹いっぱい。:2013/05/02(木) 13:59:45.82
成功の理由を教えてもらう必要はないに等しいが、
失敗には必要だから-2,-1,1,2,3,4,...を使う。
569名無しさん@お腹いっぱい。:2013/05/02(木) 14:09:38.88
0 が 真 ということに非常に戸惑いを覚えた俺は、
想定した結果がでたら1、じゃなければ0、想定外なら0以外

とルールを作ってスクリプトを作った。

しかし他人のコマンドを混ぜると、0が真という糞プログラムばっかりで参ってる
570名無しさん@お腹いっぱい。:2013/05/02(木) 14:18:49.45
混ぜるなよw
571名無しさん@お腹いっぱい。:2013/05/02(木) 15:00:28.38
それじゃログインするなり周りは全部敵じゃないかw
572名無しさん@お腹いっぱい。:2013/05/02(木) 15:53:55.34
0が真 ってBASIC時代を思い出すよな
573名無しさん@お腹いっぱい。:2013/05/02(木) 16:17:55.23
CPUではZフラグが0のとき真(直前の演算結果が非ゼロだった)なんだよな
574名無しさん@お腹いっぱい。:2013/05/02(木) 16:32:12.60
>>567
0 が真ということに戸惑うって、そりゃ当たり前だろ。一般的に真偽値の 0 は FALSE であって、
それはすなわち偽を示すものだから。

シェルスクリプトにおける 0 は「成功」なのです。あなたの中では「真 == 成功」なのですか?
575名無しさん@お腹いっぱい。:2013/05/02(木) 17:05:11.27
>>574
君の中では「偽 == 成功」なのか?
576名無しさん@お腹いっぱい。:2013/05/02(木) 17:20:09.29
プロセスの終了コードが、エラーなしで終了したときは 0 になるのが普通だったので
シェルでは、コマンドの終了状態で判断する際に正常終了の 0 が、
論理値との対比では真に相当するのが都合がいいかな、
とボーン氏は考えたのだろう。
それ以前のシェルでも終了コードをチェックして云々はあったのかな?知らないんだけどね。
577名無しさん@お腹いっぱい。:2013/05/02(木) 17:44:27.92
エラーがFALSE(TRUEではない)なんだから、いいんじゃないの?
578名無しさん@お腹いっぱい。:2013/05/02(木) 18:15:32.05
算術IFなんかも整数使うけど、
真偽値とは別の概念として正、0、負を使い分けてる。
何の問題があるのでしょうか?
579名無しさん@お腹いっぱい。:2013/05/02(木) 18:26:12.54
別にいいけど自分が混乱するだろw
580名無しさん@お腹いっぱい。:2013/05/02(木) 18:26:57.74
別にいいけど自分が混乱するだろw
周りもだし。郷に入っては郷に従えだろ。
581名無しさん@お腹いっぱい。:2013/05/02(木) 18:27:40.13
大事なことだったのでつい。
582名無しさん@お腹いっぱい。:2013/05/02(木) 19:53:35.55
しょうがないにゃあ
583名無しさん@お腹いっぱい。:2013/05/02(木) 20:32:25.51
>>575
どっちでもないよ。「真偽」と「成功失敗」は異なる概念でしょ。
無理矢理当て嵌めようとするから、話が gdgd になってきてるんだと思う。
584名無しさん@お腹いっぱい。:2013/05/02(木) 21:25:27.24
windowsだと、関数の終了コードをbooleanにするのが普通になってしまっているので、その影響かもしれない。
585名無しさん@お腹いっぱい。:2013/05/02(木) 21:59:59.88
次に設計する偉い人は多値にしてくれ。
586名無しさん@お腹いっぱい。:2013/05/13(月) 19:10:08.38
>>575
数学的論理命題の話をしているのに、
逆が必ず真になるとの想定は如何なものか?
587名無しさん@お腹いっぱい。:2013/05/13(月) 19:20:16.84
シェル初心者だけど質問ある?
何でも聞け。
知らないこと以外はたいてい知っている。
588名無しさん@お腹いっぱい。:2013/05/14(火) 02:23:59.37
一休さん来た(棒読み
589名無しさん@お腹いっぱい。:2013/05/14(火) 22:53:01.49
>>587
シェルスクリプトでPASSを変える方法を教えてください。
590名無しさん@お腹いっぱい。:2013/05/15(水) 11:34:22.15
>>589
SET PASS=aaa
で環境変数PASSの変更が可能です
591名無しさん@お腹いっぱい。:2013/05/15(水) 14:28:33.17
シェルスクリプトでアブラムシの防除方法を教えてください。大変困っています。
592名無しさん@お腹いっぱい。:2013/05/15(水) 14:29:12.96
ネタ書き込む前にほんとにおもしろいか一度読み直してみような。
593名無しさん@お腹いっぱい。:2013/05/17(金) 01:39:50.41
シェルスクリプトでキー入力によって動作を変えたいのですが
readだとenterを押さないと入力された値を取得出来ません。

1.処理A
2.処理B
3.処理C
0.終了
実行する処理のキーを押してください>

上記のように画面上へ表示し、キーを押された時点で各処理実行したいのですが
シェルスクリプトで可能でしょうか?
594名無しさん@お腹いっぱい。:2013/05/17(金) 06:26:05.73
>>593
read -n 1
595名無しさん@お腹いっぱい。:2013/05/17(金) 07:17:32.96
>>594
read: 1: Illegal option -n
596名無しさん@お腹いっぱい。:2013/05/17(金) 07:19:27.17
>>593
key=`dd bs=1 count=1 2>/dev/null`
597名無しさん@お腹いっぱい。:2013/05/17(金) 07:26:23.44
>>596
stty cbreak 忘れてるぞ
事後に元に戻すのも忘れずにな。
598名無しさん@お腹いっぱい。:2013/05/17(金) 19:43:56.07
inkey$ を使えばいいニダ
599名無しさん@お腹いっぱい。:2013/05/17(金) 20:19:56.75
シェルじゃなくperlとかpythonとかのほうが楽?
600名無しさん@お腹いっぱい。:2013/05/17(金) 20:28:35.33
人によるんじゃない?
601名無しさん@お腹いっぱい。:2013/05/18(土) 01:17:39.94
perl も python も
インストールされていない
ということもあるw
602名無しさん@お腹いっぱい。:2013/05/18(土) 22:44:45.05
入力された拡張子を持つファイル一覧を出すスクリプトを作ろうと思ってるけどうまくいかない…
ボスケテ

#!/bin/sh
cd trash
extension=$@

ls | grep $extension

cd

extension経由させてんのはgrepだと正規表現とかが関係してうまくいかないんじゃないかと思ったから
助けてくれ…さっぱりわからないし調べても出てこない
603名無しさん@お腹いっぱい。:2013/05/18(土) 23:26:55.16
>>602
何がうまく行ってないのか説明してくれないと分からん。
604名無しさん@お腹いっぱい。:2013/05/18(土) 23:38:08.84
これを例えばtxtもつ奴だけ並べようとして実行すると(ファイル名challe5)
./challe5.sh* txt
grep: txt をオープンできません。
と出てそこで終了してしまう
どうすればいいんだ
605名無しさん@お腹いっぱい。:2013/05/19(日) 00:45:21.09
>>604
./challe5.sh* txt
の * は何のため?
ひょっとして、次のように * の前後に空白が這いよってない。
./challe5.sh * txt
606名無しさん@お腹いっぱい。:2013/05/19(日) 01:11:17.99
>>605
できた!
./challe5.sh txt で正しく動いた
ありがとう
607名無しさん@お腹いっぱい。:2013/05/19(日) 09:22:36.36
もしかして、 ls が ls -F に alias されていて、
実行可能ファイル名に末尾に * がついてたのを
勘違いしたんだろうか。
608名無しさん@お腹いっぱい。:2013/05/19(日) 12:09:10.88
解決まで読んでも何がしたいのか、さっぱりわからんw

ls ./trash/*.txt
で済んでしまいそうな。
あと多分cd -の方がいい。
609名無しさん@お腹いっぱい。:2013/05/20(月) 11:46:33.00
スクリプトに引数渡す練習かな。
最後に cd する理由はよくわからん。cd - に変える必要もないっしょ。
610名無しさん@お腹いっぱい。:2013/05/20(月) 14:29:43.96
元のデレクトリに戻したいだけだろ
そもそもcd trashが不要だろというのはおいといて
611名無しさん@お腹いっぱい。:2013/05/20(月) 14:53:12.21
元のディレクトリに戻ったところで
スクリプトの実行終わったら関係ないよね。
612名無しさん@お腹いっぱい。:2013/05/20(月) 15:00:49.43
わからねえならいいや
俺には関係ねえし
613名無しさん@お腹いっぱい。:2013/05/20(月) 15:38:14.12
>>612
オレもマジで分からんが。
スクリプト内の最終行で、元のディレクトリに戻らなければならない事例を挙げてくれよ
614名無しさん@お腹いっぱい。:2013/05/20(月) 16:15:55.91
気分がいいんじゃないか?
615名無しさん@お腹いっぱい。:2013/05/20(月) 17:03:05.27
何かやってて何か調べてwdに戻りたいつーだけだろ
わからねえならいいつってんのも読めないのかよ知障
616名無しさん@お腹いっぱい。:2013/05/20(月) 19:21:55.30
>>615
君がよくても、我々がよくない。
開き直って逆ギレしないで、
我々の知的好奇心を満たすために協力したまえ
617名無しさん@お腹いっぱい。:2013/05/20(月) 19:41:21.85
>>613
次に実行するスクリプトのためだろ

そういうコード書くな、で済むならいいけど
現実そういうわけにもいかないし
それなら毎度立つ鳥跡を濁さない方がいい
618名無しさん@お腹いっぱい。:2013/05/20(月) 20:24:44.35
>>617
最後に元のディレクトリに戻っても戻らなくても
次に実行するスクリプトには関係なくね?
619名無しさん@お腹いっぱい。:2013/05/20(月) 20:30:45.71
source や . で呼ばれるときに備えて元のディレクトリに戻っておくのはあるかもね。
>>602 がそこまで考えてるかどうか分からんけど。
620名無しさん@お腹いっぱい。:2013/05/20(月) 20:46:26.14
そんな呼び方するかねぇ。
621名無しさん@お腹いっぱい。:2013/05/20(月) 21:25:45.61
>>620
されたときのことを考慮するんだよ
622名無しさん@お腹いっぱい。:2013/05/20(月) 21:49:57.22
無引数cdした方がいいかどうかわからんだろ。
sourceされた時のことを考えて、(cd ...; xxx)ならまだわかるが。
623602:2013/05/20(月) 21:51:17.99
最後のcdは元の場所に戻っておきたいなーと思って入れといた
ls ./trash/*txt は単に思いつかなかったw
>>607はたぶん大当たり
ガッコの課題でそういうシェルプログラム組めって言われたからつい大仰なのを作ってしまった
物議を醸してすまなかったぜ
624名無しさん@お腹いっぱい。:2013/05/20(月) 21:52:31.15
ちなみにcdだけでホームディレクトリ(でいいのか?)に戻るようになってる
(普通もそうなってるかはわからんので補足)
625名無しさん@お腹いっぱい。:2013/05/20(月) 21:54:30.64
学校の課題なのは薄々気付いてたけど
そんなに大仰でもないような。
626名無しさん@お腹いっぱい。:2013/05/20(月) 21:56:34.48
俺にとっては大仰なんだよ!
627名無しさん@お腹いっぱい。:2013/05/20(月) 22:24:58.07
>>623
なんで戻っておきたいの?
628名無しさん@お腹いっぱい。:2013/05/20(月) 22:46:30.24
>>623
> 最後のcdは元の場所に戻っておきたい
それなら、>>608の指摘通り「cd -」とすべきだな。
cdだと、元の場所ではなくて$HOMEに移動してしまう。
元の場所が$HOMEなら、同じだけど。

>>618
おぉ、sourceや . で呼び出すときの挙動をよく考えたことがなかったので、
ちょっと実験してみよう。
629名無しさん@お腹いっぱい。:2013/05/20(月) 22:46:37.20
はっきりいって特に戻っておきたい、と思った明確な理由はない
ただなんとなくつけただけだ
その上で、強いて理由を挙げるのであれば、ホームディレクトリでこのプログラムを起動した後
一回trashに言ったままになっちゃうのが面倒と思ったから

察して試してみたが別にcd無くても勝手に元に戻るみたいね…
630名無しさん@お腹いっぱい。:2013/05/20(月) 22:48:00.34
もちろんもとの場所も$HOMEです(おそらく)
631>>602:2013/05/20(月) 22:49:16.68
>>629-630は俺です
お目汚し失礼しました
632名無しさん@お腹いっぱい。:2013/05/20(月) 23:01:09.18
>>629
> 察して試してみたが別にcd無くても勝手に元に戻るみたいね…
「戻る」っていうか、
そのプロセスのカレントディレクトリは変わってないんだよ。
スクリプトとして呼ばれた子プロセスのカレントディレクトリが変わってるだけで。
633名無しさん@お腹いっぱい。:2013/05/20(月) 23:01:58.11
>>629
仮に「戻る」としても、
ホームディレクトリ以外にいるときに実行することは考えないのか?
634名無しさん@お腹いっぱい。:2013/05/20(月) 23:07:47.22
>>632 なるほど
>>633 それは確かに考えるべきだったな
書いたときは全然考えなかったわ(授業でやってる事は今のところ全部ホームディレクトリでやってるから)
まあ、初心者故に考えなかった、ってことだな
635>>602:2013/05/20(月) 23:08:44.03
>>634も俺
636名無しさん@お腹いっぱい。:2013/05/21(火) 00:30:10.63
ここは、書いたシェルスクリプトの投稿とかありか?
評価してほしいんだが
637名無しさん@お腹いっぱい。:2013/05/21(火) 00:50:08.35
やっぱいいや
638名無しさん@お腹いっぱい。:2013/05/21(火) 01:02:43.56
ありだよ。
639名無しさん@お腹いっぱい。:2013/05/21(火) 01:53:42.08
#!/bin/sh
while true
do
echo 'SEX shitai'
done
640名無しさん@お腹いっぱい。:2013/05/21(火) 02:07:26.42
echo oremo shitai
641名無しさん@お腹いっぱい。:2013/05/21(火) 07:29:23.70
シェルの手動起動の課題をやってます。
メモ帳でテキストファイルにEcho Helloとだけ書いて
サンバでH:ドライブに test.sh という名前を付けて保存、
TeraTermでtest命令を発行してもうまくシェルが動きません。
何かヒントください。
642名無しさん@お腹いっぱい。:2013/05/21(火) 07:44:12.55
その質問の仕方では答えられません
何かヒントを下さい
643名無しさん@お腹いっぱい。:2013/05/21(火) 09:37:22.82
>>642
w

>>641
sambaとかTeraTermとかいうからWindows環境だと思うが、
Windows以外の世界は、case sensitiveだということを覚えておこう
644名無しさん@お腹いっぱい。:2013/05/21(火) 09:40:26.49
実行後にカレントディレクトリが変更されるスクリプト
ってどうやって書けばいいの?
645名無しさん@お腹いっぱい。:2013/05/21(火) 09:48:23.40
>>644
ttp://okwave.jp/qa/q5125847.html
| 子プロセス側の操作によって親プロセス (シェル) のカレントディレクトリ
| が変わってしまうようなUNIXのシェルというのは寡聞にして知りません。
646名無しさん@お腹いっぱい。:2013/05/21(火) 09:58:55.94
>>645
シェルの問題じゃなくて、UNIXというOSの設計の問題。perlでもCでもできない。
sh hoge.sh ではなく、. hoge.sh のように実行するとか、
cd hoge と出力するhoge.plを eval `perl hoge.pl` として実行するとかなら可能だが。

DOSはそうはなってないので、バッチファイル実行後にカレントディレクトリを変えられる。
647名無しさん@お腹いっぱい。:2013/05/21(火) 11:49:32.84
>>641
643に加えて
(1)そのファイルに実行権(プログラムやシェルスクリプトであることを示すフラグ)が必要
Windowsは拡張子によって、実行ファイルかが判断されるがUnix系はフラグによる。
chmod コマンドを参照

(2)Unix系は拡張子による区別がないので、コマンドとして実行する際に .sh 部分も必要

(3)Windowsのコマンドプロンプトはカレントディレクトリもコマンドの検索パスに含まれるが
Unix系ではカレントディレクトリが含まれていないことが多いため、カレントディレクトリに
あるコマンドは ./test.sh のようにディレクトリから指定する必要がある場合が多い。
648名無しさん@お腹いっぱい。:2013/05/21(火) 13:08:26.79
>>641はコピペ改変のネタでしょ。
まともに回答してもムダ。
649名無しさん@お腹いっぱい。:2013/05/21(火) 15:11:12.17
>>647
> (2)Unix系は拡張子による区別がないので

そんなことはない。
拡張子が大きな意味を持つ文脈もある。
650名無しさん@お腹いっぱい。:2013/05/21(火) 15:38:27.36
>>649
そうでしたね。
Windowsではコマンドとして実行する際に、ファイル名の .com .exe .bat(他にもあったかな)部分は
入力する必要がないがUnix系では、それもコマンド名の一部として入力する必要がある。
651名無しさん@お腹いっぱい。:2013/05/21(火) 17:21:49.35
>>645
そのひとが寡聞なだけやね。
652名無しさん@お腹いっぱい。:2013/05/21(火) 17:33:35.09
>>651
ん?
そういうシェルがある、ってこと?
653名無しさん@お腹いっぱい。:2013/05/21(火) 17:44:25.49
最近のOSは setcwd() が存在したりする
654名無しさん@お腹いっぱい。:2013/05/21(火) 17:51:07.72
関係ない
655名無しさん@お腹いっぱい。:2013/05/21(火) 18:00:44.07
int setcwd(pid_t pid, char *path);
656名無しさん@お腹いっぱい。:2013/05/21(火) 18:39:56.25
そういうネタはいらん。
657名無しさん@お腹いっぱい。:2013/05/21(火) 19:45:27.52
fork2(FORK_SHARECWD);
658名無しさん@お腹いっぱい。:2013/05/21(火) 20:25:00.38
>>657
どうせなら念願のファイルポインタ独立もよろしく

fork2(SHARECWD|FORK_UNSHAREFD);
659名無しさん@お腹いっぱい。:2013/05/21(火) 20:49:24.56
>>644
#!/bin/sh
cd ./tmp
/bin/sh ; exit
660名無しさん@お腹いっぱい。:2013/05/21(火) 21:27:11.56
>>659
それはスクリプト「実行後」じゃなくて「実行中」の別シェルだねw
ハイやり直し
661名無しさん@お腹いっぱい。:2013/05/21(火) 22:08:40.79
>>660
俺にとっても正解ではないが、
質問者にとってはこれで充分かもしれず。
662名無しさん@お腹いっぱい。:2013/05/22(水) 01:05:07.75
不十分だろう。
663名無しさん@お腹いっぱい。:2013/05/22(水) 10:31:50.02
. ドットコマンドについて、誰か
664名無しさん@お腹いっぱい。:2013/05/22(水) 10:34:02.64
ドットコマンドの話じゃないよ。普通の実行スクリプトで親シェルをcdする方法の話。
665名無しさん@お腹いっぱい。:2013/05/22(水) 11:10:54.23
もし、親プロセスのカレントディレクトリを変更できる仕組みがあったら
子プロセスを起動するプログラムはガクブルだな。
666名無しさん@お腹いっぱい。:2013/05/22(水) 12:04:13.10
>>665
だから、fork2(FORK_SHARECWD) で作成されたプロセスのみ可能なので安心して。
667名無しさん@お腹いっぱい。:2013/05/22(水) 13:53:26.90
>>663
help .
668名無しさん@お腹いっぱい。:2013/05/25(土) 18:42:48.92 !
自分がスクリプトを書く環境で grep に -x オプションがないことが判明したのですが、
grep -x -F -f patlist に相当する処理をしたい場合はどうしたらいいですかね?

とりあえず -F をやめて patlist の各行を ^ と $ で囲む前処理をする? と思ったら、patlist
に含まれうる "." 等をメタ文字として解釈されてはまずいのでした。
grep を入れ直す、perl 等別のスクリプト言語を使う (sed/awk は OK。「言語」かどうかは
ともかく)、キレる等以外でお願いできますでしょうか。
669名無しさん@お腹いっぱい。:2013/05/25(土) 19:33:33.74
>>668
> 自分がスクリプトを書く環境
もしかして Solaris とかだったりする?
670名無しさん@お腹いっぱい。:2013/05/25(土) 19:46:11.01
効率を考えないのであれば
$ comm -12 <(sort patlist) <(sort hoge.txt)
で行けそうな気がする
671名無しさん@お腹いっぱい。:2013/05/25(土) 19:59:14.50
Solarisは grep -x あるぞ。というか、SunOS4の時代からある。
-xないってどこのOSだ?
672名無しさん@お腹いっぱい。:2013/05/25(土) 20:01:59.13
エスパーすると busyboxの grepとか
673名無しさん@お腹いっぱい。:2013/05/25(土) 20:10:20.17
bosyboxの shは、>>670 の named pipeは使えないな
674668:2013/05/25(土) 20:56:40.98 !
>>669
SUSで-xは規定されてるみたいですし...

>>670
comm もないのです

>>672
正解w


前処理として sed で patlist 内のメタ文字をエスケープすることもちょっと思ったのですが。
s/\([エスケープしたメタ文字リスト]\)/\\\1/g みたいな。ところでメタ文字のリストって?
675668:2013/05/25(土) 22:01:26.16 !
>>674
おっとっと、文字クラスの中ではエスケープは不要か。

実験してみると [ と ] を指定したいときに [[]]と書くと動かないけど[][]と書くと動くような。
ふむー
676名無しさん@お腹いっぱい。:2013/05/26(日) 05:51:54.34
>>674
-xが使えなくても -wで十分だったりするケースが多いんだけど。
あと、ウチのbusyboxではcommは使えるぞ。<(コマンド)の文法は使えないけど。
677668:2013/05/26(日) 09:26:18.70 !
>>676
それは元のデータが一行に一個しか単語を含まないとかそういう感じですか?
自分の場合そうではないので...

% echo foo bar | grep -x foo
% echo foo bar | grep -w foo
foo bar
678名無しさん@お腹いっぱい。:2013/05/26(日) 17:26:43.01
メタ文字をエスケープしたパターンを^$でくくればいい。
679名無しさん@お腹いっぱい。:2013/05/26(日) 17:38:36.63
>>678
だから、メタ文字をエスケープすることが難しいって話だろ。
680名無しさん@お腹いっぱい。:2013/05/26(日) 17:48:23.97
sedやawkでやればいい
681668:2013/05/27(月) 18:41:29.35 !
個々のメタ文字をエスケープしようかな、というのは前の方にに書いたんですが。
ただ正規表現もいろいろあったりするし、その方法はなんか嫌な感じがw
busybox の grep が -x をサポートしない時点で正規表現の方にも一抹の不安がw

まあ仕方ない、grep が扱いそうな正規表現ということで、
sed 's/[][^.$*\]/\\&/g' でいいですかねえ。
でそこに s/^.*$/^&$/ を付けて処理すれば文全体にマッチするパターンになると。
682名無しさん@お腹いっぱい。:2013/05/27(月) 19:11:46.88
awk 'BEGIN{while(getline<"patlist")a[$0]=1}{if($0 in a)print}'
683名無しさん@お腹いっぱい。:2013/05/27(月) 21:50:54.04
結局、環境はbusyboxなの?
684名無しさん@お腹いっぱい。:2013/05/27(月) 23:06:54.89
>>683 節穴
685668:2013/05/28(火) 01:03:20.06 !
>>682
おおー素晴らしい。そっか連想配列がありましたよね...
元の grep -v の話に合わせるなら !($0 in a) とすると。
686名無しさん@お腹いっぱい。:2013/06/20(木) 10:38:54.93
圧縮されたファイルをハードディスクに展開せずに
読み込ませるシェルスクリプトを書けないでしょうか

今までmkfifoでパイプを利用して
mkfifo input
xz -dc input.xz > input &
fortran.out < input
として必要なinput.xzの個数分コマンドラインで実行をしていました

inputファイルが増えてきたのでシェルスクリプトを使おうとしたのですが
バックグラウンドでパイプへ展開しながら
実行ファイルに読み込ませる方法が分かりません
687名無しさん@お腹いっぱい。:2013/06/20(木) 11:26:02.34
>>686
結局 fortran.out も stdinから読んでるんだから、

xz -dc input.xz | fortran.out &amp;

でいいんじゃないの? mkfifoする必要なし。

for で回すなら、

for file in .....
do
xz -dc "$file".xz | fortran.out &amp;
done
688名無しさん@お腹いっぱい。:2013/06/20(木) 11:30:04.73
それで行けるならこんな質問しないだろうな。
たぶん質問のしかたが悪い。
689名無しさん@お腹いっぱい。:2013/06/20(木) 11:33:07.90
mkfifo使うにしても、質問で input の文字列のところを $hoge 変数にして
ループ回すだけだし、それで行けるならこんな質問しないのか?
690名無しさん@お腹いっぱい。:2013/06/20(木) 11:39:30.71
お前らよくこんな質問にレスを付けようと思うな。
文体は丁寧だが、目的語などを省略して、相手に理解させる配慮が一切ない、
自分しか理解できない文章で質問する奴はスルーでいいだろ。
691名無しさん@お腹いっぱい。:2013/06/20(木) 11:41:17.87
いいじゃん答えても。
スルーでいいと思う人はスルーしてればいいじゃない。
692名無しさん@お腹いっぱい。:2013/06/20(木) 11:50:41.37
>>686
普通に「&」でバックグランドジョブにしてもダメなのかな。
693名無しさん@お腹いっぱい。:2013/06/20(木) 12:35:01.18
>>690
お前少し黙ってろよ
694686:2013/06/20(木) 12:49:13.79
>>688
>>690
すいませんでした。
考え直します。
695名無しさん@お腹いっぱい。:2013/06/20(木) 13:11:52.63
>>694
んで結局解決した?
696名無しさん@お腹いっぱい。:2013/06/20(木) 14:22:58.18
>>690 アレ、お前以外は質問を理解出来てるんじゃね?あっ(察し
697名無しさん@お腹いっぱい。:2013/06/20(木) 14:41:16.75
>>686 の質問は「バックグラウンドでパイプへ展開しながら
実行ファイルに読み込ませる方法が分かりません」だろ?

シェルスクリプトでもバックグランド「&」は使えるから、
お前が書いている内容をスクリプトにコピペして実行してみろ。
698名無しさん@お腹いっぱい。:2013/06/20(木) 14:50:30.70
>>697
それだと、inputというファイル名(FIFO)が衝突して正常動作しない。

>>686 が言うバックグラウンドでの実行というのは、
同じスクリプトを複数同時に(バックグラウンド)で起動するという意味を含んでいる
と解釈できる。

まあ、その件は >>689 が回答済みだけどね。
699名無しさん@お腹いっぱい。:2013/06/20(木) 17:27:55.78
これhurdの機能でできるんじゃね
700名無しさん@お腹いっぱい。:2013/06/20(木) 17:31:36.03
つか質問しといて、「考え直します」とか言って引っ込むのはどうよ?って思うな。
701名無しさん@お腹いっぱい。:2013/06/20(木) 17:43:13.21
同じPCでも、使うシェルによってPCの耐久寿命が変わるそうですね。
BASHは、電解コンデンサがライトアップしやすいって聞きましたけど、
ユーザーの多いシェルなのに何故ですか?
702名無しさん@お腹いっぱい。:2013/06/20(木) 17:54:54.11
質問です。
シェルが・・・
考えなおします。
703名無しさん@お腹いっぱい。:2013/06/23(日) 17:52:58.66
>>701
dry upじゃないの? ケミコンをライトアップしてどうすんだよw スカイツリーかよww
704名無しさん@お腹いっぱい。:2013/06/24(月) 12:35:58.41
というかbashが動作してるときだけコンデンサが劣化するとか
どんなテクノロジーなの?
705名無しさん@お腹いっぱい。:2013/06/24(月) 12:43:45.59
対話画面に降りると、CPUのidleを発行しなくなる環境が多かったから、
あながち間違いでもない。
706名無しさん@お腹いっぱい。:2013/06/24(月) 13:42:31.38
コピペ改変に釣られんなよ。
707名無しさん@お腹いっぱい。:2013/06/24(月) 14:37:12.05
>>705
そんなこともあったのか
奥が深いな
708名無しさん@お腹いっぱい。:2013/06/24(月) 14:59:38.89
bashは利用者がキーボードに触れるかどうか、気を感じているから。
709名無しさん@お腹いっぱい。:2013/06/24(月) 19:12:51.68
bashはあなたを監視している
過去のコマンド実行履歴もこっそり覚えてる
710名無しさん@お腹いっぱい。:2013/06/24(月) 23:56:06.32
おはようからおやすみまで
くらしをみつめる bash
711名無しさん@お腹いっぱい。:2013/06/25(火) 09:37:13.20
>>709
$ echo $HISTFILESIZE
0
何か?
712名無しさん@お腹いっぱい。:2013/06/25(火) 09:42:59.41
$ cat /etc/profile
readonly HISTFILESIZE=1000000
713名無しさん@お腹いっぱい。:2013/06/25(火) 10:14:06.90
Bourne-Again Shell is watching you.
714名無しさん@お腹いっぱい。:2013/06/25(火) 17:24:02.91
ご教授頂きたいのですが、

#!/bin/sh

awk '/Summit48si/ { print "snmpget -v 2c -c hbl-snmp "$1" SNMPv2-SMI::enterprises.1916.1.1.1.16.0 " ; print "echo "$1"" }' list | sh

を実行すると、

SNMPv2-SMI::enterprises.1916.1.1.1.16.0 = STRING: "シリアル番号"
IPアドレス

という風に出力されます。

これを、

IPアドレス シリアル番号

という風に出力させたいのですが、どのように記述すれば良いのでしょうか?
どなたか、お知恵を貸して頂けないでしょうか。
715名無しさん@お腹いっぱい。:2013/06/25(火) 17:39:37.87
ご教授ってネタなの?
716名無しさん@お腹いっぱい。:2013/06/25(火) 17:42:01.74
>>715
別にネタじゃ無いだろ
懇切丁寧に教えろって意味だ
717名無しさん@お腹いっぱい。:2013/06/25(火) 17:44:59.43
素で間違えてる人多いよ。
718名無しさん@お腹いっぱい。:2013/06/25(火) 17:47:52.88
素で間違えました。女教授ください。
719名無しさん@お腹いっぱい。:2013/06/25(火) 17:57:32.66
>>714
list はファイルでIPアドレスと型番的な情報(ex. Summit48si)が一行に一つ入ってるのでしょうか?

IPアドレスが後から出ているのが気に入らないなら
print "echo "$1"" を print "snmpget -v ..."の前に持ってくる。
でもってIPアドレスの後で改行が入るのがいやなら echo -n

SNMPv2-SMI::enterprises.1916.1.1.1.16.0 = STRING: が出力されるのがいやなら
これはsnmpgetが出力しているものでしょうか?それならsnmpgetで出力しないようにできるかどうか調べて
出力を抑制できないなら sed とかで削除すればいいんじゃないでしょうか。

教授はできないので教示させていただきました。
720名無しさん@お腹いっぱい。:2013/06/25(火) 18:02:46.48
>>715
・学問や技芸、専門知識を教え授けること
・児童・学生に知識・技能を授け、心意作用の発達を助けること
721名無しさん@お腹いっぱい。:2013/06/25(火) 18:03:21.06
わざわざ書かんでも知ってるでしょ。
722名無しさん@お腹いっぱい。:2013/06/25(火) 18:07:43.68
>>717
間違いじゃないw
他には「ご教授賜りたい」という用法もある。
723名無しさん@お腹いっぱい。:2013/06/25(火) 18:11:53.02
>>721
素で間違えてると思い込んでる人多いよ。
724名無しさん@お腹いっぱい。:2013/06/25(火) 18:16:22.41
この話おわり。
725名無しさん@お腹いっぱい。:2013/06/25(火) 18:22:55.40
女教師ください。
726名無しさん@お腹いっぱい。:2013/06/25(火) 18:38:55.10
>>722
「ご教示賜りたい」は聞いたことがあるが、
「ご教授賜りたい」なんて聞いたことがないw
727名無しさん@お腹いっぱい。:2013/06/25(火) 18:46:10.14
>>726
俺は聞いたことあるよ

この話おわり。
728名無しさん@お腹いっぱい。:2013/06/25(火) 19:01:50.38
ご教授も間違ってないけど、
見ず知らずの人に使うには図々しい感じがするわ。

とはいえ、時間が経てば、違いなんか無くなるだろうし
突っ込んだら負けだと思ってる。
729名無しさん@お腹いっぱい。:2013/06/25(火) 19:03:14.36
もうその話おわったよ。
730名無しさん@お腹いっぱい。:2013/06/25(火) 19:12:41.15
女享受ください。
731名無しさん@お腹いっぱい。:2013/06/25(火) 19:25:51.38
間違い方としては、役不足ににてるのだけどな。

>>714
awkって、-F'[ :]'とか区切り文字に正規表現つかなかった?
732名無しさん@お腹いっぱい。:2013/06/25(火) 19:32:38.31
この誤用は昔からあるね。
文末の定型だと勘違いしてる人が多い感じ
で「ご教授ください」「あなたのような弟子を取った覚えはありません」が繰り返されるという
733名無しさん@お腹いっぱい。:2013/06/25(火) 19:37:22.59
見飽きた話だ。
734名無しさん@お腹いっぱい。:2013/06/25(火) 19:39:57.27
「女教授股触りたい」
735名無しさん@お腹いっぱい。:2013/06/25(火) 19:46:02.01
>>728
図々しいやつだ、という批判なら尤もだし正しい指摘だよ
736名無しさん@お腹いっぱい。:2013/06/25(火) 20:16:32.09
教員をしてるわけではないけど専門知識のある知人に
ものを尋ねる時、「これ教えてくださいよ、先生!」みたいに比喩で
言うことは普通にある。それと一緒。問題なし。
737名無しさん@お腹いっぱい。:2013/06/25(火) 20:26:37.92
>>734
いいよ。今から研究室においで。
738名無しさん@お腹いっぱい。:2013/06/25(火) 20:33:48.36
↓738先生、持ち時間を使い切りましたので1手30秒以内でお願いします。
739名無しさん@お腹いっぱい。:2013/06/25(火) 21:14:54.32
738には失望した
740名無しさん@お腹いっぱい。:2013/06/25(火) 21:29:23.24
詳しいHP教えてください

ヒューレットパッカードがどうしたのですか?
741名無しさん@お腹いっぱい。:2013/06/25(火) 21:31:50.15
プラスチック容器なのに「レンジOK」って書いてあるよ
742名無しさん@お腹いっぱい。:2013/06/25(火) 22:19:29.93
>>726
アホだから
743714:2013/06/26(水) 08:50:35.25
>>719
ありがとうございました。

大変助かりました。
744名無しさん@お腹いっぱい。:2013/06/26(水) 14:42:05.63
>>741
オチがわかりません
745名無しさん@お腹いっぱい。:2013/07/11(木) 20:47:25.66
並列処理みたいなことをしたいです
*マークをつけた次の行です
ただこのままだと、配列に結果が代入されません
当然バックグウランドにしないと処理速度が落ちます

バックグラウンドにして、かつ結果を得る方法はありますか?

func_test ()
{
# 実際はこの関数の処理に時間がかかる、結果をメイン処理に渡したい
echo "${1}"
}

array=()
for i in `seq 1 5`
do
# この関数の処理を並列化したい *
array[${i}]=`func_test ${i}` &
done

wait

for i in ${array[@]}
do
echo ${i}
done
746名無しさん@お腹いっぱい。:2013/07/11(木) 21:09:06.56
ファイルに結果を出力しておいて後で読み込むのが無難じゃないかな
直前に生成した子プロセスのPIDは$!でとれたはず。
配列にPID保管→PIDに対応するファイルから結果取得みたいな
747名無しさん@お腹いっぱい。:2013/07/12(金) 00:45:17.88
あとfunc_testはシェルスクリプトとして独立させてバックグラウンド実行
748名無しさん@お腹いっぱい。:2013/07/12(金) 05:08:58.37
すみませんが詳しい方のみ回答をお願いします
749名無しさん@お腹いっぱい。:2013/07/12(金) 07:54:14.04
750745:2013/07/12(金) 07:58:40.86
みなさんありがとうございます。

>>746
例ではループを「seq 1 5」としていますが、実際は数千あります。
(数千をいっきにバックグラウンドで走らせる訳ではなく分割する予定です)
数千のファイルを作って消すことはhddの寿命に対して大丈夫なものですか?
関数の出力は1行なので、数千でも容量はとらないのでメモリ上に一時ファイルを作る方法があれば助かりますが。

>>747
初心者なもので、関数と別のシェルスクリプトとして独立させることの違いが
あまりわからないので、もう少し詳しく教えていただけますか?
751名無しさん@お腹いっぱい。:2013/07/12(金) 08:16:18.84
>>750
>>747 は知ったかの誤回答。
関数を別のシェルスクリプトにしてもバックグラウンドの出力は
そのまま取り込めないから解決にならない。
752名無しさん@お腹いっぱい。:2013/07/12(金) 08:38:52.65
Cかpopen系が使える他のスクリプト言語で書いた方がいいんじゃないか?
753名無しさん@お腹いっぱい。:2013/07/12(金) 08:49:24.09
>>745
func_test() の出力行数が決まってるなら
その行の頭にでもindexの識別子を付けて
全部標準出力に出して、数字でソートすればいいよ

func_test ()
{
echo "${1} : ${1}の出力"
}

for i in `seq 1 5`
do
func_test ${i} &amp;
done | sort -n
754名無しさん@お腹いっぱい。:2013/07/12(金) 08:59:18.37
>>750
> 数千のファイルを作って消すことはhddの寿命に対して大丈夫なものですか?

HDDの寿命的には問題にならない。
SSDでも最近のはウェアレベリングしてるはずなので、
1行程度のファイルを数千個作ったところで影響なし。

どうしても気になるなら、直列に動かす複数のプロセスで1個のファイルを共有したら?
755名無しさん@お腹いっぱい。:2013/07/12(金) 10:44:53.38
>>751
名前付きパイプを作って、それに通すのは?
756名無しさん@お腹いっぱい。:2013/07/12(金) 11:33:45.99
シェルスクリプトの方で出力先も切り替えればいいだけの話。

#! /bin/sh
echo "${1} : ${1}の出力" > "${DIR}/file${1}.out"

そしてwaitで全てのシェルスクリプトが終了するまで待つ。
757名無しさん@お腹いっぱい。:2013/07/12(金) 11:42:25.92
処理中に何か不具合が出て、プロセスがいつまでも終わらなかったらどうすんの?
758名無しさん@お腹いっぱい。:2013/07/12(金) 11:43:13.55
それはどうやっても同じでは?
759名無しさん@お腹いっぱい。:2013/07/12(金) 11:46:43.97
>>756 >>755
それはシェル関数を使ってできる。
わざわざ「別シェルスクリプト」に分ける意味がない。
760名無しさん@お腹いっぱい。:2013/07/12(金) 11:49:08.27
759みたいのが会社にいると、可読性が悪くなって迷惑。
761名無しさん@お腹いっぱい。:2013/07/12(金) 11:49:43.64
一時ファイルとか、名前付きパイプ使えばできるのは当然なので、
一時ファイルも名前付きパイプも使わずにエレガントにやる方法誰か答えてよ。
(もちろんスクリプトは1つだけでw)
762名無しさん@お腹いっぱい。:2013/07/12(金) 11:52:45.03
>>758
同じで済ますとか無責任だな
763名無しさん@お腹いっぱい。:2013/07/12(金) 13:29:38.40
func_test ()
{
sleep 1
echo "array[${1}]=${1}"
}

array=()

eval `
for i in \`seq 1 5\`
do
func_test ${i} &
done
wait
`

for i in ${array[@]}
do
echo ${i}
done
764名無しさん@お腹いっぱい。:2013/07/12(金) 13:31:48.55
>>761
なんか実行結果をファイルっぽく扱う技があったやろ
アレ使え
765名無しさん@お腹いっぱい。:2013/07/12(金) 13:36:42.28
>>763
すごい!
代入文自体を文字列として返して
実際の代入はフォアグラウンドのシェル側にevalさせるのね。
766名無しさん@お腹いっぱい。:2013/07/12(金) 15:27:25.04
eval使うとquoteしないといけない時にややこしくなるねえ。
767名無しさん@お腹いっぱい。:2013/07/12(金) 15:59:29.12
その手の、全部stdoutに出しちゃえ方式って、行の出力途中で分断される恐れとかないんか?
768名無しさん@お腹いっぱい。:2013/07/12(金) 17:21:46.84
>>767
ない
769名無しさん@お腹いっぱい。:2013/07/12(金) 17:37:13.72
なんで?1回分のechoはwrite(2)一発で出力されるって決まってるの?
770名無しさん@お腹いっぱい。:2013/07/12(金) 17:55:19.95
>>769
ちょっと違うな
恐れはあるが、恐れる理由が無い
分断されてもなにも困らないから
771名無しさん@お腹いっぱい。:2013/07/12(金) 18:05:43.87
>>748 のおかげで "詳しい方" が出てきてくれて良かったよ。
なんかすごい新しいノウハウ。

>>749 がつまらんトボケたこと書き込んでるけどw

これからも "詳しい方"のみ回答をお願いしますね
772名無しさん@お腹いっぱい。:2013/07/12(金) 18:13:36.55
>>748がなくても出てきたよ。
773名無しさん@お腹いっぱい。:2013/07/12(金) 18:19:11.89
自身では何もできないのに要求レベルを高くする屑ですね
774745:2013/07/12(金) 19:02:51.48
皆さんありがとうございます。
私が元々の質問者ですが、違う方が催促もしてくれているようでw

別の言語も考えたのですが別の言語を使う能力がないのと
引き継いだものをできるだけ生かしたいと思いました。
(シェルもそもそも出来ません・・・)

たくさんのアドバイスをいただきましたが
ぱっと見では分からないので動かしてみてから、また書きます。
775名無しさん@お腹いっぱい。:2013/07/12(金) 19:06:40.09
能力がないんじゃなく能力を身につけようとしてないんだろ。
試しに勉強してみなよ。シェルで無理するより楽かもよ。
776745:2013/07/12(金) 19:57:58.28
>>753 >>763
お二人のアドバイス、両方ともやりたい事が出来ました。
どうもありがとうございました。

>>775
以前cとjavaは少し勉強した事があるのですが
ポインタでつまずき、オブジェクト指向でつまずきました。
プログラミングが専門ではないので許して下さい・・・
777745:2013/07/12(金) 20:06:21.41
>>764
今回は解決しましたが、そのやり方気になります。
もう少し詳しくお願いします。
778745:2013/07/12(金) 20:18:52.98
>>757
リトライとかタイムアウトでメッセージを出す仕組みってありますか?

1:****
2:****
・・・
のようなかたちの出力にして結果が得られたかを検証して
抜けているのがあれば手動でそれだけやりなおします。
止まった場合は、ctrl+cですw
779名無しさん@お腹いっぱい。:2013/07/12(金) 20:22:04.68
>>776
PerlとかRubyでいいじゃん。
ポインタ知らんでもそれなりに使えるよ。
780名無しさん@お腹いっぱい。:2013/07/12(金) 20:45:33.33
ルータのファームいじりだと、PerlもRubyも使えないので、
このスレのやりとりは、横で見てるだけでもけっこう参考になる
781名無しさん@お腹いっぱい。:2013/07/12(金) 21:19:08.39
シェルスクリプトは使えるルータ?
782名無しさん@お腹いっぱい。:2013/07/12(金) 21:37:56.21
>>779
perlとrubyもhello worldと少しは勉強しました。。
どうもその先が理解出来ず挫折するようです。
逆になんで理解できるんですか!?

linuxにはいろいろツールがそろっているし、ファイルも楽ちん
manとかネットが充実してるからついついシェルでやっています。
ネックは速度くらいですかね。
javaとかでさくっと書けたらかっこいいだろうなと思いつつ。。
783名無しさん@お腹いっぱい。:2013/07/12(金) 21:44:43.38
ぶっちゃけシェルスクリプト使いの方が希少
784名無しさん@お腹いっぱい。:2013/07/12(金) 21:50:50.54
できない言い訳を書いてる暇があったら勉強しろよタコ
785名無しさん@お腹いっぱい。:2013/07/12(金) 21:56:10.36
自分は大規模なことはやってないからですかね。
他の言語を覚えるのに身が入らないのは。
シェルも皆さんほどには理解出来ていないですけど。

学生のころfortran(当時はこれしか知らなかった)で文字処理しようとしてあきらめ
シェル(grep、sed)でやって便利さに気づきました。
786名無しさん@お腹いっぱい。:2013/07/12(金) 21:57:08.73
もう雑談スレだな。
787名無しさん@お腹いっぱい。:2013/07/12(金) 21:59:19.25
夜食でも食うかな
788名無しさん@お腹いっぱい。:2013/07/12(金) 22:40:59.79
>>781
野良電波が出ていないか定期的にチェックして、野良が出現したら
暗号化なしで繋ぎに行き、即VPNセッション張って暗号化させて、
完了したらルータのあんま使わないLEDを点灯させるスクリプトを走らせてる。
789名無しさん@お腹いっぱい。:2013/07/13(土) 05:07:32.99
わけわかめ
790名無しさん@お腹いっぱい。:2013/07/13(土) 11:48:22.50
触らない方がよさげ。
791名無しさん@お腹いっぱい。:2013/07/28(日) 21:38:31.37
Ubuntu Linuxなのですが、Linux板にシェルスクリプトスレがないのでお邪魔しました。
Linuxを始めたばかりで、無謀にもソースからのアプリコンパイルにチャレンジしており
シェルスクリプトのエラーに悩まされています。

/opt/bitnami/common/build-1/libtool: 3215: /opt/bitnami/common/build-1/libtool:
install_prog+=install: not found
/opt/bitnami/common/build-1/libtool: 3235: /opt/bitnami/common/build-1/libtool:
files+=mod_dav_svn.la: not found

この「install_prog+=」「files+=」という箇所をエディタで探して「+=」を「=」に書き換えると
エラーなく通るようになります。
後続で別のエラーが出て結局止まるのですが、それはまた別の話としまして
このnof foundという表示はどういう意味で、どう対処すべきなのでしょうか。
792名無しさん@お腹いっぱい。:2013/07/28(日) 21:45:56.66
+=はlist appendです。
shの実体がdashとかashになっていて+=理解しないんじゃない?
bashで実行してみれば?
793名無しさん@お腹いっぱい。:2013/07/28(日) 22:33:36.68
>>792
/binディレクトリを見てみたら、sh -> dash*
とリンクが張られていました。Ubuntuはdashが標準なんですね。
スクリプト先頭の /bin/sh を、/bin/bash に変更したら通りました。
一週間苦しんだのであっけなく解決して魂が抜けましたが、これも勉強ですね。
794名無しさん@お腹いっぱい。:2013/07/29(月) 09:57:14.62
>>793
まぁ、そうなんだけど、bashのつもりでshとスクリプトに書く方が悪いと思う。
そのアプリのメンテナにバグレポートを送ってもよいと思う。
795名無しさん@お腹いっぱい。:2013/07/29(月) 10:32:23.58
>>791
↓で聞けばいいよ。

くだらねえ質問はここに書き込め! Part 206
http://engawa.2ch.net/test/read.cgi/linux/1370948130/
796名無しさん@お腹いっぱい。:2013/07/29(月) 10:48:52.07
何でこのスレって排除傾向なの
797名無しさん@お腹いっぱい。:2013/07/29(月) 10:52:22.89
>>796
円満に終わった話を蒸し返そうとする>>795がアホなだけ
798名無しさん@お腹いっぱい。:2013/07/29(月) 10:55:23.96
しかも誘導先がくだ質って、悪質そのもの
799名無しさん@お腹いっぱい。:2013/07/29(月) 11:24:13.42
なんでそうなんのw
800名無しさん@お腹いっぱい。:2013/07/29(月) 12:11:01.41
>>796
一部のバカのレスをスレ全体の傾向に敷衍するのは、荒らすのが目的ですか?
801名無しさん@お腹いっぱい。:2013/07/29(月) 12:17:13.23
すでに荒れきってるんですが・・・
802名無しさん@お腹いっぱい。:2013/07/29(月) 13:36:18.05
たいした理由もなくアホだのバカだの悪質だの言う方が荒らしだよなぁ。
803名無しさん@お腹いっぱい。:2013/07/29(月) 15:25:19.01
>>802には理由が見えてないってこと?
804名無しさん@お腹いっぱい。:2013/07/29(月) 16:22:03.89
もうそのくらいにしとけ。
雰囲気悪くするだけだ。
805名無しさん@お腹いっぱい。:2013/07/29(月) 21:49:46.18
dashとbash比較した時
クライアンス運用ならdashのが劣っている点はなんですか?
806名無しさん@お腹いっぱい。:2013/07/30(火) 08:43:07.58
クライアンス?
807名無しさん@お腹いっぱい。:2013/07/30(火) 10:15:05.83
"クライアンス運用" でぐぐってみ。
808名無しさん@お腹いっぱい。:2013/07/30(火) 10:19:47.30
勿論ググりましたが、当方馬鹿なのでわかりません
サルでも分かるような回答を強く期待します
809名無しさん@お腹いっぱい。:2013/07/30(火) 10:32:43.97
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13110942143
についてどう思いますか?
要は本に載ってたサンプルに

eval echo $"$VAR2"

というのがあって bash では動かないという話ですが
クォートすればいいのにしないというのは
普通のことだったんでしょうか。
810名無しさん@お腹いっぱい。:2013/07/30(火) 11:17:53.10
普通か、って聞かれても答えにくいな。
811名無しさん@お腹いっぱい。:2013/07/30(火) 12:22:42.64
warning 出してほしいとかいう話がちょっと前にあったみたいだけど
これは warning 出せるかも。
いや、bash ではどうすんだ?
812名無しさん@お腹いっぱい。:2013/07/31(水) 13:46:59.71
LinuxとBSDで開業コード違いますよね。
Linuxは0xnで改行、BSDは0xrで改行しますよね。
どうしてこういう違いができたんでしょう?
シェルで簡単に返還する方法はありますか?
813名無しさん@お腹いっぱい。:2013/07/31(水) 14:07:18.40
だったらこの改行コード変換して読めるようにしてくれよ!
N・K・F! N・K・F!
814名無しさん@お腹いっぱい。:2013/08/01(木) 07:16:25.69
>>812
> LinuxとBSDで開業コード違いますよね。

違いません
だから変換する方法も必要ないです
815名無しさん@お腹いっぱい。:2013/08/01(木) 10:29:34.94
MAC以外のBSDってもう死滅したでしょ?
816名無しさん@お腹いっぱい。:2013/08/01(木) 10:31:35.60
してないよ。
817名無しさん@お腹いっぱい。:2013/08/01(木) 10:39:32.32
>>815
FreeBSD 最新安定版リリース 9.1 / 2012年12月31日
NetBSD 最新安定版リリース 6.1 / 2013年5月18日
OpenBSD 最新安定版リリース 5.2 / 2012年11月1日
818名無しさん@お腹いっぱい。:2013/08/01(木) 10:44:20.33
>>815
NECの家庭用ルータは全部BSD系。
シリアルケーブル繋ぐとメッセージも出る。

Sat Jan 1 00:00:05 JST 2011

NetBSD/messimips (Amnesiac) (console)

login:
IPL:HARD-RESET
memory test ... ok
flinstall OK

boot version: 1.0.0

PKG "Sky-ST"
CPU "Atheros/AR9341"
Revision 12.1 CLOCK 535.0 MHz
HEAP MEMORY 262144 bytes
Boot:InitFilesystem
phy1.0: "Atheros/AR934x(SW)"
phy1.4: "Atheros/AR934x(phy)"
active ch:1
post start
DRAM Test ..... PASS
Timer test .... PASS
FLASH CHKSUM .. PASS
LAN Test .....
LoopBack count 0 ..
819名無しさん@お腹いっぱい。:2013/08/01(木) 11:05:55.47
ほそぼそと生きてるんだね
温かい目で見守りたくなる
820名無しさん@お腹いっぱい。:2013/08/01(木) 11:06:31.44
ほそぼそでもないよ。
821名無しさん@お腹いっぱい。:2013/08/01(木) 11:20:53.85
お前らが書き込んでるここもFreeBSDだろ
822名無しさん@お腹いっぱい。:2013/08/01(木) 11:23:58.92
それはサーバーじゃんw サーバーじゃ意味ないんだよ。ルーターもだけどな。
823名無しさん@お腹いっぱい。:2013/08/01(木) 11:27:37.90
「意味ない」の意味がわからないけど
それならWinとMac以外みんな死滅してるでいいんじゃね
お前の中ではな
824名無しさん@お腹いっぱい。:2013/08/01(木) 11:32:23.23
この話おわり。
825名無しさん@お腹いっぱい。:2013/08/01(木) 11:37:54.13
結論 : NECのルータが最強
826名無しさん@お腹いっぱい。:2013/08/01(木) 11:39:09.55
827名無しさん@お腹いっぱい。:2013/08/01(木) 18:45:56.98
Mac OS Xも改行はLFのみです。

$ cat -e -v /etc/rc.common | head -3
##$
# Common setup for startup scripts.$
##$
828名無しさん@お腹いっぱい。:2013/08/05(月) 18:12:49.35
_人人人人人人_
> 智花のbash <
 ̄Y^Y^Y^Y^Y^Y^ ̄
829名無しさん@お腹いっぱい。:2013/08/07(水) 14:50:11.09
袋小路に入ったみたいなので助けて下さい。

---- tmp.sh -----
#!/bin/bash

mediainfo --Inform="Video;%Width%" tmp.wmv
---- ここまで ---
は期待と通りに動作するのですが、

---- tmp1.sh -------
#!/bin/bash

_C="mediainfo --Inform='Video;%Width%'"
${_C} tmp.wmv
---- ここまで ----
だとInformオプションが無視されます。
シングル・ダブルクオートの入れ替え、;や%をエスケープなど試行錯誤したのですが、
変数に格納してからmediainfoを使うと、Informオプションは無視されます。
830名無しさん@お腹いっぱい。:2013/08/07(水) 15:08:09.48
>>829

"${_C}" tmp.wmv
831名無しさん@お腹いっぱい。:2013/08/07(水) 15:09:28.48
すみませんが詳しい方のみ回答をお願いします
832名無しさん@お腹いっぱい。:2013/08/07(水) 15:48:22.47
>>831
勝手に成りすまさないで。
>>830
コマンド+オプションを変数に格納して、
変数をダブルクオートで囲むと、
command not found
になるよ。
------ tmp2.sh ------
#!/bin/bash

_C="ls -l"
"${_C}" hoge.txt
------ ここまで ----
$ bash tmp2.sh
tmp2.sh: 行 4: ls -l: コマンドが見つかりません
833名無しさん@お腹いっぱい。:2013/08/07(水) 16:09:37.21
>>829

eval "${_C}" tmp.wmv
834名無しさん@お腹いっぱい。:2013/08/07(水) 16:31:33.00
>>833
解決しました。ありがとうございました。
evalは今まで避けてきましたが、これを機会に勉強します。
835名無しさん@お腹いっぱい。:2013/08/07(水) 23:50:30.20
シングルクォートを取るだけじゃいかんの?
836名無しさん@お腹いっぱい。:2013/08/08(木) 05:39:46.28
ashとbash比較した時
クライアング運用ならashのが劣っている点はなんですか?
837名無しさん@お腹いっぱい。:2013/08/08(木) 07:42:59.40
補間、ヒストリできないだろ。それに耐えられるならどうぞ。
838名無しさん@お腹いっぱい。:2013/08/08(木) 08:35:21.28
そいつ荒らしだから相手しちゃいかんよ。
839名無しさん@お腹いっぱい。:2013/08/08(木) 08:36:52.24
少なくともFreeBSDで魔改造されてる/bin/shは補完、ヒストリー呼び出し(!では呼び出せないが)は出来る。
840名無しさん@お腹いっぱい。:2013/08/08(木) 09:09:32.01
じゃあashをもっと使うべきだよね
841名無しさん@お腹いっぱい。:2013/08/08(木) 09:38:22.44
ログインシェルとして普通に使ってるよ。
842名無しさん@お腹いっぱい。:2013/08/08(木) 09:45:19.84
わかりました。ashでクライアング運用することにします。
843名無しさん@お腹いっぱい。:2013/08/18(日) 03:17:39.48
Postfix にメールが届いた時pipeを使ってrbenvでインストールしたrubyにプログラムを処理させたいのですが
ruby command not foundになってしまいます。
ログインシェルじゃないから.bashrcが読み込まれていないのが原因だと思いますがsourceで読み込んでみたり、bash -l -cなども試しましたがやはり読み込んでくれません
どこで質問したらいいかもわからず、もしすれ違いなら誘導して頂けると嬉しいです
844名無しさん@お腹いっぱい。:2013/08/19(月) 18:27:47.36
env で環境変数を適切に設定してやればいいだけじゃないの?
まあ、個人設定に依存するものをシステムワイドな環境で実行できるようにするのは
セキュリティホールなので、できたとしてもやらない方がいいと思うけど。

# ruby を実行させるコマンドだったはずなのに後でユーザが破壊的な処理をする
# スクリプトに置き替えたら、システムの権限で動いてしまう。
# postfix なら root では実行されないのでまだマシだけど。
845名無しさん@お腹いっぱい。:2013/08/19(月) 19:04:34.20
http://cr.yp.to/daemontools.html
これ使えば、楽なんだけど
846名無しさん@お腹いっぱい。:2013/08/19(月) 23:51:49.72
postfixにはsmrshみたいな仕組みあるのかな。
sendmailでやってたのずいぶん昔の話だから覚えてないや。
847名無しさん@お腹いっぱい。:2013/08/20(火) 00:03:55.64
848名無しさん@お腹いっぱい。:2013/08/20(火) 00:05:11.37
849名無しさん@お腹いっぱい。:2013/08/20(火) 01:23:15.30
>>843
「pipeを使って」とは http://www.kobitosan.net/postfix/trans-2.2/jhtml/pipe.8.html
これのこと?
そして実行したいrubyのプログラムを実行するシェルスクリプトをpipeのコマンドとして指定してるということ?
だとしたら rbenv で、どれかのrubyを選択しているときのシェルの環境変数を調べて、
postfixのpipeで実行しているシェルスクリプトの最初で同じになるように設定すれば、なんとかならないかな?
850843:2013/08/20(火) 02:23:27.34
聞いといて申し訳ないのですが仕様が変更になりPostfixは使わなくなりました。緊急性がなくなり気が抜けてしまいましたが頂いた参考URLは見させてもらいます。アドバイスいただき本当にありがとうございました
851名無しさん@お腹いっぱい。:2013/08/27(火) 23:36:16.57
ディレクトリの中に複数のテキストファイルが入っていて、
各々のファイル名を取得してそのファイル自身にファイル名を書き込むというか追加していく
というシェルスクリプト教えて下さい!
852名無しさん@お腹いっぱい。:2013/08/27(火) 23:41:15.81
>>851
学校の宿題っぽいな。
テキストファイルの拡張子がtxtだったとすると、
ワンライナーで、
$ for t in *.txt; do echo $t >> $t; done
でいけると思うが、宿題でなければこれで解決だろ。
853名無しさん@お腹いっぱい。:2013/08/28(水) 00:32:51.22
>>852さんありがとうございます!
宿題ではないですが超初心者です。
テキストファイルなんですが拡張子が付いてないので
試しに.txt拡張子追加してから

$ for t in *.txt; do echo $t >> $t; done

をtest.shという名前で保存して
テキストファイルがあるフォルダに放り込んでchmod +xしてから
実行しました。エラーもなく終わるんですが、どこにもファイル名が追加
されてないようです。
854名無しさん@お腹いっぱい。:2013/08/28(水) 00:45:14.17
>>853
bash test.shしてみなさい
855名無しさん@お腹いっぱい。:2013/08/28(水) 01:01:54.31
>>854さん、ちゃんと最下段にファイル名追加されました、感動です!
ありがとうございます!
856名無しさん@お腹いっぱい。:2013/08/28(水) 01:11:55.07
>>855
ということは、もしかしてtest.shを実行するつもりで
$ test
ってやりました?
857名無しさん@お腹いっぱい。:2013/08/28(水) 01:17:19.11
そんなわけないだろう。
なぁ?
858名無しさん@お腹いっぱい。:2013/08/28(水) 01:17:45.09
最初は改行コードがLFになってなくて動かなくて
それに気づいて改行コード直したら、今度は
>>852さんの
$ for t in *.txt; do echo $t >> $t; done
をそのまんまコピペして行頭の$を取るの忘れてsyntax error出ました。

それでやっと$取り忘れたの気がついて動きました、お手数かけてすみませんでした。
859名無しさん@お腹いっぱい。:2013/09/04(水) 02:17:02.05
CentOSの再起動のたびに複数あるSCSIデバイス名(/dev/sd*)が変更される。
でもブロックデバイスでしか動作しないソフトがある・・・てことで、
/dev/disk/by-idやmultipath -lのようなコマンドでメジャー/マイナー番号を引き、
mknodで固定的なデバイスを作成する
・・・みたいなことをシェルで実装したいのですが可能なものですか?
860名無しさん@お腹いっぱい。:2013/09/04(水) 03:37:09.69
手作業で出来ているなら、シェルスクリプトでも出来るはず
861名無しさん@お腹いっぱい。:2013/09/04(水) 07:11:59.18
>>859
変な小細工せずに、/etc/udev/rules.d/??-persistent.rules で設定して
SCSIデバイス固定にするのが筋だろ。
862名無しさん@お腹いっぱい。:2013/09/06(金) 19:49:14.08
udevadm info -a -n /dev/sda
で出てくる条件で固有のものをさがして
ATTRS{model}=="FD-05PUQ",MODE="0666",SYMLINK+="fd0"
って感じでrulesに書くんだけどね。
一行のうち"=="が条件文で"="や"+="が実行文
863名無しさん@お腹いっぱい。:2013/09/08(日) 18:32:55.58
下記のようなフォルダ構成(src,src2など複数のフォルダがある、src直下にファイルがある、複数階層のフォルダがある)になっていて
src以下と同じフォルダ構成をlinkフォルダ以下に作成し
src以下にある全ファイルのシンボリックリンクをlink以下の同じフォルダの場所に作成したいです。
そこに、src2以下も同様にシンボリックリンクを作成し、linkフォルダ以下ではsrcとsrc2がマージされた状態としたいです。

また、シンボリックリンクのリンク先は絶対パスではなく相対パスで設定しておきたいです(myrootフォルダごと移動しても動くようにするため)
srcとsrc2には、同じファイル名のファイルが入っていることはありません。
どんなスクリプトでできるでしょうか?

現在:
myroot/
 link/
 src/
  a.txt
  f1/
   b.txt
  f2/
   f3/
    c.txt
 src2/
  f2/
   d.txt
864863:2013/09/08(日) 18:33:28.24
期待値は以下のような構成になることです

期待:
myroot/
 link/
  a.txt
  f1/
   b.txt
  f2/
   d.txt
   f3/
    c.txt
 src/
  以下略

自分でやろうとしてみたところ
フォルダを決め打ちにしてやったとしても
シンボリックシンクを相対パスで設定することがうまく思いつきませんでした
865名無しさん@お腹いっぱい。:2013/09/08(日) 18:47:07.89
>>863
そのために lndirってコマンドがあるんだけど。それじゃダメ?

あ、imakeとかxmkmfとかの系統のコマンドだから、年代物なんだけどね。
866名無しさん@お腹いっぱい。:2013/09/08(日) 19:06:55.94
>>865
返信ありがとう。lndir知りませんでした。
ですがlndirだとsrcは絶対パスを渡す必要があるようでした。

myrootを移動できるように、相対パスでできるとうれしいです
867名無しさん@お腹いっぱい。:2013/09/08(日) 19:34:41.88
>>866
何言ってんだよw

lndir に相対パス渡せるよ。普通相対パスで使うし。
868863:2013/09/08(日) 20:20:29.08
>>865,867
ありがとうございます!
相対パスで指定できました

カレントではなくlink からみた相対パスを指定するんですね
すみませんmanもちゃんと見ずに決めつけてしまってました

myroot $ lndir ../src link && lndir ../src2 link
869名無しさん@お腹いっぱい。:2013/09/11(水) 23:16:48.16
おまいら、ちょっくら教えてください。

↓のような感じのCSV形式の通信ログがあります。
[日時],[送信元IP],[送信元Port],[宛先IP],[宛先Port],[TCPorUDP],[bytes],[通信時間(s)]

このログから送信元IPが"192.168.0.1"の行だけを抜き出したいのですが、
単純にgrep "192.168.0.1"とかすると、宛先IPが"192.168.0.1"の場合も
かかってしまいまつ。(´・ω・`)

2番目の要素のところだけで検索をかけられるような、簡単なコマンドとか
処理方法ってないでしょうか? ご存じでしたらおながいします。
870名無しさん@お腹いっぱい。:2013/09/11(水) 23:26:35.43
>>869
awk -F, '$2 == "192.168.0.1" { print }'
871869:2013/09/11(水) 23:49:22.31
>>870
ありがd
872名無しさん@お腹いっぱい。:2013/09/16(月) 00:31:27.99
cshの組み込みコマンド echo で&#165;nを改行コードとして扱いたいのですが。
例)echo "test"&#165;n"test"

test
test

bashは使えない環境のため、cshで実現をしたいのですが、可能でしょうか?
873名無しさん@お腹いっぱい。:2013/09/16(月) 00:33:52.08
>>872
> cshの組み込みコマンド echo で&#165;nを改行コードとして扱いたいのですが。
すみません、文字化けしてしましました・・・
&#165;n(円マーク)nです。
874名無しさん@お腹いっぱい。:2013/09/16(月) 00:51:21.64
>>872です

もう一つ、教えてください。
#!/bin/csh -f
と、シェバンの中で-fを指定すると、.cshrcの中で指定したエイリアスが有効になりません。
login.cshrcなら有効になるかと考え設定したのですが、こちらでもダメでした。
他にエイリアスを設定するのに有効な場所はないでしょうか。
875名無しさん@お腹いっぱい。:2013/09/16(月) 01:19:53.67
>>872です。
もう1つだけ。
組み込みコマンドを無効化することはできないでしょうか。
組み込みコマンドを無効にし、Gnu Coreutilesのechoを利用する、という方法も検討したいのですが。
876名無しさん@お腹いっぱい。:2013/09/16(月) 01:33:38.17
>>875
echo をフルパス指定で実行すれば?
877名無しさん@お腹いっぱい。:2013/09/16(月) 02:02:57.34
>>876
> >>875 
> echo をフルパス指定で実行すれば?
ありがとうございます。

既存のアプリケーションを改修できないため、フルパスでの指定は不可能なのです。
# 既存のソースコーソは#!/bin/csh -f ; echo "hogehoge"ときさいされており。
878名無しさん@お腹いっぱい。:2013/09/16(月) 08:54:19.20
シェルスクリプトなんだから改修ぐらいしろよ
修正できないっていう前提がおかしい
879名無しさん@お腹いっぱい。:2013/09/16(月) 09:54:54.21
>>878
> シェルスクリプトなんだから改修ぐらいしろよ
> 修正できないっていう前提がおかしい
そうですよね。プロジェクトの方針なので・・・
複数システムとソースを共有しており、1箇所ソースを修正すると
複数システムに影響があるため許可が出なく。
修正するべきだと思うのですが。
880名無しさん@お腹いっぱい。:2013/09/16(月) 09:57:13.27
>>873
可能だと思いますが、なぜできないかもしれないと思われるのでしょうか。
881名無しさん@お腹いっぱい。:2013/09/16(月) 10:05:41.73
>>874
-fは環境を引き継がないプロセスの起動になるので、エイリアスだけでなく、その他も引き継げなくなります。
一行目のシェル宣言はシェル起動時に実行ファイルではなく、シェルの引数として渡すことで無視されます。
% csh 実行ファイル.csh
882名無しさん@お腹いっぱい。:2013/09/16(月) 10:22:31.51
>>880
> 可能だと思いますが、なぜできないかもしれないと思われるのでしょうか。
実際に夏季のようなスクリプトを書いて挙動を確認したのですが、
&#165;nが文字列として扱われ、改行記号として扱われませんでした。

% cat 1_test.csh
#!/bin/csh

type echo
which echo

echo "abc\ndef"

% ./1_test.csh
echo is a shell builtin
echo: shell built-in command.
abc\ndef

bashだと-eを使うことでうまく処理できるのですが。
echo -e "ttt\nttt"
ttt
ttt
883名無しさん@お腹いっぱい。:2013/09/16(月) 10:29:07.00
>>881
> 一行目のシェル宣言はシェル起動時に実行ファイルではなく、シェルの引数として渡すことで無視されます。
> % csh 実行ファイル.csh

cshの引数にしたのですが、実行ファイルの先頭で宣言しているためやはり無効化されるようです。

◯-f付きのシェルファイル
% cat 2_test.csh
#!/bin/csh -f

type echo
which echo

echo "ghi\nlmn"

◯呼び出し元のシェルファイルでエイリアスを設定後、cshの引数として実行
% cat test.csh
#!/bin/csh

alias echo /bin/echo

csh ./2_test.csh

% ./test.csh
echo is a shell builtin
echo: shell built-in command. (←エイリアスが無効になっている)
ghi\nlmn
884名無しさん@お腹いっぱい。:2013/09/16(月) 11:01:58.54
>>882
いくつかの環境で試したのですが、シェルファイルではうまくいく環境もありました。(コマンドラインは大体ダメでした)
妥協になりますが、素直に改行するのはどうでしょうか?
echo "abc"
echo ""
echo "def"

どのシステムでも動くと思いますので、安全度が増します。
885名無しさん@お腹いっぱい。:2013/09/16(月) 11:12:56.37
>>884
> 妥協になりますが、素直に改行するのはどうでしょうか?
そうですね、最終的にはロジックを修正してすすめることになると思います。
が、修正せずに進められるのでしたらそのほうがよく。

> どのシステムでも動くと思いますので、安全度が増します。
そうですね・・・移植性の高いソースにするには、そうすべきだと思います。
886名無しさん@お腹いっぱい。:2013/09/16(月) 11:37:28.95
>>883
.cshrcか何かにaliasの設定はしていますか?
呼び出し元で定義したaliasは引き継がれません。
環境変数や変数などは引き継がれないことがあるので注意が必要です。
887名無しさん@お腹いっぱい。:2013/09/16(月) 13:59:13.40
>>883
> % csh 実行ファイル.csh

それが許されるなら、
alias echo /bin/echo
を書いたファイル "foo" を用意して、

$ cat foo 実行ファイル.csh | csh -f -s

で実行すればいいのでは
888名無しさん@お腹いっぱい。:2013/09/16(月) 20:28:28.64
.cshrcを何回実行しても破綻しないようにして
(set path = ($path hoge) のようなものは避ける)
source .cshrcで読んでしまえばいいんじゃないの?
889名無しさん@お腹いっぱい。:2013/09/16(月) 21:44:09.50
csh(笑) うぜぇ〜

↓のスレに移動してこっちへは帰ってくんな!
C shell 撲滅委員会
http://toro.2ch.net/test/read.cgi/unix/1094041299/
890名無しさん@お腹いっぱい。:2013/09/16(月) 22:15:45.70
>>889
csh が大好きだから csh で開発するぜ!
って話じゃないんだから悪くないだろ。
891名無しさん@お腹いっぱい。:2013/09/16(月) 22:30:01.35
>>886 , 887
返事が遅れてすみません。


.cshrcを利用することは諦めました。
全スクリプトファイルが共通で呼び出している設定ファイルがあるのでそこにセットすることに・・・
892名無しさん@お腹いっぱい。:2013/09/16(月) 22:35:03.48
>>888
こんなかんじでしょうか?

% cat .cshrc
alias ll ls -ltr

% cat test.csh
#!/bin/csh -f

source ~/.cshrc
ll

こちらも検討してみましたが、作りがイケてなくて重複が発生してしまいました。。。
893名無しさん@お腹いっぱい。:2013/09/16(月) 22:36:48.32
>>890
そうですね。私も普段はkshとbashを使ってるのですが。
なかなか、スクリプトを書くのは難しいシェルですね。
894名無しさん@お腹いっぱい。:2013/09/16(月) 22:41:04.42
皆さん有難うございました。
結局、bashでechoを自作。
アプリケーション共通の環境変数ファイルにエイリアスを設定し、echoをCallされたら自作のechoを呼び出すようにしました。
apl_env:alias echo ~/echo
echo:#!/bin/bash;echo -n -e $1
こんなかんじです。。。
アプリケーションをいじれなかったりシェルがcshだったりといろいろ厳しいですね・・・うーむ。
895名無しさん@お腹いっぱい。:2013/09/16(月) 23:33:30.83
>>886
> >>883 
> .cshrcか何かにaliasの設定はしていますか?
それにしても、aliasはどこで設定するのが正しいのでしょうかね?
shebangに-fを設定すると.cshrcが読み込まれないとすると・・・
各アプリケーションやユーザに共通の設定ファイルを作成し、アプリケーションを実行するときにそれを叩いてから実行するのがただしいのでしょうか?
本来、その手の共通ファイルは.cshrcかと思っていたのですが。
896名無しさん@お腹いっぱい。:2013/09/16(月) 23:42:02.64
>>895
man cshで分かりますが、-fはリソースやセットアップファイルを読まない、事前コマンドを実行しない、なので起動が早い
というときに使います。
aliasはcshの場合、.cshrcで基本的には書きます。
逆に言えば、-fは呼び出しユーザの環境を引き継ぎたくない時に使います。
897名無しさん@お腹いっぱい。:2013/09/16(月) 23:48:48.49
> >>895 
> aliasはcshの場合、.cshrcで基本的には書きます。
> 逆に言えば、-fは呼び出しユーザの環境を引き継ぎたくない時に使います。
ありがとうございます。

-fを使っており、かつ、エイリアスだけを使用したい場合、というのは本来ありえないのですね・・・
shebangに-fをつけた場合、個別に必要最低限の設定だけをスクリプトに設定する、ということですね。やっぱりそうですよね・・・要求が矛盾している、ということが納得出来ました。ありがとうございます。
898名無しさん@お腹いっぱい。:2013/09/17(火) 09:56:45.56
>それにしても、aliasはどこで設定するのが正しいのでしょうかね?

あれはコマンドラインで人間がラクするために使うものであって、
スクリプト中で alias なんぞ使わないのが正しい。
899名無しさん@お腹いっぱい。:2013/09/17(火) 10:04:20.08
スクリプトの中でヒストリーを使いたいんですが、

#!/bin/sh
echo hoge
!!

ってやっても、!!: command not found
になります><
もちろん、2回同じコマンド書けばいいだけですが、
スクリプトのファイルサイズも節約したいので !! が使いたいです。
使えるようにする方法をご存知の方、女教授ください。
900名無しさん@お腹いっぱい。:2013/09/17(火) 10:23:48.60
>>899
!!じゃなくて申し訳ないけど、再利用するなら変数に入れたらどうなの?

#!/bin/sh

CMD="echo hoge"
$CMD # 1回目
$CMD # 2回目
901名無しさん@お腹いっぱい。:2013/09/17(火) 10:38:44.78
>>899
Bourne shellは履歴機能がないので、履歴系のコマンドは使えません。
何度も書くか、>>900のように変数に入れて実行になります。
902名無しさん@お腹いっぱい。:2013/09/17(火) 13:29:56.43
シェル関数にしちゃえよ。動作確認済み↓

!!(){ echo hoge;}

!!
903名無しさん@お腹いっぱい。:2013/09/17(火) 14:32:38.90
! !!
904名無しさん@お腹いっぱい。:2013/09/17(火) 22:37:25.63
:(){ :|:& };:
905名無しさん@お腹いっぱい。:2013/09/17(火) 22:51:17.74
>>898
> >それにしても、aliasはどこで設定するのが正しいのでしょうかね?
>
> あれはコマンドラインで人間がラクするために使うものであって、
> スクリプト中で alias なんぞ使わないのが正しい。

なるほど。
変数に設定しておけば、いいですしね。
次から機会があれば参考にさせていただきます。
906名無しさん@お腹いっぱい。:2013/09/18(水) 06:21:30.43
>>904
`:': not a valid identifier
907名無しさん@お腹いっぱい。:2013/10/13(日) 20:08:45.64
こういった文章があるとして「行」を含むワードを取り出したい。
sedあたりが\bで単語 境界を設定できるようだがそれを利用して書けないだろうか?

|sed -e 's/.*\(\b.*行.*\b\).*$/\1/'

だと「文章」は
実行したい
になる。あと少しが足りない。

文章↓
そして実行したいrubyのプログラムを実行するシェルスクリプトをpipeのコマンド
908名無しさん@お腹いっぱい。:2013/10/13(日) 23:04:55.97
何をしたいのか分からないけど、こっちの環境だとこうなった

$ cat aaa
そして実行したいrubyのプログラムを実行するシェルスクリプトをpipeのコマンド

$ sed -e 's/.*\(\b.*行.*\b\).*$/\1/' aaa
実行するシェルスクリプトをpipeのコマンド
909名無しさん@お腹いっぱい。:2013/10/14(月) 00:06:21.49
「行」という文字が含まれてる漢字の単語が欲しいんだ。
この場合だと「実行」が取り出せれば完成。

例えばこのスレでは使われた漢字の多い順に
174 行
136 無
134 使
となっている。
うまく行を含む単語、このスレでは「実行」が一番多く(だいたい78個)
最終的には一番頻度の高い単語である「実行」でgrepしようと思ってる。

平たく言えば「斜め読み」の補助、斜め読みの切り口の一つとして
単語切り出したい。
910名無しさん@お腹いっぱい。:2013/10/14(月) 02:01:21.99
911名無しさん@お腹いっぱい。:2013/10/14(月) 02:27:28.77
ありがとう。
シェルスクリプトだとちょっとバックスラッシュ多くて困った感。見えにくいね。
perl 習得したら完成させてみる。
http://2ch-ita.net/upfiles/file8868.jpg

できるだけsed とか、妥協してperlとかの10年 20年先もまず変化しないで移植性高いので書きたいからね。
漢字の連なりだけだからパズルみたいに解けるとは思うんだが、まあ今は仕方ないか。
912名無しさん@お腹いっぱい。:2013/10/14(月) 04:02:31.62
kakashi は応用できないのかな?
形態素解析というとそれしか知らんが
手軽にセットアップできるから
試してみても良いかもしれん。
913名無しさん@お腹いっぱい。:2013/10/14(月) 04:06:39.07
あ、>>910 にちゃんと書いてあったな。
914名無しさん@お腹いっぱい。:2013/10/14(月) 04:11:23.12
案山子
茶筅
雌株

好きなの使えよ
915名無しさん@お腹いっぱい。:2013/10/15(火) 10:24:16.01
>>907
規制されて書き込めなかったけど、

$ echo そして実行したいrubyのプログラムを実行するシェルスクリプトをpipeのコマンド |nkf -We | kakasi -w | nkf -Ew | sed -e 's/ /\n/g' |grep 行
実行
実行

これでいいの?
916名無しさん@お腹いっぱい。:2013/10/15(火) 11:46:45.43
>>915
素晴らしい精度だ。本当に驚いた。
cygwinでkakasi インストールがリポジトリからできないのが悔しいが脅威の精度の高さ。ありがとう。

http://kakasi.namazu.org
ホームページに従ってcygwinにインストールしました感謝。

頻度見るために 最後の方に
|sort|uniq -c|sort|tail
追加で___"↓"___が出力されて期待通り。

92 実行
917名無しさん@お腹いっぱい。:2013/10/15(火) 13:05:57.54
>>916
解決してよかったけど、老婆心ながら、
「実行」は検出できるけど、
「実
行」というように検索語の途中に改行が入っていると駄目だから、そこは気をつけてね。
正規表現を工夫するとか、改行を全部取り去って長い1行にするとか、対処が必要。
918名無しさん@お腹いっぱい。:2013/10/15(火) 19:38:16.78
>>917
統計処理で最も多い単語
>>917
統計処理で最も多い単語をあぶり出す為だからそれぐらいなら大勢に影響がないから実質大丈夫。
自分が書いたスクリプトより10%ぐらい精度が高いからもう満足。

マシンスペック的にもこの辺がぎりぎりだから精度改良の追加処理は、
5年とか10年後の良いPCの上でだな。


~/ time w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/|Word
19 行
86 実行
w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/ 0.11s user 0.20s system 23% cpu 1.305 total
sh ~/sbin/Word.sh 行 0.10s user 0.32s system 32% cpu 1.298 total

~/ time w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/|kWord
15 改行
95 実行
w3m http://toro.2ch.net/test/read.cgi/unix/1352973453/ 0.08s user 0.18s system 20% cpu 1.265 total
sh ~/sbin/kWord.sh 行 0.87s user 0.34s system 77% cpu 1.557 total
920名無しさん@お腹いっぱい。:2013/10/16(水) 07:59:54.71
なんか面白そうなことしているね
921名無しさん@お腹いっぱい。:2013/10/23(水) 14:54:26.78
bashでforkする方法ってあります?
922名無しさん@お腹いっぱい。:2013/10/23(水) 15:07:30.88
もちろん!
923名無しさん@お腹いっぱい。:2013/10/23(水) 16:47:26.97
うそだ!
調査の結果、bashでforkする手段は存在しなかった。
924名無しさん@お腹いっぱい。:2013/10/23(水) 16:48:42.21
調査が足りないようだな!
925名無しさん@お腹いっぱい。:2013/10/23(水) 17:13:35.47
>>924
悪魔の証明でもさせる気かよ。
反例挙げてみろよ
926名無しさん@お腹いっぱい。:2013/10/23(水) 17:16:26.30
次のレスで誰かがforkbomb投下
927名無しさん@お腹いっぱい。:2013/10/23(水) 19:03:42.40
>>926
forkbombって別のプロセスを複数起動しているだけで
現在のシェルを複製してるわけじゃないから。
928名無しさん@お腹いっぱい。:2013/10/23(水) 21:49:12.28
関数をバックグラウンドでうごかせばforkじゃないの?
forkの意味が違う?
929名無しさん@お腹いっぱい。:2013/10/23(水) 22:16:38.55
#!/bin/sh
sh $0 "$@"
930名無しさん@お腹いっぱい。:2013/10/24(木) 09:53:35.62
外部コマンドを実行した時点で
おまえはすでにfork()してる

ていうか何を指してんだ?
fork組み込みコマンドみたいなのをイメージしてるのか?
931名無しさん@お腹いっぱい。:2013/10/24(木) 10:01:56.12
そうだと思う
if fork; then
echo Parent
wait
else
echo Child
exit
fi
みたいな
932名無しさん@お腹いっぱい。:2013/10/24(木) 11:47:25.02
>>931
そうそうそうそう そういうの
933名無しさん@お腹いっぱい。:2013/10/24(木) 22:03:40.10
じゃ関数でいいじゃない
同じ事だよ
934名無しさん@お腹いっぱい。:2013/10/25(金) 13:16:58.33
>>933
ちがうっつってんだろボケ
935名無しさん@お腹いっぱい。:2013/10/25(金) 13:30:46.49
func()
( ... )
で同じことだと思うが、何か違うか?
936名無しさん@お腹いっぱい。:2013/10/25(金) 13:33:52.73
fork で何をしたいんだろう。
937名無しさん@お腹いっぱい。:2013/10/25(金) 14:11:52.49
ナポリタン食べたい
938名無しさん@お腹いっぱい。:2013/10/25(金) 14:14:05.60
&
939名無しさん@お腹いっぱい。:2013/10/25(金) 14:18:35.58
>ナポリタン食べたい

1 : 投げ槍
2 : 匙を投げる
3 : exit
940名無しさん@お腹いっぱい。:2013/10/25(金) 14:27:36.78
子プロセスじゃなくてスレッドで処理したいのかな
941名無しさん@お腹いっぱい。:2013/10/25(金) 14:44:32.40
>>932
931 は

#!/bin/bash
fo() {
echo Child
sleep 3
}

fo&
echo Parent
wait

こういうことじゃないかな。
942名無しさん@お腹いっぱい。:2013/10/25(金) 20:57:40.43
>>934
何で違うと思うのか説明しろボケ

正しく理解してるなら質問しにくる必要ないよな。
さっさと失せろ。
943名無しさん@お腹いっぱい。:2013/10/25(金) 21:14:32.85
forkして、親プロセスのみexitして、子プロセスをinitの子供にするみたいなこと
やりたいんじゃないかな。
>>941 だと子プロセスがバックグラウンドになってしまう。
子プロセスもフォアグラウンドのまま親だけexitしたいみたいな。
944名無しさん@お腹いっぱい。:2013/10/25(金) 21:48:30.71
それならば、バックグランドで実行して親のシェルプロセスはそのまま終了すればいい。
945名無しさん@お腹いっぱい。:2013/10/25(金) 22:18:42.82
>>944
それだとやはりバックグラウンドプロセスのままになってしまう。
バックグラウンドプロセスはsignalの扱いがフォアグラウンドと違うから。
そこ理解してない奴多いんだけどさ。
946名無しさん@お腹いっぱい。:2013/10/25(金) 23:31:08.32
>>945
説明が下手なのが一番の問題
「本当にやりたいこと」がさっぱり分からない

「理解していない奴多い」とかいう以前に何がしたいのか伝わっていないから
>>944のような回答が出る
947名無しさん@お腹いっぱい。:2013/10/26(土) 00:41:27.22
飽くまで想像だけど、
親と子にPIDが違うだけでほぼ同じ処理をさせたいとする。
たまには親か子かを意識して違う処理に分岐するかもしれない。
ってとき、シェルスクリプトでどう書くのがスマート?
948名無しさん@お腹いっぱい。:2013/10/26(土) 08:16:46.51
>>946
実際やりたいことなんかなくてただイチャモンつけたいだけなんだろう。
949名無しさん@お腹いっぱい。:2013/10/26(土) 08:40:28.46
forkはしたいけどexecはしなくないってことでないの?
950名無しさん@お腹いっぱい。:2013/10/26(土) 09:03:06.42
>>949
それで何をしたいのか。
951名無しさん@お腹いっぱい。:2013/10/27(日) 13:55:20.94
それでソース詠唱したいw
952名無しさん@お腹いっぱい。:2013/10/28(月) 19:24:43.07
bashでfork出来ないってことをどうして認めないのか謎
953名無しさん@お腹いっぱい。:2013/10/28(月) 19:47:19.68
オワドの涙は0円
今井の挨拶100円
954名無しさん@お腹いっぱい。:2013/10/28(月) 19:48:57.98
      ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   レオナルド
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
       ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   ラファエロ
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
       ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   ドナテロ
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
       ____
     /____\
   /ィ赱、i_i_r赱ミ\
  / ̄ ̄ ̄ィ'。_。ヽ ̄ ̄\   ラファエロ
  |    / _lj_ }    |
  \    、{ ^' ='= '^'   /
955名無しさん@お腹いっぱい。:2013/10/28(月) 20:17:23.16
>>952
UNIX系のOSでfork(vfork)以外に子プロセスを生成する方法ってある?
bashで関数をバックグラウンドで実行するときって、forkしてるんじゃないの?
956名無しさん@お腹いっぱい。:2013/10/28(月) 20:20:09.08
>>955
clone
957名無しさん@お腹いっぱい。:2013/10/28(月) 21:13:14.15
質問してる奴もよく理解してないみたいだが
forkじゃなくてsetsidができるかどうかじゃないの?
958名無しさん@お腹いっぱい。:2013/10/28(月) 23:38:12.10
>>952
そもそも質問者が言うforkが何を指しているのか分からん
エスパー待ち
959名無しさん@お腹いっぱい。:2013/10/28(月) 23:43:57.16
>>931じゃねえの?
960名無しさん@お腹いっぱい。:2013/10/28(月) 23:51:19.29
fork()しただけで親プロセスと同じプロセスグループに属してる状態が欲しいってことか
sh関数をバッググランド実行すると親プロセスとは別のプロセスグループに設定されてから実行されるから、
fork()じゃないと言いたいわけね?
日本語不自由すぎだろw
961名無しさん@お腹いっぱい。:2013/10/29(火) 08:45:24.15
クズい質問者にダラダラつきあってんじゃねーよ
甘やかすな
962名無しさん@お腹いっぱい。:2013/10/29(火) 09:40:23.28
ゆとりだから関数でサブプロセス化することも制御の仕方も分かってないだけだろ
要するに初めに覚えた言語の関数じゃないと理解できないただのアホ
裏で動いてる本質的な処理が全く分かってない
963名無しさん@お腹いっぱい。:2013/10/29(火) 09:58:38.32
出てこなくなった質問者を擁護してもしかたないんだけど、
プリミティブとしてのforkが欲しかったんじゃないの?
その方が細かい制御ができる場合もあるし。
もちろんCのfork()しか理解してないという可能性も高いけど。
964名無しさん@お腹いっぱい。:2013/10/29(火) 10:40:09.56
もうこの話終わりでいいだろ。
965名無しさん@お腹いっぱい。:2013/10/29(火) 12:23:39.69
開発のforkだったりして
966名無しさん@お腹いっぱい。:2013/10/29(火) 14:01:49.81
>>955
rfork
967名無しさん@お腹いっぱい。:2013/10/29(火) 14:39:31.73
俺たちはエスパーになる特訓中。
968名無しさん@お腹いっぱい。:2013/10/29(火) 16:04:45.35
実際のところ、bashでforkのみする方法ってあるの?
969名無しさん@お腹いっぱい。:2013/10/29(火) 16:20:49.30
>>968
関数を呼んだり、コマンドを実行したりせずに、ということなら
無いんじゃないか。
970名無しさん@お腹いっぱい。:2013/10/29(火) 16:37:25.49
fork が必要なら別の言語使った方がいいね。
971921:2013/10/29(火) 19:39:57.67
みんなありがとう
972名無しさん@お腹いっぱい。:2013/10/29(火) 21:08:55.09
このままスレ埋まりそうな勢いだなw
973名無しさん@お腹いっぱい。:2013/10/29(火) 21:39:12.02
case文の途中で抜けたいんだけど
breakつかうと上のfor文抜けちゃうので
どうしたらいいか よいアイデアを 出すのだ
974名無しさん@お腹いっぱい。:2013/10/29(火) 21:40:59.80
goto
975名無しさん@お腹いっぱい。:2013/10/29(火) 21:55:13.39
gotoをend行き以外で使うの恐い
976名無しさん@お腹いっぱい。:2013/10/29(火) 21:58:12.02
てか、gotoってcshかよ
977名無しさん@お腹いっぱい。:2013/10/30(水) 07:59:22.95
ラベル付きbreakってないんだっけ。
978名無しさん@お腹いっぱい。:2013/10/30(水) 14:04:29.64
caseにbreakは無いのでド壺ってるわけで、ラベル付きbreakはあったとしても役立たず
979名無しさん@お腹いっぱい。:2013/10/30(水) 14:39:46.49
if文で続きの処理をしなければいいだけ。
case $foo in
bar) baz; if qux; then quux; fi ;;
esac
980名無しさん@お腹いっぱい。:2013/10/30(水) 15:13:47.48
>>979
ありがとう
やっぱこのダサい方法しかないか
981名無しさん@お腹いっぱい。:2013/10/30(水) 16:16:09.22
ひらめいた
こんなのどう?
for onlyonceforbreakincase in 1; do
case $foo in
bar) baz; if qux; then break; fi; quux ;;
esac
done
982名無しさん@お腹いっぱい。:2013/10/30(水) 17:47:57.45
え、continueってこういう時使うんじゃないの
983名無しさん@お腹いっぱい。:2013/10/30(水) 18:11:18.13
>>982
それじゃ、case文の後が実行されないだろ
984名無しさん@お腹いっぱい。:2013/10/30(水) 22:42:14.92
これ、バグ?

#!/bin/sh
LANG=C
export LANG
d=^`date "+%b %d %H:%M"`
echo $d
d=^`env TZ="JST offset 00:01" date "+%b %d %H:%M"`
echo $d

(実行結果:env TZ付きで打つと%Hがたぶん%mで出てくる)
^Oct 30 19:19
^Oct 30 10:18

dateの-vでこと無きを得たけど。
985名無しさん@お腹いっぱい。:2013/10/30(水) 23:17:08.28
If TZ appears in the environment but its value is a null string,
Coordinated Universal Time (UTC) is used.
986984:2013/10/31(木) 00:13:45.03
>>985
うまく書けますた。thx
アホなこと書いちゃった(^_^; 試した時期が悪かったなw
987984
ちょっと訂正。TZでうまく(-1分の時刻を表示)書けてはいなくて、結局date -vを採用した。
TZは、UTC+15とかでフツーにhour単位でズラすのは知ってたから、勘違いした。
'offset'付けるとNGなのね。