15/10/28 15:00:41.96 .net
>>109
>>112
>>113
107です、ありがとうございました。ファイルを読ませることしか頭にありませんでしたので、聞いてよかったです。
その方式で、スクリプトの冒頭で設定を担当するコードを実行するようにします。
120:名無しさん@お腹いっぱい。
15/10/28 22:16:32.33 .net
質問してるくせに偉そうだな
121:名無しさん@お腹いっぱい。
15/10/28 23:07:56.69 .net
>>117
具体的にどこが偉そうなの?どこがカンに障るの?
122:名無しさん@お腹いっぱい。
15/10/29 04:20:02.34 .net
教えを乞うてるくせにお腹いっぱいなのが気にくわない。
123:名無しさん@お腹いっぱい。
15/10/29 06:23:24.26 .net
unixの管理をしています。
ユーザーはソフトのインストール禁止ですが、
最近、ユーザーでも自分のホームフォルダーにソフトをコピーし、
X権限をすることによってソフトが実行できてしまうことが判明しました。
これはOSのセキュリティーボールではないのでしょうか?
ユーザーのフォルダーではたとえX権限がされていても
実行できないようなおすすめのunixって何ですか?
必要ならカーネルにバッチを当てる方法も、やもうえません。
124:名無しさん@お腹いっぱい。
15/10/29 07:39:00.78 .net
>>119
お腹いっぱいとは?
125:名無しさん@お腹いっぱい。
15/10/29 08:29:26.09 .net
名前じゃね
126:名無しさん@お腹いっぱい。
15/10/29 09:02:26.07 .net
シェルスクリプトっていう性質上、ある程度仕方ない面もあるけども
最近は余りにもスレ違いな話題が多くないか?
127:名無しさん@お腹いっぱい。
15/10/29 10:15:07.66 .net
スレ違いでも板違いでもかまってもらえるからな
128:名無しさん@お腹いっぱい。
15/10/29 11:15:37.67 .net
>>120
お前脳みそついてなくてUnix使ってんのか?
Windowsでも使ってろよ
希望してることができるから
129:名無しさん@お腹いっぱい。
15/10/29 12:04:46.30 .net
コピペに釣られんな
130:名無しさん@お腹いっぱい。
15/10/29 22:18:02.02 .net
>>123
>>123
131:名無しさん@お腹いっぱい。
15/10/30 11:01:24.94 .net
>>124
軌道修正したレスができるなら相手して構わないんだけど、自演が疑われるような受け売り回答って不要だよな。
132:名無しさん@お腹いっぱい。
15/11/01 13:31:00.57 .net
${@:+"$@"}という変数の記法がわかりません
たとえば/usr/bin/sensible-browserでは
/usr/bin/x-www-browser ${URL:+"$URL"}
のように使われています
なぜこう書くのかヒントをいただけたら…
133:名無しさん@お腹いっぱい。
15/11/01 14:16:24.02 .net
man bash
Parameter Expansion の項(日本語訳では パラメータの展開 の項)
を見るよろし。てか�
134:エがしょっちゅう見直すとこだわソレw
135:名無しさん@お腹いっぱい。
15/11/02 12:13:01.41 .net
ポータビリティーの話( "$@"; が 何も無し にならないで、""; と解釈されてしまう対策の事 )が参考になるかな
What does ${1+"$@"} mean?
URLリンク(www.in-ulm.de)
Autoconf
URLリンク(www.geocities.jp)
# 例えば、 $URL が未定義や、ヌルなら
/usr/bin/x-www-browser "$URL"
# は、この様な意味になるが
/usr/bin/x-www-browser ""
/usr/bin/x-www-browser ${URL:+"$URL"}
# は、こうなる
/usr/bin/x-www-browser
test.sh 引数の数に違いが出る(bash の方で理解しやすいので #!/bin/bash で)
#!/bin/bash -vx
foo="hoge"
bar=""
bash -vxc 'echo "$#, " "$@"' "dummy" "$foo"
bash -vxc 'echo "$#, " "$@"' "dummy" "$bar"
bash -vxc 'echo "$#, " "$@"' "dummy" "$baz"
bash -vxc 'echo "$#, " "$@"' "dummy" ${bar:+"$bar"}
bash -vxc 'echo "$#, " "$@"' "dummy" ${baz:+"$baz"}
136:129
15/11/02 14:09:15.67 .net
>>130
アドバイスありがとうございます。自分もよくそこ見ます
環境はlinuxのbashなのですが、"$@"と書いておけば
${@:+"$@"}と結果的に同じになるはずなのに
わざわざ後者のように書くのはどうしてかなと疑問に思った次第です
137:129
15/11/02 14:12:02.34 .net
>>131
有益な情報ありがとうございます
なるほど"$@"が""になってしまうことがあるためなのですね
違いを確認するためのスクリプトまで用意していただいて感謝です
おかげで長い間疑問だったことが氷解しました
/usr/bin/sensible-browserは、#!/bin/shですし
ポータビリティを十分に考えて作られているわけですね
なぜAdobeのacroreadなどでも使われているか納得できました
とっても勉強になりました
138:131
15/11/03 18:32:53.39 .net
>>133
> ポータビリティを十分に考えて作られているわけですね
/usr/bin/sensible-browser は、Debian 系で使われているスクリプトのようなので
dash で動けば十分でしょう
ポータビリティのサイトは参考になるかと貼りましたが、${1+"$@"} と違って
/usr/bin/x-www-browser ${URL:+"$URL"} の場合、関係無いかと思います
念の為 dash 等で内容がヌルの場合に、"$URL" と、 "$@" で展開の結果に違いが有る事を、強調しておきます
LANG=C PAGER='less -p "Special Parameters"' man dash
> @ Expands to the positional ...略... If there
> are no positional parameters, the expansion of @ generates
> zero arguments, even when @ is double-quoted.
139:名無しさん@お腹いっぱい。
15/11/04 10:19:47.91 .net
ADB shellを使ってるのですが.shで保存したadbのスクリプトを順番に実行させることって可能ですか?
例えばダブルクリックした時点で1.shが動いて~10秒後に2.shを動かして~というような感じにしたいです。
お力貸していただけると幸いです。
140:名無しさん@お腹いっぱい。
15/11/04 12:50:56.08 .net
ADB shellを実行するのがWindowsかlinuxによってバッチかシェルスクリプトかでわかれるが、
最初に/data/local/tmpあたりに転送して、chmodして、それをwait含めて実機で実行するのが
良いんじゃないの。
何をやりたいのか書いてないのでアレだが、操作する側で10秒開けるのか、実機で10秒ウェイトするのか。
あと、なぜ10秒あける必要があるのか、10秒後までに実行した端末で何が起きているのか、
その判定は必要なのか、などを考える必要があるし、
さらには泥のことをよく理解できてないオッサンたちが、こういう話題は、ここではスレチじゃね?
と煽ってくるので、飛来するオッサンたちを黙らせる技術も必要とされる
141:名無しさん@お腹いっぱい。
15/11/04 13:12:49.86 .net
すみません 記述が足りてないようでした。
現在はwindowsでbatファイルを利用してuwscというフリーソフトを使って1.batを起動させて~10秒後に2.batといった具合にやってます。
最近linuxでも開発を始めたいと思い同じようなことがしたいです。
シェルスクリプトでwindowsでやってるuwscのような制御ができないかなぁと思って質問させていただきました。
そんなめんどくさいことするよりlinuxならこのフリーソフト使って制御しとけみたいなのがあれば
教えていだだけると幸いです。
142:名無しさん@お腹いっぱい。
15/11/04 13:15:27.82 .net
>uwscというフリーソフトを使って1.batを起動させて~10秒後に2.batといった具合に
この10秒後に、という処理自体をbatでやればいいんじゃないの?
なぜuwscを挟む必要があるの?
143:名無しさん@お腹いっぱい。
15/11/04 13:29:28.23 .net
>>138 おっしゃる通りなのですがcallを使って次のbatを呼び出すことよりも先にツールを使って呼び出すことを覚えてしまったもので・・・
独学でやってるうえに無知な状態からまだ2ヶ月くらいしか経ってないものでこのスレのレベルの方からしたら程度が低い質問かもしれませんが他に聞けるような環境がないもので;;
144:名無しさん@お腹いっぱい。
15/11/04 13:33:00.98 .net
あとは、何をやりたいのか具体的に書くしか
ちなみにゲームの自動制御とか、その手の話だったら俺は降りる
145:飛来したオバハン
15/11/04 13:33:27.01 .net
アンタ泥とかwindowsとかイタチじゃないの?
146:名無しさん@お腹いっぱい。
15/11/04 17:24:19.98 .net
PATH の dirctory に無いスクリプトは、相対、絶対パスで起動するか、PATH に追加する
例えばカレントディレクトリのスクリプトは、
./script.sh
で起動出来る
ダブルクリックで起動するには、 .desktop ファイル作る
#!/bin/sh
./1.sh
sleep 10
../2.sh
/home/username/bin/3.sh
PATH="/home/username/bin:$PATH"
4.sh
PATH=".:$PATH"
1.sh
147:名無しさん@お腹いっぱい。
15/11/04 17:24:50.70 .net
又は、android 上で launcher.sh を書いておいて起動する
それをアプリから起動するなら、GScript Lite とか使うんや。よー知らんけど
#!/system/bin/sh
./1.sh
sleep 10
./2.sh
ついで
@echo off
call 1.bat
ping localhost -n 11 > nul
call 2.bat
148:名無しさん@お腹いっぱい。
15/11/04 21:13:41.29 .net
みなさんありがとうございました。すこし足がかりが得られました。
やっぱりlinuxのほうが軽くて動作も安定してる感じなのでこれからはlinux中心にデバッグを行っていけたらと思います。
149:名無しさん@お腹いっぱい。
15/11/08 19:54:14.49 .net
echoで\tを出力してるんだけど
raspbianだとTABに置き換わってるんだけど
Sientific Linuxだと\tのままなんだけど何でかわかる?
シェルスクリプトをそのまま持っていって実行したら
そんな感じになってた・・・
150:名無しさん@お腹いっぱい。
15/11/08 20:08:08.87 .net
シェルスクリプトと違って、シェルの話だと思う
echo の違いではない?
man dash
echo [-n] args...
If any of the following sequences of characters is encountered
during output, the sequence is not output. Instead, the specified
action is performed:
man bash
echo [-neE] [arg ...]
-e オプションを指定した場合、以下に示す、バックスラッシュの
エスケープ文字が解釈されるようになります。
151:名無しさん@お腹いっぱい。
15/11/08 20:14:18.70 .net
シェルスクリプトのポータビリティーの話とも言えるか...
訂正
152:名無しさん@お腹いっぱい。
15/11/08 20:37:50.28 .net
ありがとうございます
確か実装したときにecho -eオプションは使っていたのですが
raspbianの/bin/shで実行すると
echo -e "test\ttest"
が
-e test test
になってしまっていろいろ試した挙句
-eいらないじゃんってことになったのを思い出しました
�
153:。は双方とも/bin/shを使っているのですが 上記のようになるのはraspbianの/bin/shだけで /bin/bashを使うと双方とも期待したとおりの結果になりました どこかのデストリのいずれかのシェルが 実は利用者が意識してるもの(パスが示すもの)と違うというのを 見た覚えがあるのですがraspbianの/bin/shだったかは思い出せません 継続して調べてみますが取り急ぎありがとうございました
154:名無しさん@お腹いっぱい。
15/11/08 22:14:22.18 .net
echo じゃなくて printf 使うとか
printf 'TAB\tTAB\n'
# 少なくとも dash/bash/zsh では printf は shell の builtin function
そういや、ファイルの中に
-n
だけの行があって、
cat hoge.txt | while IFS= read str
do
echo "$str"
done
ってしたらその行が出力されなくてハマったことがあった…
155:名無しさん@お腹いっぱい。
15/11/09 12:53:41.77 .net
>>149
どうやって回避したの?参考までに知りたい
156:名無しさん@お腹いっぱい。
15/11/09 18:25:32.86 .net
え? 単に printf '%s\n' "$str" ってしただけだよ
157:名無しさん@お腹いっぱい。
15/11/09 22:29:31.56 .net
echoはposixでその動作が決まってるわけじゃないから
移植性重視ならprintf安定
とorilyに書いてあった
158:名無しさん@お腹いっぱい。
15/11/11 18:21:45.18 .net
1週間位試行錯誤するもうまくいかないから、ここで必要質問しようと思ったら
単にファイル名にスペースが入っていただけだった
風俗行って頭をすっきりしてます
159:名無しさん@お腹いっぱい。
15/11/11 19:33:08.21 .net
それは書き込まなくてよかったんじゃないか
160:名無しさん@お腹いっぱい。
15/11/12 14:52:38.27 .net
複数ファイルのダウンロードアルゴリズムについて教えてください
今シェルスクリプトを作ってテキストファイルに書かれてある
URLからファイルをダウンロードしています
早くダウンロードしたいため多重(多重度は回線の帯域などを考慮して3~15で任意で設定)で
ダウンロードしていますが全体の終了時間を早めたいため
ファイルサイズでソートして大きいファイルからダウンロードしています
ただこの方法だと初めの方に大きいファイルばかりダウンロードするため
成果が上がってるように見えません
またもっと効率のよい方法があるのではとも思っています
お勧めのダウンロード順(を求めるアルゴリズム)があれば教えてください
なおちょっとしたシェルスクリプトは書いていますが
やってることは以下のコマンドと大差はありません
xargs -P 10 -n 1 wget -nv -c < downlist.txt
私のほうで考えられるのはたとえば10多重の場合
大きいものからを5多重で
小さいものからを5多重で
順にダウンロードすることくらいでした
でもこの方法だと全体のダウンロード完了が
遅くなる可能性があると思います
161:名無しさん@お腹いっぱい。
15/11/12 15:11:44.91 .net
なんで大きいファイルから始めると全体の終了時間が早くなるの?
162:名無しさん@お腹いっぱい。
15/11/12 15:27:23.69 .net
ちょっとうまく説明できませんが
大きなファイルは時間がかかるので
複数ファイルを多重でダウンロードしても
最長時間になる可能性があるためです
たとえば100MB、50MB、40MB、30MB、10MBのファイルを2多重でダウンロードするとき
以下のようにすればそれぞれ平均化されるため
1つめ:100MB→10MB
2つめ:50MB→40MB→30MB
なお以下のようになるのは最悪なパターンだと思います。
1つめ:100MB→50MB
2つめ:40MB→30MB→10MB
全体の終了時間が短くなる想定です
また当然ダウンロード速度は一定ではないため
特定のファイルに時間がかかった場合
小さなサイズのファイルだと調整がしやすいというのもあります
1つめ:100MB→30MB→10MB
2つめ:50MB(時間がかかった)→40MB
実際はスクリプト内でpsコマンドで多重度は監視しており
whileでループしながらダウンロードしているため
そのあたりの調整は楽にやれます
163:名無しさん@お腹いっぱい。
15/11/12 15:28:52.53 .net
例えば他のファイル全部の合計より大きなファイルが一つある場合、
この大きなファイルのダウンロードを最初からスタートさせれば
全体ダウンロード時間はこのファイルのダウンロード時間になるけど、
この大きなファイルのダウンロード開始を遅らせると
全体ダウンロード時間もそれだけ長くなることになるってことだよね
164:名無しさん@お腹いっぱい。
15/11/12 15:31:56.60 .net
>>158
そのとおりです
(大きなファイルはクリティカルパスになりえるってことです)
165:名無しさん@お腹いっぱい。
15/11/12 16:43:29.68 .net
>>155
> ただこの方法だと初めの方に大きいファイルばかりダウンロードするため
> 成果が上がってるように見えません
この場合の成果とはより短い時間で完了することであるわけだが
大きいファイルを先に転送すると短い時間で済む筈だったが実際には逆で
より長い時間掛かってしまうから何とかしたい、ということですか?
166:名無しさん@お腹いっぱい。
15/11/12 17:51:07.33 .net
俺の予想では、プログレスバー的なのを表示したいけど、
大きいファイルが先だとはじめはなかなか進まないってことじゃないかな。
どんなコマンドでダウンロードしてるか知らないけど、
たいてい転送バイト数を出力できるはずだから、
頑張って出力を解析して計算すればいいかと。
あるいは手元のファイルサイズを監視したほうが早いか。
167:名無しさん@お腹いっぱい。
15/11/12 17:59:30.65 .net
でも質問はより効率のよダウンロード順(を求めるアルゴリズムだぜ
168:名無しさん@お腹いっぱい。
15/11/12 18:33:07.59 .net
max procが10なら、大きいファイルから10個を多重でwgetする。
その時、残りのファイルのダウンロード順はまだ決めない。
その10個のwgetのうち、どれか先に終了したもの(ファイルサイズ最小のもののことが多いがネット環境によりそうとは限らない)
について、その時点で残りのファイルのうちサイズ最大のものを割り当てて
ダウンロードさせる。
以下、残りファイルがなくなるまで繰り返し。
169:名無しさん@お腹いっぱい。
15/11/12 20:25:10.34 .net
厳密な重さのわからないナップサック問題って感じだな。
ダウンロード時間があらかじめ分かっていたとしてもとても難しい問題。
数学苦手なのでテキトーに聞き流してもらえると助かるが、多分 NP hard って呼ばれる問題と
同等で、全通り試さないと厳密解は得られないんじゃね?
現実的には >>163 の言う貪欲法(greedy algorithm)的な?アルゴリズムが一番だろうな。
170:名無しさん@お腹いっぱい。
15/11/12 22:52:33.75 .net
複数のファイルが全部同じサーバーにあるのかとか、別々だとしても
自分側のバンド使い切っていないかとか、もっと条件詰めないと
そもそも議論出来ない気がするけど。
171:名無しさん@お腹いっぱい。
15/11/13 02:37:34.17 .net
多重ダウンロード禁止
172:名無しさん@お腹いっぱい。
15/11/13 02:48:29.59 .net
分割ダウンロード禁止
173:名無しさん@お腹いっぱい。
15/11/13 12:04:00.88 .net
エロ画像ダウンロード禁止
174:名無しさん@お腹いっぱい。
15/11/13 12:06:28.52 .net
\(^o^)/
175:名無しさん@お腹いっぱい。
15/11/13 23:16:03.31 .net
むしろ、トラフィックを監視して、一定以下になったらwget開始するスクリプトじゃ駄目なの?
176:名無しさん@お腹いっぱい。
15/11/14 00:11:59.24 .net
回線異常で止まった時にさらに追い討ちかけるのか
177:名無しさん@お腹いっぱい。
15/11/14 00:39:23.96 .net
ん、ヒントにならなかったか
ファイルを分割してダウンロードすればいい
178:名無しさん@お腹いっぱい。
15/11/15 12:35:05.13 .net
>>171
異常だったらtcp二階建てとかしてない限りロストしてるんだから
どんどん長くなるタイムアウトをボケっと待ってたって仕方がないじゃん
むしろ定期的に試行するようにしたほうが復旧を即感知できるんじゃないか?
179:名無しさん@お腹いっぱい。
15/11/19 07:18:13.65 .net
ルート所有のテキストファイルに、テキストを追加するために以下のコマンドを
実行するのですが、許可がないとはねられます。パスワードを入力しろ、も出て
きません。
実行者はもちろん、visudoでUSER ALL=(ALL) ALLの権限を与えられています。
$sudo echo "abc" >> /path/a.txt
bash: /path/a.txt: 許可がありません
何が問題なのでしょうか?
180:名無しさん@お腹いっぱい。
15/11/19 07:28:16.93 .net
sudo コマンドが >>/path/a.txt を持って行ってしまうのが問題(だと思う)
sudo sh -c 'echo "abc" >> /path/a.txt'
181:名無しさん@お腹いっぱい。
15/11/19 07:30:35.56 .net
174です。
ぐぐったら答え書いてありました。失礼しました。
最初のechoだけsudoで評価されて、リダイレクトはそうじゃないと。
182:名無しさん@お腹いっぱい。
15/11/19 09:35:05.07 .net
>>175
さんくすです。なるほど。
ググり先を参考に、evalを使いました。
また、引数が複数の場合も含めて、スクリプトにしました。
パイプを使わない分、>>175 さんのほうがスマートですね。
for i in "$@"; do
eval echo $"$i" | sudo tee -a /path/a.txt
done
183:名無しさん@お腹いっぱい。
15/11/19 09:36:39.66 .net
まちがった。
>ググり先を参考に、evalを使いました。
evalじゃなくて、teeだった。すんません
184:名無しさん@お腹いっぱい。
15/11/19 13:15:22.39 .net
ググると、これらはよく見る様になりました
sudo sh -c 'echo "hoge" > "teki tou"'
echo hoge | tee "teki tou" >/dev/null
他の解決方法を考えてみました
# /dev/null 反対
echo hoge | sudo sed -ne w"teki tou"
# tee の様にファイル名を引数で受け取る
echo hoge | sudo sh -c 'cat > "$0"' "teki tou"
# pipe は無しの方向で
sudo sh -c 'echo "hoge" > "$0"' "teki tou"
185:名無しさん@お腹いっぱい。
15/11/19 22:35:50.88 .net
>>179
スレ違い
というかシェルスクリプトにすれば問題ないのに
186:名無しさん@お腹いっぱい。
15/11/20 13:29:04.21 .net
どういう事?
スクリプトで使う要点の一行を書くのは、このスレでなくともよく有る事では?
sudo を使っていてスクリプト向けの行ではないって事かな?
187:名無しさん@お腹いっぱい。
15/11/20 13:42:47.00 .net
>>181
違うよ。
リダイレクトを含めてスクリプトに書いておけば
sudoで(リダイレクトの)問題が起きないという意味。
188:名無しさん@お腹いっぱい。
15/11/20 13:54:47.85 .net
なんでスレ違い?
189:名無しさん@お腹いっぱい。
15/11/20 14:14:40.64 .net
ラベルが低いから。
190:名無しさん@お腹いっぱい。
15/11/20 14:38:57.72 .net
要点を貼るのはいいんだが
スクリプトの意図がよくわからない
191:名無しさん@お腹いっぱい。
15/11/20 19:37:14.93 .net
自演くさっ
192:名無しさん@お腹いっぱい。
15/11/20 22:49:21.30 .net
引数を元に関数の中{と}の中を表示するコマンドありませんか?
test.txt
int main()
{
printf("\n");
}
int hoge()
{
モジモジ
文字文字
}
void pyo()
{
もじもじ
}
--------------
$コマンド test.txt hoge
モジモジ
文字文字
193:名無しさん@お腹いっぱい。
15/11/21 00:03:09.77 .net
無い
194:名無しさん@お腹いっぱい。
15/11/21 00:06:00.44 .net
じゃ、GNU grep で。
#!/bin/sh
grep --null-data -Po "(^|\n).* $2\(.*?\)(.|\n)*?{(.|\n)*?\n\K(.|\n)+?(?=\n?})" "$1"
195:名無しさん@お腹いっぱい。
15/11/21 00:15:34.13 .net
>>187
ありません
というか、何のためにそういうコマンドが必要か書いた方が
的確なアドバイスもらえる可能性高そう
196:名無しさん@お腹いっぱい。
15/11/21 00:18:18.23 .net
>>189
保守性ゼロ、使い回せる可能性ゼロのいい見本だな
197:名無しさん@お腹いっぱい。
15/11/21 00:48:31.94 .net
いいんじゃない、それで
198:名無しさん@お腹いっぱい。
15/11/21 00:52:28.46 .net
>>189
できました、ありがとうございます!
>>190
目的は外部ファイルにある関数を調べたかったのでcatで連結して
一括で調べたかっただけなのです…
199:名無しさん@お腹いっぱい。
15/11/21 01:00:24.01 .net
>>193
え、できたのw ネタのつもりで書いたのにw
まぁ真面目な話、関数内にブロックがあったら途中でちょん切れるので気をつけて。
200:名無しさん@お腹いっぱい。
15/11/21 01:04:07.86 .net
>>193
if文とか無いの?
関数の中に
}
が有れば、そこで切れると思うよ
201:名無しさん@お腹いっぱい。
15/11/21 01:05:28.85 .net
かぶってた
202:名無しさん@お腹いっぱい。
15/11/21 01:12:31.11 .net
きちんとインデントされていて、関数ブロックの終端が必ず
"\n}" である、という条件なら以下で
grep --null-data -Po "(^|\n).* $2\(.*?\)(.|\n)*?{(.|\n)*?\n\K(.|\n)+?(?=\n})" "$1"
203:名無しさん@お腹いっぱい。
15/11/21 01:26:46.64 .net
indent(1) と組み合わせればどうか
204:名無しさん@お腹いっぱい。
15/11/21 02:25:44.08 .net
tag作れよ
205:名無しさん@お腹いっぱい。
15/11/21 17:10:42.13 .net
sedならどうなの?
206:名無しさん@お腹いっぱい。
15/11/21 18:12:48.25 .net
GNU版grep2.5.4で「『条件A』または『条件Bかつ条件C』」という指定をするにはどうすればよいのでしょう
例えば、以下のようなテキストで
111
aaa
222
bbb ~ ccc ~
bbb ~ ddd ~
「aaa」または「bbbかつccc」だけ抜き出して
aaa
bbb ~ ccc ~
を抜き出したいです
grep aaa sample.txt
grep -e bbb -e ccc sample.txt
として、個別の条件で出力できるところまでは分かったのですが、
テキストに出てくる順番も重要なので、何とかうまくできないかと思ってます
それともawkとかを使う必要があるのでしょうか…
207:名無しさん@お腹いっぱい。
15/11/21 18:21:02.93 .net
こんなんでいいんじゃない
grep -E 'aaa|bbb.*ccc|ccc.*bbb' a.txt
208:名無しさん@お腹いっぱい。
15/11/21 18:27:53.77 .net
>>202
できました
「bbb.*ccc」「ccc.*bbb」という書き方が思いつきませんでした
ありがとうございました
209:名無しさん@お腹いっぱい。
15/11/21 18:57:13.66 .net
関数の内部を切り出すような処理は
yacc(よく知らないんだけど)なんかは関係ない?使えないの?
210:名無しさん@お腹いっぱい。
15/11/22 19:30:02.70 .net
ファイルのリネームについてご教授ください
01.mp4
02.mp4
…
25.mp4
という動画ファイルがあります
それとは別のテキストファイル (List.txt) があり、内容は
orange 01「みかん」
orange 02「ぽんず」
…
orange 25「かんきつ」
動画ファイルを、テキストファイルから取得した文字列で
リネームしていきたいですが良い方法を知りたいです
sedやawkでも構いません
よろしくお願いします
環境はMac El Capitanです
211:名無しさん@お腹いっぱい。
15/11/22 20:11:25.81 .net
>>205
for i in {01..25}
do
mv $i.mp4 $(grep $i List.txt).mp4
done
212:名無しさん@お腹いっぱい。
15/11/22 20:56:26.91 .net
>>206
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
というメッセージエラーで上手くいかなかったです
List.txtの空白スペースに対応してなかったようで
orange 01「みかん」→ orange01「みかん」にしておくと
うまくいきました
213:名無しさん@お腹いっぱい。
15/11/22 20:57:02.29 .net
ありがとうございます
214:名無しさん@お腹いっぱい。
15/11/23 10:43:36.03 .net
常にダブルクォートを心がけること
215:名無しさん@お腹いっぱい。
15/11/23 14:52:02.86 .net
>>187>>200
私はsedでこういう使い方なら使用度高いな。
ただCの関数の抜き出しなどはこれだけじゃ全然足りないね。
readf ()
{
sed -n '/[[:space:]]*[int|void][[:space:]]\+'$1'[[:space:]]*(.*)/b filter1; d;
:filter1; n; /[[:space:]]*{/n; :filter2; /[[:space:]]*}/q; p; n; b filter2' $2
}
216:名無しさん@お腹いっぱい。
15/11/23 14:53:07.97 .net
ごめん引数の順序が逆になってる。
217:名無しさん@お腹いっぱい。
15/11/23 15:08:42.76 .net
でもまぁ書換えたりしない場合、大抵の事は前の人が書いてるように
grepの-Pを使うといいと思う。
218:名無しさん@お腹いっぱい。
15/11/23 21:42:42.57 .net
>>206
bashism
このスレ的にだけでなく一般的にも
bash 依存のスクリプトには、#!/bin/bash を付けた方が良いよ
219:名無しさん@お腹いっぱい。
15/11/24 04:40:58.26 .net
こんなのもありかな。以下だと表示するだけ実際にやる時は
echoを外してunset rをしてから行う事。
cat List.txt |while read
do
printf '%02d\n' $(( ++r )) |xargs -i echo mv {}.mp4 ${REPLY}.mp4
done
220:名無しさん@お腹いっぱい。
15/11/24 06:19:42.03 .net
そういう、スペース入りファイル名未対応回答はいいです
221:名無しさん@お腹いっぱい。
15/11/24 07:10:44.29 .net
ごめんねーzshだと大丈夫なんだけどな。
じゃあちょっと分らないな。
222:名無しさん@お腹いっぱい。
15/11/24 07:13:51.39 .net
しかし根本的なお勧めな解答をするならば、fileにはわざわざ音楽名をつけない事だね。
223:名無しさん@お腹いっぱい。
15/11/24 07:15:07.67 .net
zshを使ってないならそんな事なおさらだよ。
224:名無しさん@お腹いっぱい。
15/11/24 08:53:18.61 .net
>>214
xargsが無駄です。
catが無駄です。
r=0
while read
do
: $((r++))
echo mv $(printf %02d $r).mp4
225:名無しさん@お腹いっぱい。
15/11/24 09:27:10.95 .net
ていうか、>>214動く?
226:名無しさん@お腹いっぱい。
15/11/24 10:13:12.69 .net
こっちの台詞だよ。それ動くのかね。
227:名無しさん@お腹いっぱい。
15/11/24 10:16:52.25 .net
まあどうでもいいや。
228:名無しさん@お腹いっぱい。
15/11/24 11:42:10.34 .net
こっちってどっちだ
229:名無しさん@お腹いっぱい。
15/11/25 00:35:58.05 .net
>>205
bash でもいいなら
mapfile -t -O 1 -c 1 -C 'move(){ mv $(printf "%02d.mp4" "$1") "$2.mp4"; };move' < List.txt
230:200ではない
15/11/25 20:05:12.35 .net
>>210
:filter1; n; /[[:space:]]*{/n; の辺りについて
2行目に { が無い場合は、どちらを想定したのかしれないが、興味を引いた
たぶん前者だろうな。すると、古くから実際に使っていそうだね
int main(argc, argv)
int argc;
char *argv[];
{
int main(int argc, char *argv[]) {
231:名無しさん@お腹いっぱい。
15/11/28 10:55:16.58 .net
>>224
callback の中で関数定義してるよ。外でやるか、bash -c '...' にしろよ
mapfile -t -O 1 -c 1 -C 'bash -c '\''echo mv $(printf "%02d.mp4" "$0") "$1.mp4"'\' < List.txt
232:名無しさん@お腹いっぱい。
15/11/29 10:07:15.23 .net
$sed -e '$-3,$d' file
sed: -e expression #1, char 2: 不明なコマンド: `-'
なして?
233:名無しさん@お腹いっぱい。
15/11/29 14:16:20.05 .net
>>227
sedのアドレスで $-3 とか使えませんw
head -n -4 で行けるよ。 ($-3から$までだから終りの4行削除)
234:名無しさん@お腹いっぱい。
15/11/29 18:57:29.27 .net
ここUNIX板だよ
235:名無しさん@お腹いっぱい。
15/11/30 06:01:18.54 .net
>>225 ごめん紹介程度に適当にね。しかしグルーピングの間違いがひどいけどいいや、\|だけか。
やっつけ仕事的な興味だと思うけれどまあ実際やっつけ仕事に使える。
書き留めたものの仕分けとかね。他にもhtml-xml-utilsというsoftwareに
hxpipe,hxunpipeというcommandが入ってるのだけど、その出力の処理にも使える。
はぁそろそろ現実世界に帰るか準備をぽつぽつするので帰ってきません。
236:名無しさん@お腹いっぱい。
15/11/30 09:32:38.39 .net
>>228
じゃ、この人は
URLリンク(qiita.com)
嘘書いてるわけねw
他のサイトでも、同様の記述見た事あるんだけどなー
237:名無しさん@お腹いっぱい。
15/11/30 11:51:54.22 .net
>>231
ネットで嘘が蔓延するのはよくあること。
他サイトは嘘をまるごとコピーして載せてるだけだろw
vi(ex)やedでは $-3 とか使えるので、それと混同してるんだろ。
238:名無しさん@お腹いっぱい。
15/11/30 12:19:42.13 .net
使える実装もあんのかな
239:名無しさん@お腹いっぱい。
15/11/30 13:05:21.61 .net
>>231
同様の記述ってどこ?
240:名無しさん@お腹いっぱい。
15/12/01 02:36:00.46 .net
>231の謝罪マダァ-? (・∀・ )っ/凵⌒☆チンチン
241:名無しさん@お腹いっぱい。
15/12/01 15:02:08.23 .net
>>231
そういうばか、死ねばいいのに。
242:名無しさん@お腹いっぱい。
15/12/01 15:30:51.28 .net
あなたもコメントしてみませんか :)
243:名無しさん@お腹いっぱい。
15/12/01 15:39:36.30 .net
ストリームなんだから、全部パッファしなきゃ実装できない事はちょっと考えれば明らかなのに、
exで使えるからsedも使えるだろうとかセンス悪すぎる。
エンジニアの素質無い。
244:名無しさん@お腹いっぱい。
15/12/01 17:09:19.19 .net
sed で $-3 とか書いてるプログラマorシス管見つけたら社史編纂室に異動させるわ
245:名無しさん@お腹いっぱい。
15/12/01 17:18:23.69 .net
面白そうじゃないか
246:名無しさん@お腹いっぱい。
15/12/01 18:23:49.12 .net
> 全部パッファしなきゃ実装できない
最後に切る行数分だけバッファーすれば良い
247:
248:名無しさん@お腹いっぱい。
15/12/01 21:49:07.76 .net
そんなことしか思いつかないところが壊滅的にセンス悪い
1,$-3s/hoge/hage/
249:名無しさん@お腹いっぱい。
15/12/01 22:53:36.24 .net
なんだまた一人で自演だったか
250:not 238
15/12/02 07:07:15.41 .net
>>242 でも、4行分バッファして4行分処理を遅延すればできるが。
それとは別に、sedではそういう処理には向かないというのは同意。
251:名無しさん@お腹いっぱい。
15/12/02 23:21:03.30 .net
バッファーした後は、N;P;D のループで済むから、比較的単純。結構 sed 向きじゃない?
sed -ne ':Lp; N; 1,4b Lp; P; D'
cutTail()
{
sed -ne '
:LoopToFillBuffer
N
1, '"$1"' b LoopToFillBuffer
P
D
'
}
252:名無しさん@お腹いっぱい。
15/12/04 00:22:12.57 .net
# delete the last 10 lines of a file
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
URLリンク(sed.sourceforge.net)
253:名無しさん@お腹いっぱい。
15/12/04 06:04:34.02 .net
>>246
-e オプションで複数に分ける意味ないだろ。
sed ':a;$d;N;2,10ba;P;D'
または
sed -n ':a;1,10!{P;N;D;};N;ba'
だけで行ける。
254:名無しさん@お腹いっぱい。
15/12/04 06:26:55.09 .net
シェルスクリプトでオブジェクト指向ってできないんですか?
255:名無しさん@お腹いっぱい。
15/12/04 07:53:54.11 .net
>>248
つ 『Unix Shell Objects』
URLリンク(www.amazon.co.jp)
256:名無しさん@お腹いっぱい。
15/12/07 10:28:27.33 .net
httpsでファイル入手するスクリプトで一番汎用的な書き方ってなんだろう?
257:名無しさん@お腹いっぱい。
15/12/07 10:33:45.35 .net
wget
258:名無しさん@お腹いっぱい。
15/12/07 10:48:19.19 .net
curl
259:名無しさん@お腹いっぱい。
15/12/07 11:21:08.52 .net
古い環境だと結局ブラウザ使うのが一番確実だったりするのだろうか?
260:名無しさん@お腹いっぱい。
15/12/07 13:20:40.25 .net
>>253
スクリプトからブラウザ呼ぶの?
261:名無しさん@お腹いっぱい。
15/12/07 16:31:25.34 .net
シェルスクリプトで宅内監視カメラの静止画を1分ごとにDLして保存してるけど、
うちではcurlが鉄板だわ
262:名無しさん@お腹いっぱい。
15/12/07 21:08:34.28 .net
linux - Is wget or similar programs always available on POSIX systems? - Stack Overflow
URLリンク(stackoverflow.com)
まあ、wget curl が普通だろうけど、汎用的って言う事で考えるに telnet を追加
{ sleep 1; printf 'open home.mcom.com 80\n'; sleep 3; printf 'GET /home/welcome.html HTTP/1.0\n\n'; sleep 3; } | telnet -8
263:名無しさん@お腹いっぱい。
15/12/07 21:20:56.81 .net
監視カメラの時間別映像ファイルを上書きで消すのをトリックに使ったミステリがあったなあ
264:名無しさん@お腹いっぱい。
15/12/07 21:27:45.23 .net
httpsってsslかなんかだっけ?
265:名無しさん@お腹いっぱい。
15/12/07 22:42:59.47 .net
当然>>256はそれで終わりじゃないよな?
SSL/TLSのためにもうひと工夫あるんだよな?
ボケ回答のウケ狙いじゃないよな?
266:名無しさん@お腹いっぱい。
15/12/07 23:08:08.80 .net
https telnet で検索
267:名無しさん@お腹いっぱい。
15/12/07 23:43:57.13 .net
流石にSSL部分を前スレ716みたいなコードで置き換えるというのは無茶だろうか?
268:名無しさん@お腹いっぱい。
15/12/07 23:52:00.25 .net
検索したらそういう変態技サイトでもあるのかなと思ったけど見つけられなかったわ
<
269:a href="../test/read.cgi/unix/1439563321/260" target="_blank">>>260に期待する
270:名無しさん@お腹いっぱい。
15/12/07 23:53:10.50 .net
s_clientつーのがある
271:名無しさん@お腹いっぱい。
15/12/08 00:09:05.97 .net
telnetとoepnsslの区別が出来ない人がいるな
272:名無しさん@お腹いっぱい。
15/12/08 00:54:46.22 .net
256のように標準入力からコマンド流しこめる奴って話だろ。アスペ。
273:名無しさん@お腹いっぱい。
15/12/08 07:04:54.30 .net
同様に扱える
{
sleep 1
printf 's_client -connect www.example.com:443\n'
sleep 3
printf 'GET / HTTP/1.1\nHost: www.example.com\n\n'
sleep 3
} | openssl
274:名無しさん@お腹いっぱい。
15/12/08 07:25:22.83 .net
>>250
perlのモジュール使う
275:名無しさん@お腹いっぱい。
15/12/08 10:24:12.12 .net
>>267
それこそ環境選ばないか?
276:名無しさん@お腹いっぱい。
15/12/08 11:28:41.95 .net
perl入ってない環境使う機会なんて
もうほとんどなくなったなぁ
277:名無しさん@お腹いっぱい。
15/12/08 11:50:28.49 .net
perl入ってる環境使う機会なんて
もうほとんどなくなったなぁ
278:名無しさん@お腹いっぱい。
15/12/08 12:05:03.09 .net
初版から標準対応しているものでないと使いにくいよね。
279:名無しさん@お腹いっぱい。
15/12/08 14:20:28.02 .net
入ってなくて、入れていいなら入れるもの
280:名無しさん@お腹いっぱい。
15/12/08 14:29:50.01 .net
入れ替えるのはどこかで不都合があるかわかったもんじゃないからな。
281:名無しさん@お腹いっぱい。
15/12/08 15:13:44.93 .net
本体ロム領域4MBのルーターのtelnet接続で動く技でお願いします。
>>256は動きそうなので合格だけどssl非対応なので不合格。
>>266はopensslコマンドがないので落第です。
もっと頑張ってくださいよ。
282:名無しさん@お腹いっぱい。
15/12/08 16:28:48.50 .net
条件後出し北w
283:名無しさん@お腹いっぱい。
15/12/08 17:44:47.81 .net
そもそも前出ししてないけどな
>>250の条件は一番汎用的ということで完結しているので、それより解きやすい派生のお題だろう。
284:名無しさん@お腹いっぱい。
15/12/08 17:49:54.77 .net
じゃ、その4MBのROMの中身、開示しないとだめだろ。
つーか、なんか白けてきた。。。
285:名無しさん@お腹いっぱい。
15/12/08 17:50:49.65 .net
それは>>274に聞いてくれ
286:名無しさん@お腹いっぱい。
15/12/08 17:55:37.06 .net
>>277
root# busybox
BusyBox v1.22.1 (2014-09-20 22:01:35 CEST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Currently defined functions:
[, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp,
chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd,
devmem, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep,
find, free, fsync, grep, gunzip, gzip, halt, head, hexdump, hostid,
hwclock, id, ifconfig, kill, killall, less, ln, lock, logger, ls,
md5sum, mkdir, mkfifo, mknod, mkswap, mktemp, mount, mv, nc, netmsg,
netstat, nice, nslookup, ntpd, passwd, pgrep, pidof, ping, ping6,
pivot_root, poweroff, printf, ps, pwd, readlink, reboot, reset, rm,
rmdir, route, sed, seq, sh, sleep, sort, start-stop-daemon, strings,
switch_root, sync, sysctl, tail, tar, tee, telnet, telnetd, test, time,
top, touch, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime,
vconfig, vi, wc, wget, which, xargs, yes, zcat
287:名無しさん@お腹いっぱい。
15/12/08 18:25:47.79 .net
wget使えんのか?
288:名無しさん@お腹いっぱい。
15/12/08 18:28:57.45 .net
busyboxでwgetは使えるが、httpsには対応してない。(httpとftpのみ)
289:名無しさん@お腹いっぱい。
15/12/08 19:30:56.44 .net
最近はスクリプトと言えばbusyboxの仕事ばかり。
perl使いは社史編纂室に送られたw
290:名無しさん@お腹いっぱい。
15/12/08 19:31:25.90 .net
条件を増やしても減らしても後出し
元々の条件
httpsでファイル入手するスクリプトで一番汎用的な書き方ってなんだろう?
後出し条件
4MBのルーターのtelnet接続で動く技で
291:名無しさん@お腹いっぱい。
15/12/08 20:02:22.82 .net
>>283
前者は汎用的、後者はカスタムで、条件が正反対だろうが
292:名無しさん@お腹いっぱい。
15/12/08 20:08:32.27 .net
条件は部分集合だろ?
293:名無しさん@お腹いっぱい。
15/12/08 20:11:56.40 .net
いまどきだとtelnetがなくてsshだけだったりするのもあるのだろうか?
294:名無しさん@お腹いっぱい。
15/12/08 20:25:44.06 .net
>>285
違うからブランチだと言ってるんだろう。そもそも別人なので後出しも前田氏もない。
295:名無しさん@お腹いっぱい。
15/12/08 20:52:44.89 .net
へぇ~別人ねぇ~
別人が横から条件変えてるのか
何故に言い切るの?
あほらし。相手して損した
296:名無しさん@お腹いっぱい。
15/12/08 21:01:10.94 .net
>>288
250だけど何か質問ある?
297:名無しさん@お腹いっぱい。
15/12/08 21:16:23.39 .net
grepを破壊的に使うことってできます?
あればおしえてください
他のフィルタ系コマンドでも応用できるものだとよりよいです
298:名無しさん@お腹いっぱい。
15/12/08 21:38:58.20 .net
>>288
リテラシー低いよ
299:名無しさん@お腹いっぱい。
15/12/08 21:44:05.23 .net
>>290
(rm file; grep hoge >file) <file
Cygwinじゃ無理かも
300:名無しさん@お腹いっぱい。
15/12/08 21:47:39.67 .net
あとファイルシステムの容量が不足したら
元ファイルまで失われるという欠陥もある
301:名無しさん@お腹いっぱい。
15/12/08 21:48:19.00 .net
>>288
>>279で条件提示したんだから、この中のコマンドで完結できる案を出しなさいよ
302:名無しさん@お腹いっぱい。
15/12/08 21:49:52.56 .net
>>292
できました(Cygwin64でも
ありがとうございます!
303:名無しさん@お腹いっぱい。
15/12/10 05:48:14.80 .net
初歩的な質問ですみません。
find . -type f -name '*.txt' と
find . -name '*.txt' -type f は、どっち良いとかありますか?
304:名無しさん@お腹いっぱい。
15/12/10 07:16:13.77 .net
>>282
まじかw
ワロタ
305:名無しさん@お腹いっぱい。
15/12/10 07:31:45.64 .net
>>296
どっちでもいいよ
ほとんどプレーンファイルっていう普通の状況なら、
名前を先に判定したほうが計測できないレベルで速いかもしれない
306:名無しさん@お腹いっぱい。
15/12/10 08:02:20.09 .net
wget、通常ならHTTPS (SSL/TLS) Optionsがあって、オプション指定できるが
busybox組み込みのwgetは、軽くするため、httpsオプションなしでコンパイルされ
てるのかな。
307:名無しさん@お腹いっぱい。
15/12/10 08:48:45.97 .net
コンソールから、2chのスレ(たとえばココ)に投稿するような
スクリプト使ってる人いますか?
308:名無しさん@お腹いっぱい。
15/12/10 09:01:58.85 .net
>>296
レギュラーファイル以外のディレクトリとかが1000万個あるなら、名前を比較しないで済む前者の方が良いかもしれない
309:名無しさん@お腹いっぱい。
15/12/10 12:39:47.97 .net
>>299
wgetがhttps対応したのは後出しなんじゃないか?
busyboxが登場した頃のwgetでは標準では無かったと思われ
310:名無しさん@お腹いっぱい。
15/12/10 12:53:18.77 .net
そもそも軽くするのにashなんて必要だろうか?
311:名無しさん@お腹いっぱい。
15/12/10 13:12:18.13 .net
>>303
他の選択肢は?
312:名無しさん@お腹いっぱい。
15/12/10 13:38:24.81 .net
2001年からHTTPSサポートしてるんだぜ
それ以上古い環境なんて考慮する必要ないよ
313:名無しさん@お腹いっぱい。
15/12/10 14:03:30.45 .net
そんな事言ってる奴はbashとopensslの穴に落ちるがいい。
なんと言われようとshが標準
314:名無しさん@お腹いっぱい。
15/12/10 15:56:58.29 .net
>>298>>301
ありがとうございます、実質変わらないんですね。
気にしないことにします。
315:名無しさん@お腹いっぱい。
15/12/11 00:02:46.91 .net
URLリンク(git.busybox.net)
wget: add support for https using "openssl s_client" as a helper Denys Vlasenko 2014-02-22
316:名無しさん@お腹いっぱい。
15/12/11 00:30:35.95 .net
>>296
そういう時は time コマンドを使って CPU 時間計測するというのも手だぞ。
317:名無しさん@お腹いっぱい。
15/12/11 01:31:31.62 .net
ROMが4MBの余ったbuffalo製ルータにopenwrt1505入れてみたわ
root@OpenWrt:/# wget URLリンク(192.168.1.1)
Connecting to 192.168.1.1 (192.168.1.1:443)
wget: can't execute 'openssl': No such file or directory
wget: error getting response: Connection reset by peer
root@OpenWrt:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 448 232 216 52% /
/dev/root 2304 2304 0 100% /rom
tmpfs 14368 524 13844 4% /tmp
/dev/mtdblock5 448 232 216 52% /overlay
overlayfs:/overlay 448 232 216 52% /
tmpfs 512 0 512 0% /dev
初期状態ですでにfilesystemの空き容量216KB こりゃムリゲーだわ
318:名無しさん@お腹いっぱい。
15/12/11 13:13:34.04 .net
>>310
おつかれちゃん。
というわけで、4MB ROMで、httpsの話題は糸冬了とさせていただきます。w
319:名無しさん@お腹いっぱい。
15/12/12 02:38:13.55 .net
>>309
ありがとうございます。
15000個のディレクトリと120000個のファイルが入ったディレクトリで
何度かやってみましたが特に違いはありませんでした。
320:名無しさん@お腹いっぱい。
15/12/12 12:37:42.64 .net
>>310-311
ちょっと待った、216KBあればスクリプト何行書けるよ?
前スレのRSA暗号のスクリプトの10倍程度に膨れたとしても余裕で入らないか?
321:名無しさん@お腹いっぱい。
15/12/12 14:30:14.68 .net
>>313
エラーメッセージ読めないなら黙ってなよ
322:名無しさん@お腹いっぱい。
15/12/12 14:35:22.38 .net
openssl相当をシェルスクリプトで書くっていう
意味だと読み取れないなら黙ってろよ
323:名無しさん@お腹いっぱい。
15/12/12 16:50:31.02 .net
vagrantで仮想サーバー環境を作っていて
provisioning.shというファイルを作りvagrantを立ち上げたときの初期動作を指定しているのですが
sudo yum install postfix -y としたあと
sudo alternatives --config mta
とすると番号を聞かれるのですが、1番のpostfixを選びたい場合どう書けばいいのですか?
sudo yum install -yと書くと途中のyes/noをyにしてくれる、というようなことがしたいのですが
324:名無しさん@お腹いっぱい。
15/12/12 20:01:02.92 .net
>>315
ぷぷぷぷ、RSAの他に最低でも
楕円曲線暗号、メッセージダイジェスト、asn1デコーダ、エンコーダ、pemエンコーダ、デコーダー
作ってから言ってね。
325:名無しさん@お腹いっぱい。
15/12/12 20:44:59.01 .net
楕円曲線暗号、メッセージダイジェスト、asn1デコーダ、エンコーダ、pemエンコーダ、デコーダーが
シェルスクリプトだけで作れない証明は?
326:名無しさん@お腹いっぱい。
15/12/12 21:06:08.70 .net
>>318
作って公開したら全員黙るよ
327:名無しさん@お腹いっぱい。
15/12/13 01:42:09.87 .net
後、共通鍵暗号も要るね
ワクワク
328:名無しさん@お腹いっぱい。
15/12/13 02:03:11.75 .net
なんかガキが出てきて凄そうなキーワード上げてるって感じにしか見えん
329:名無しさん@お腹いっぱい。
15/12/13 02:21:22.86 .net
x509って知ってる?
楕円曲線暗号は必須じゃないけど他は全部必要だよ。
330:名無しさん@お腹いっぱい。
15/12/13 03:26:03.62 .net
っていうか、作り方わかってるなら組めるだろ
自分で作れないものを挙げろよ
331:名無しさん@お腹いっぱい。
15/12/13 07:04:17.98 .net
>>316
man alternatives
man update-alternatives
か何かで調べると --config 以外の非対話的オプションが有るが
それは使えない?
332:名無しさん@お腹いっぱい。
15/12/13 07:30:11.14 .net
>>323
キミが全部作って>>266相当を実証して見せれば、みんな黙るよ
333:名無しさん@お腹いっぱい。
15/12/13 08:06:26.59 .net
他の解決方法でなく
シェルスクリプトで openssl を実現しようと云う発想をする時点で、
しかも条件を提示したんだから解決方法を出せとか
(別の意味で)黙るよね
334:名無しさん@お腹いっぱい。
15/12/13 09:08:35.94 .net
実現不能な提案は妄想って言うんだよ
で、お前は実装できるの?
335:名無しさん@お腹いっぱい。
15/12/13 11:05:38.72 .net
できるよ。無意味だからしないけど。
黙らなくていいよ。グズグズ言い続けて。
336:名無しさん@お腹いっぱい。
15/12/13 11:19:13.11 .net
世界初だから全然無意味じゃない。
337:名無しさん@お腹いっぱい。
15/12/13 13:45:47.64 .net
bashでOSを判別しようと思ってて、シェル変数OSTYPEで判別するのがいいのかなと
思ってるんですが、もっとよい方法ありますか?
あとHP-UX 11iのbashでシェル変数OSTYPEは何になっているか、わかる方はいますか?
338:名無しさん@お腹いっぱい。
15/12/13 13:57:10.41 .net
uname
339:名無しさん@お腹いっぱい。
15/12/18 20:07:27.08 .net
telnet で季節ものを。
telnet ネタコードにネタを重ねています
GNU sleep を使っています
ワンライナー
i=-1; while [ $(( i += 1 )) -le 9 ]; do { sleep 1; printf 'open vt100.net 80\n';\
sleep 3; printf 'GET /animation/xmas'"$i"'.txt HTTP/1.0\n\n'; sleep 3; } | telnet -8\
| while IFS= read -r line; do echo "$line"; sleep 0.08; done; printf \
'Watch More? ( Yes / No ): '; read ans; case "$ans" in n|N|no|NO) i=99;; esac; done
視線が...さ、寒い
良いお年を
そういえばこんなのも
telnet nyancat.dakko.us
340:名無しさん@お腹いっぱい。
15/12/18 20:08:17.92 .net
スクリプト
#!/bin/sh
i=-1
while
[ $(( i += 1 )) -le 9 ]
do
{
sleep 1
printf 'open vt100.net 80\n'
sleep 3
printf 'GET /animation/xmas'"$i"'.txt HTTP/1.0\n\n'
sleep 3
} |
telnet -8 |
while IFS= read -r line
do
echo "$line"
sleep 0.08
done
printf 'Watch More? ( Yes / No ): '
read ans
case "$ans" in
n|N|no|NO) i=99;;
esac
done
341:名無しさん@お腹いっぱい。
15/12/19 01:54:54.83 .net
328が来年のusenixでopenssl相当のシェルスクリプトの実装を発表する
342:名無しさん@お腹いっぱい。
15/12/20 02:31:00.77 .net
それは宣言ですか?絶対当たらなそうな予言ですか?
とりあえずopenssl相当の処理なんて必要かな?
課題的には鯖から落とせればその相手が本物かどうかなんてどうでもいいんじゃない?
と言っても鍵は送る方が指定するみたいから肝心な暗号処理で手抜きは効かなそうだな。
処理自体は計算式で表現できたりする程度のものだけど、数がバカでかいからそのまま丸投げだと無理かも?
343:名無しさん@お腹いっぱい。
15/12/20 16:46:55.74 .net
>>300です。
やっと、コンソールから2chにかきこできるようになりました。
ま、Perl使ってですが。。。
改行ちゃんと入るかな?
344:名無しさん@お腹いっぱい。
15/12/20 18:14:25.11 .net
前スレで質問して、
「UNIXでもメモリクリーニングはできる」と回答をもらった者です。
そこで早速perlを使って、perl -e 'while (1) { fork; }'
を実行してみました。
で、メモリクリーニングはいつ終るのでしょうか?
念のため、PCケースを開けてみましたが、
メモリ表面の汚れは取れていませんでした。
やはりUNIXはメモリクリーニングに対応していないのでしょうか?
345:名無しさん@お腹いっぱい。
15/12/20 19:12:40.94 .net
perl -e "fork while fork" &
346:名無しさん@お腹いっぱい。
15/12/20 21:35:35.99 .net
>>336
cpanのどれ利用した?
それとも使ってない
347:名無しさん@お腹いっぱい。
15/12/20 22:33:07.03 .net
quine
in computing, a program producing its complete source code as its only output without simply opening the source file of the program and printing the contents (such actions are considered cheating).
b=\' c=\\ a='echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a';echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a
348:名無しさん@お腹いっぱい。
15/12/21 16:40:57.79 .net
>>337
表面はきれいに見えても、接続口が汚れてることはよくある。
接続部の汚れはなかなか落ちないから4ヶ月ぐらい待ってみて。
349:名無しさん@お腹いっぱい。
15/12/21 18:49:28.81 .net
quine で fork bomb
b=\' c=\\ a='yes $( echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a ) | sh &';yes $( echo -n b=$c$b c=$c$c a=$b$a$b\;; echo $a ) | sh &
Quine Program
URLリンク(c2.com)
350:名無しさん@お腹いっぱい。
15/12/21 23:00:15.84 .net
勉強でシンプルなものを作成しました
#!/bin/bash
while :
do
usr=`id | cut -d
351:名無しさん@お腹いっぱい。
15/12/21 23:01:19.62 .net
勉強でシンプルなものを作成しました
#!/bin/bash
while :
do
usr=`id | cut -d" " -f 1 | sed -e "s/^.*(\(.*\)).*$/\1/g"`
echo -n -e "\033[s"
D=$((`tput cols` - 8))
tput cup 1 $D
COLOR=`tput setaf 4; tput smso`
NORMAL=`tput sgr0`
echo -n $COLOR$usr$NORMAL
echo -n -e "\033[u"
sleep 1
done
右上にユーザーを表示する単純なものです。
ログインユーザーでログインして実行したあとに、sudoでrootになっても右上にはログインユーザーが表示されたままとなります。
これは実行時のユーザーだからだと思うのですが、sudoでrootになった時にはrootに表示を変更する方法はありますでしょうか?
352:名無しさん@お腹いっぱい。
15/12/21 23:56:53.33 .net
id -un
- or -
whoami
353:名無しさん@お腹いっぱい。
15/12/22 00:13:25.17 .net
現在の tty で sudo を使っている場合、その user name を表示したい
とエスパー解釈した上で
usr=`id | cut -d" " -f 1 | sed -e "s/^.*(\(.*\)).*$/\1/g"`
の下にでもこれを挿入
if str=$( ps T -o user,comm | grep [s]udo )
then
usr=$( echo "$str" | cut -d ' ' -f 1 )
fi
354:344
15/12/22 00:15:04.92 .net
>>345
回答ありがとうございます。
該当部分をid -unやwhoamiに変更しても状況に変化は見られませんでした。
何か間違った書き方をしてしまっているのでしょうか。
355:344
15/12/22 00:22:29.80 .net
>>346
回答いただきありがとうございます。
こちらのほうで実現できました。
psの方から取得するということでしょうか。
whileループの中でidで取得していたので更新されると思っていたのですが
そうでもないようですね。
なぜかは理由はわかりませんが…。
回答いただきありがとうございました。
356:名無しさん@お腹いっぱい。
15/12/22 00:45:28.49 .net
そのスクリプトをバックグラウンドで起動して ps Tf すると分かるかも
10995 pts/0 Ss 0:00 bash
21436 pts/0 S 0:00 \_ /bin/bash ./printUser.sh
8101 pts/0 S 0:00 | \_ sleep 1
8065 pts/0 S 0:00 \_ sudo sleep 10
8066 pts/0 S 0:00 | \_ sleep 10
8102 pts/0 R+ 0:00 \_ ps Tf
対話シェル bash の下でスクリプトが別プロセスで起動されています
sudo sleep 10 を起動していますが、これも別プロセスです
357:名無しさん@お腹いっぱい。
15/12/22 08:00:39.33 .net
PROMPT_COMMAND参照する端末(gnome-terminalやlxterminalなど)だったら
それを使う手もある
以下の内容を適当なファイル(たとえば/etc/bash.display_user)に書いて
D=$((`tput cols` - 8))
POS="`tput cup 1 $D`"
COLOR="`tput setaf 4; tput smso`"
NORMAL="`tput sgr0`"
PROMPT_COMMAND='echo -ne "\033[s$POS${COLOR}${USER}${NORMAL}\033[u"'
/etc/bash.bashrcか自分の.bashrc、rootの.bashrcで
. /etc/bash.display_user
してやればいい
358:348
15/12/23 08:30:02.70 .net
ID変わってますが348です。
その後の回答を、試してみていろいろとわかりました。
Linuxなどにおける動作で幾つか思違いしているところもあり勉強になりました。
ありがとうございました。
359:名無しさん@お腹いっぱい。
15/12/23 23:18:50.99 .net
IDが変わったようには見えないが
360:名無しさん@お腹いっぱい。
15/12/23 23:40:21.98 .net
ていうかIDが見えないが
361:名無しさん@お腹いっぱい。
15/12/24 04:08:04.27 .net
2chMateなら見えるよ
362:名無しさん@お腹いっぱい。
15/12/24 12:24:50.59 .net
本質的でないところでばかり実力を揮発するクラスタの皆さん!
コンニチワ
363:名無しさん@お腹いっぱい。
15/12/24 18:48:12.28 .net
>>353
ワロタw
364:名無しさん@お腹いっぱい。
15/12/24 18:59:35.38 .net
スレ違いすんません。
>>339
>>336です。
LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use HTTP::Cookies;
ggrば出ます。
スレURIの最後の数字列、タイトルから検索して常に最新の数字列を内で取得するようにして、現状、
echo "ほげほげ" | 2ch_put.pl $SURE
で、投稿できるようにしてみた。嵐はしてないよ。
365:名無しさん@お腹いっぱい。
15/12/24 19:23:37.34 .net
>if str=$( ps T -o user,comm | grep [s]udo )
常に0のような気がするが、そうじゃないんだな。
str=aaa や str="" は0だけど、失敗すると1か。
勉強になりますた
366:名無しさん@お腹いっぱい。
15/12/25 00:19:36.63 .net
>>357
thanks
367:名無しさん@お腹いっぱい。
15/12/27 12:03:43.83 .net
=>>290なんですけど>>292の仕組みが理解できてないので誰か解説してくださいませんか?
いつファイルがうまくreadされるタイミングとか
それから関係ないんですけどsedの-iってPOSIX非準拠ですか?
368:名無しさん@お腹いっぱい。
15/12/27 12:23:52.45 .net
-iは引数のあるなしで動かなかったりするな
369:名無しさん@お腹いっぱい。
15/12/27 15:36:01.26 .net
>>360
いつって言ってもgrepがreadした時に読んでるのだが…。
たぶん分かってないのが、unixではファイルをオープンした状態でファイルを削除できるってこと
その場合ディレクトリエントリは消えるがファイル自体は残っているので
ファイルのread/writeは変わらず出来る
370:名無しさん@お腹いっぱい。
15/12/27 19:29:04.42 .net
>>360
外のシェルがopenする
中のシェルでrmがunlinkする
中のシェルがopenしてfileができる
grepがreadしてwriteする
grepがexitしてどっちもcloseする
371:名無しさん@お腹いっぱい。
15/12/27 19:29:18.22 .net
>>362
しかしエントリから消えたハードディスクのブロックは再利用可能な状態なわけですよね?
もしそうなら二回目にオープンしたとき領域が重なってしまうことはないのですか?
372:名無しさん@お腹いっぱい。
15/12/27 19:37:36.75 .net
>>364
closeして誰も参照しなくなるまではi-nodeも含めて再利用されないよ
373:名無しさん@お腹いっぱい。
15/12/27 19:56:03.56 .net
>>365
そうなのですか!初めて知りました
ありがとうございます!すっきりしましたよ!
374:名無しさん@お腹いっぱい。
16/01/01 11:20:57.19 .net
Happy New Year!
wget -O - 'URLリンク(artscene.textfiles.com)'| while IFS= read -r line; do echo "$line"; sleep 0.08; done
wget -O - 'URLリンク(mirror.bagelwood.com)'| while IFS= read -r line; do echo "$line"; sleep 0.08; done
375:名無しさん@お腹いっぱい。
16/01/01 22:44:41.53 .net
a happy new yeah.
>>367
素晴らしい!
376:名無しさん@お腹いっぱい。
16/01/02 22:52:05.39 .net
有難う!ファイルを書いた人は素晴らしいよね
377:名無しさん@お腹いっぱい。
16/01/14 11:46:10.89 .net
質問です
テキストファイルだけのデータベースを作ろうと思ってます
どんなシェルスクリプトを書けばいいと思いますか
皆さんのお知恵をお貸しください
あとシス管系女子に登場するみんとちゃんのスリーサイズが分かりません
知っている人がいたら教えて下さい
よろしくお願いいたします
378:名無しさん@お腹いっぱい。
16/01/14 12:18:20.24 .net
テキストファイルだけのデータベースってどんなん?
379:名無しさん@お腹いっぱい。
16/01/14 12:37:09.51 .net
女だらけの水泳大会みたいなものだろ
380:名無しさん@お腹いっぱい。
16/01/14 13:49:41.31 .net
Berkeley DB使え、とかそういう話?
381:名無しさん@お腹いっぱい。
16/01/14 19:07:54.47 .net
人のボケつぶした上にダダスベリって最悪じゃね?
382:名無しさん@お腹いっぱい。
16/01/14 19:32:14.79 .net
職場の開発環境がLinuxでcshなのですが
cshでいいリファレンスはありませんか?
ネットが使えないのでWebページは無理です。
383:名無しさん@お腹いっぱい。
16/01/14 20:23:34.08 .net
定年間近の老人から口伝で受け継ぎましょう
384:名無しさん@お腹いっぱい。
16/01/14 22:27:43.69 .net
changelogで日記書く人もいるしな
385:名無しさん@お腹いっぱい。
16/01/14 22:57:32.14 .net
昔はC Shellフィールドガイドとかいう本が定番だったような
もう30年近く前のことだけど…
それにしても開発環境がcshでネットが使えないって、ある意味すごいと思うw
386:名無しさん@お腹いっぱい。
16/01/14 23:03:15.63 .net
>>375
ネットがダメなら本しかないじゃないか
いま流通してるのって
URLリンク(www.amazon.co.jp)
くらいかな
387:名無しさん@お腹いっぱい。
16/01/14 23:24:27.93 .net
いまどきc shell使っているところってC言語でも使ってるの?
388:名無しさん@お腹いっぱい。
16/01/14 23:24:38.54 .net
ネットが使えないのにアマゾン?
389:名無しさん@お腹いっぱい。
16/01/15 00:15:28.22 .net
みんとちゃんは天使
390:名無しさん@お腹いっぱい。
16/01/15 11:42:41.05 .net
>>374
もともとのボケからすべってるじゃん
391:名無しさん@お腹いっぱい。
16/01/15 14:57:47.22 .net
ここにいる様な人たちとだけは仕事したくないな~
392:名無しさん@お腹いっぱい。
16/01/15 15:21:01.14 .net
>>375
マスタリングcshは目の前に転がってるが、他にも合った気がするが
みつからない。
393:名無しさん@お腹いっぱい。
16/01/15 15:29:47.22 .net
みんとが、rm -rf で全消ししても許してあげるし、データリカバリの講義を、みっちりやったげる
ここの住人がやったら半殺し
394:名無しさん@お腹いっぱい。
16/01/15 15:51:51.83 .net
データーリカバリーとデリヘルって似てるね
395:名無しさん@お腹いっぱい。
16/01/15 16:08:50.97 .net
ディスカバリーチャンネルとデタリカバリーチャンネルも似てるね。
396:名無しさん@お腹いっぱい。
16/01/15 21:52:13.77 .net
20年少し前だと、もう csh でスクリプトを書かない事を進められた
SunOS でログインシェルは、csh がデフォで tcsh に切り替え
397:名無しさん@お腹いっぱい。
16/01/15 21:54:24.42 .net
☓ 進められた
398:名無しさん@お腹いっぱい。
16/01/15 22:29:29.27 .net
cshがスクリプトに向かないのは有名だね。
でも短いスクリプトなら、配列が使えたりとかshより便利なケースがないでもない
>>375
manは入ってないの?
399:名無しさん@お腹いっぱい。
16/01/17 00:38:52.85 .net
shって配列使えないんだ?
bashは使えるよね、二次元配列も
400:名無しさん@お腹いっぱい。
16/01/17 13:36:42.66 .net
URLリンク(wiki.bash-hackers.org)
こういったポータビリティに関することを一発でチェックするための自動テストスイートってないものかね。
それがあればシェルの比較表もすぐに作れると思うんだが。
401:名無しさん@お腹いっぱい。
16/01/17 15:16:57.76 .net
>>393
>>6 というか checkbashisms
URLリンク(manpages.ubuntu.com)
402:名無しさん@お腹いっぱい。
16/01/21 07:44:44.20 .net
外部コマンドの違いも有るよね
GNU のコマンドは機能拡張しまくっていて、UNIX 哲学が云々
grep -o -p とかダメだろうな(と思って調べると、OpenBSD は -o を持っているのか)
URLリンク(www.openbsd.org)
403:名無しさん@お腹いっぱい。
16/01/21 09:51:46.27 .net
sed -iとかな
404:名無しさん@お腹いっぱい。
16/01/21 21:38:36.72 .net
オプションをある程度統一してほしいよね
-hでヘルプ、-vでバージョン見るくらいは統一してほしい
405:名無しさん@お腹いっぱい。
16/01/22 09:43:42.93 .net
>>397
ほんとになw
406:名無しさん@お腹いっぱい。
16/01/22 1
407:0:23:07.08 .net
408:名無しさん@お腹いっぱい。
16/01/22 21:11:00.15 .net
痛みが大きすぎて統一失敗は無理か
今後も長く使われて行く事を考えると、ある程度統一してほしいなあ
特定の環境変数が定義されている時に限り
統一されたオプションにするとか
409:名無しさん@お腹いっぱい。
16/01/23 00:27:07.84 .net
ロングオプションを使い給え。
410:名無しさん@お腹いっぱい。
16/01/23 16:57:11.77 .net
ロングオプションって、ロング過ぎてなんだかなあ
でも今度から意識してみよっと
ちょっと暇つぶし
list of coreutils (Linux, depends dpkg)
dpkg -L coreutils | sed -ne '\@bin/@s@^.*bin/@@p' | xargs man -f
whatis $( which who )
411:名無しさん@お腹いっぱい。
16/01/23 19:06:44.06 .net
>>397
URLリンク(www.gnu.org)
‘--help’ ヘルプ
‘--version’ バージョン
‘--’ オプションリスト区切り
412:名無しさん@お腹いっぱい。
16/01/23 19:21:27.03 .net
>>403
そういうことじゃないだろ…
413:名無しさん@お腹いっぱい。
16/01/24 00:23:36.03 .net
>>401でもう既出だし
GNU系コマンド以外には通用しないケースある
414:名無しさん@お腹いっぱい。
16/01/28 05:58:34.66 .net
毎回ランダムに、コマンドを紹介
URLリンク(i.stack.imgur.com)
元をちょっといじりました。少し無駄が減ったかな
while ! { IFS=:; ls $PATH; } | shuf -n 1 | xargs 2> /dev/null whatis -ls 1,6,8; \
do :; done |
cowsay -f $( ls /usr/share/cowsay/cows | shuf -n 1 )
元ネタ
Are there any games which can train people to learn terminal commands? - Ask Ubuntu
URLリンク(askubuntu.com)
> cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2>/dev/null | shuf -n 1)
415:名無しさん@お腹いっぱい。
16/01/28 06:13:04.21 .net
shufって何?
416:名無しさん@お腹いっぱい。
16/01/28 08:36:56.70 .net
GNU coreutilsに入ってる、行単位で中身をランダムに入れ替えるコマンド。
BSD系ならsort -Rで代替できるかな。
417:名無しさん@お腹いっぱい。
16/01/28 09:53:14.50 .net
動いてるシェルスクリプトをkillしたいんだけど
以下のコマンドより冴えた方法ある?
pgrep -f 'sh script.sh' | xargs kill
これで不満なのはシェルスクリプトが実行されてなかった場合
USAGEが出ちゃうところくらい
418:名無しさん@お腹いっぱい。
16/01/28 11:04:04.77 .net
pgrepがあるならpkillもあるでしょ
419:名無しさん@お腹いっぱい。
16/01/28 11:35:34.21 .net
pkillだとshを殺してしまうことになって都合が悪いです~
420:名無しさん@お腹いっぱい。
16/01/28 11:50:19.16 .net
pkill -f 'sh script.sh'
421:名無しさん@お腹いっぱい。
16/01/28 16:03:14.05 .net
ありがとう
帰ってから試してみる
422:名無しさん@お腹いっぱい。
16/01/30 08:10:48.00 .net
tputで表示させたいのですが改行されません
#!/bin/sh
while :
do
# Get Time
time=
423:名無しさん@お腹いっぱい。
16/01/30 08:14:07.46 .net
すいませんダブルクォーテーションよりしたが表示されませんでした
time=$(tail -n4 check_date.dat)
COLOR=`tput setaf 5; tput smso`
echo -n -e "\033[s"
tput cup ${TCUP_CNT}
NORMAL=`tput sgr0`
echo -n $COLOR$time$NORMAL
echo -n -e "\033[u"
# Interval
sleep 1
done
check_date.dat
tokyo 23:23:23
Mexco 12:12:12
frans 05:50:05
といったデータとなります。
取得方法はいくつかかえてみましたがダメでした。
tputで改行表示する方法があればアドバイスいただけると助かります。
424:名無しさん@お腹いっぱい。
16/01/30 09:44:44.08 .net
tput についていちいち覚えていないので適当でスマンが
気になる点を上げておいた
echo -n $COLOR$time$NORMAL
だと、エスケープされていないので、$time に含まれる改行文字がスペースに置換される
echo -e は bash だろうから、#!/bin/bash にする
新しく書くスクリプトでは `...` よりも $(...) を使うのが望ましい
ループ中で、変わらない変数を定義しない
(確か sgr0 がリセットかなんかで変わらなかったとして)
425:名無しさん@お腹いっぱい。
16/01/30 09:50:10.42 .net
訂正
> echo -e は bash だろうから、#!/bin/bash にする
#!/bin/sh のままで printf を使う方が良いかな
426:名無しさん@お腹いっぱい。
16/01/30 09:50:11.74 .net
全く案が思いつかないので教えてください。
smb上のNASにあるファイルをSDカードにコピペしたいけど、コピーする順番がファイル名昇順でないと不具合が出るので、エクスプローラーではダメなんです。
cpコマンドにNASにあるファイルを指定する方法を教えてください。
427:名無しさん@お腹いっぱい。
16/01/30 10:03:02.46 .net
ls でソートされなければ、
find sort awk cut xargs 等を組み合わせる
428:名無しさん@お腹いっぱい。
16/01/31 10:50:47.29 .net
質問です。
topコマンドやuptimeコマンドで得られるload average
ですが、特定の顧客向けにWebで情報ながしてるサーバーの
それが、普通で10.00、ひどいときには30.00とかになったり
します。
このload average、つまり平均負荷が無名数ですが、何を表して
いると考えたらよいでしょうか? dBって事はないですよね。。。
429:名無しさん@お腹いっぱい。
16/01/31 11:10:19.25 .net
>>420
待ち行列の長さ
430:名無しさん@お腹いっぱい。
16/01/31 14:36:00.53 .net
>>420
URLリンク(d.hatena.ne.jp)
431:名無しさん@お腹いっぱい。
16/01/31 16:34:32.83 .net
>>421 >>422
ありがとうございます。
>ロードアベレージが1以下であれば正常といわれていたが、
>最近のマルチコアCPUにおいては読み方が変わってきている。
なるほど、、、わかったようなわからんような。。。どう変わってきてる
か、知りたい。。。w
ま、いずれにしても、高負荷状態が続いているとみるべきなんですね。
432:名無しさん@お腹いっぱい。
16/01/31 21:07:22.79 .net
>>423
もう少し読めよ
URLリンク(d.hatena.ne.jp)
433:名無しさん@お腹いっぱい。
16/01/31 21:09:13.08 .net
procps-ng の uptime の説明が分かりやすい
uptime(1) - Linux manual page
URLリンク(man7.org)
434:名無しさん@お腹いっぱい。
16/02/02 07:53:41.39 .net
>>424
さんくすです。
2コアだから、負荷は半分にした値を考えておけばいいのかな。
>注目するのは、待ちタスク数を数え上げるのにすべてのキューを見て
>合計する一方、その後出力するまでに CPU の数でその値を割ったりは
>していない、という点です。...ロードアベレージは割り算をしていない
435:名無しさん@お腹いっぱい。
16/02/02 07:57:31.80 .net
>>425
頑張って読みます。どもです。
436:名無しさん@お腹いっぱい。
16/02/02 09:57:29.33 .net
待ち行列とかキューとかの意味がわからずサーバー管理やってるんならな
OSのしくみをほんの少しでも勉強したほうがいいよ
特にタイムシェアリングとかプロセス管理のあたり
437:名無しさん@お腹いっぱい。
16/02/02 11:43:42.95 .net
>>426
別に割る必要はないと思うけど
どれくらい溜まってるかを知りたいならだけど
438:名無しさん@お腹いっぱい。
16/02/02 17:43:21.96 .net
UNIX上で、”コマンドを利用した”スクリプトを書き始めよう
と思っています。
そこで、pythonかbashのどちらを選ぶかで迷っています。
今日pythonパイソンの有名どころの本をみたら外部コマ
ンドの利用についての記述が少なくてがっかりしました。
素直に以下の本を読むべきなのでしょうか?
それともpythonの勉強し�
439:ト、ネット上で外部コマンドの 利用を紹介したサイトも勉強すべきなのでしょうか? アドバイスお願いします http://www.amazon.co.jp/gp/product/4797321946/ref=ox_sc_act_title_1?ie=UTF8&psc=1&smid=AN1VRQENFRJN5
440:名無しさん@お腹いっぱい。
16/02/02 18:59:58.26 .net
>>430
マルチ
スレリンク(linux板:324番)
441:名無しさん@お腹いっぱい。
16/02/02 20:16:40.85 .net
言語はあくまで道具
何をしたいかによる
442:名無しさん@お腹いっぱい。
16/02/02 21:43:18.36 .net
>>432
レスありがとうございました。マルチってそんなにいけないことなん
ですね。失礼しました。
5年以上ぶりぐらいに2chに戻ってたんで驚いてます。
板にもよるのでしょうが。
こちらだけにすればよかったです。
432さんのおしゃる通りだと思います。自分にとってはコマンド
利用してみたいので、まずはbashにしようかなと思ってます。
443:名無しさん@お腹いっぱい。
16/02/02 22:48:53.08 .net
マルチ禁止は2chだけのルールではなく20年以上前のRFCにさえ書かれている基本中の基本
444:名無しさん@お腹いっぱい。
16/02/02 23:02:32.01 .net
おまえら叩きすぎw
329 名前:324[sage] 投稿日:2016/02/02(火) 21:44:34.24 ID:KBWlYUE4 [2/2]
失礼しました。
ルール知りませんでした。5年以上2chやっていなかったので。
330 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 22:53:07.59 ID:tNcqGKOV
>>329
5年前でもマルチはアカンかったでしょ
331 名前:login:Penguin[] 投稿日:2016/02/02(火) 22:54:56.17 ID:9nG661Lj [2/2]
2chに限らずどこでも嫌われるでしょ
332 名前:login:Penguin[sage] 投稿日:2016/02/02(火) 23:00:54.39 ID:ZV8eeIqB [2/2]
本人はそう思ってないんだろう
死ね
445:名無しさん@お腹いっぱい。
16/02/03 00:07:58.02 .net
たたかれても懲りずに勉強してね
スクリプトを色々と探してきて、長さ順にリストアップする
{ IFS=:; find $PATH; } | xargs readlink -e | xargs file | grep ' script' |
while IFS= read -r line
do echo "$(
echo "$line" | cut -d : -f 1 | xargs wc -l
)$(
echo "$line" | cut -d : -f 2
)"; done |
sort -k1gr,1
446:名無しさん@お腹いっぱい。
16/02/03 06:35:39.85 .net
だいたい、bashとpythonどっちかっていう問題か?ww
どっちも並行してやるべき。
447:名無しさん@お腹いっぱい。
16/02/04 06:50:05.93 .net
『20年動く』本読んだけどひたすら方言に配慮する話書いてあった
もうpythonでいいや
448:名無しさん@お腹いっぱい。
16/02/04 08:44:03.15 .net
>>438
pythonは後付けのなので、そのうちなくなるかもしれません。
Windowsにはそういうものがありました。
449:名無しさん@お腹いっぱい。
16/02/04 08:55:41.67 .net
なくならないにしても、python2のスクリプトのかなりがpython3で動かなくなるよ
450:名無しさん@お腹いっぱい。
16/02/04 09:06:11.16 .net
pythonはなくなってもUNIXは困らない。
451:名無しさん@お腹いっぱい。
16/02/05 01:28:36.41 .net
>>441
vimの拡張にpythonが採用されてることを知らないのか…
452:名無しさん@お腹いっぱい。
16/02/05 02:35:34.81 .net
POSIXにvimもpythonも入って無いしな
453:名無しさん@お腹いっぱい。
16/02/05 02:49:11.38 .net
UNIX開発にふつーにVIM使われてるぞ
454:名無しさん@お腹いっぱい。
16/02/05 04:13:16.68 .net
特定のアプリケーションが使っているから、OSに必要という理屈が分からない。
455:名無しさん@お腹いっぱい。
16/02/06 04:39:26.36 .net
>>438
方言覚えるのとPython覚えるの、労力そんなに違うか?
456:名無しさん@お腹いっぱい。
16/02/06 06:08:30.34 .net
シェルスクリプトはOSの一部だからな。
pythonとは格が違う。
457:名無しさん@お腹いっぱい。
16/02/06 09:18:43.54 .net
#!/usr/bin/shと書いてもbashが走るこんな世の中じゃ
458:名無しさん@お腹いっぱい。
16/02/06 17:24:54.45 .net
#!/usr/bin/shと書いてシェルスクリプトを名乗るのか。
459:名無しさん@お腹いっぱい。
16/02/06 18:52:59.16 .net
>>448
bashがbshのマネをする変なスクリプトたがら推奨しない。
460:名無しさん@お腹いっぱい。
16/02/06 18:54:27.39 .net
>>449
スクリプトの種類を名乗る
461:名無しさん@お腹いっぱい。
16/02/06 19:55:26.03 .net
本物と同じ名前の機能の違うコマンドを検索で優先されるディレクトリに置いちゃってドヤ顔する
バッドノウハウ使いの老害は早く死んで欲しい
462:名無しさん@お腹いっぱい。
16/02/06 20:35:47.85 .net
大丈夫、そんな人はいない
463:名無しさん@お腹いっぱい。
16/02/06 21:23:44.47 .net
/bin じゃなくて /usr/bin なのか?という話だろ
464:名無しさん@お腹いっぱい。
16/02/07 04:25:51.93 .net
>>454
/usr/binと/binは基本的に一緒だが、環境によっては違うんじゃないの?
465:名無しさん@お腹いっぱい。
16/02/07 12:45:47.23 .net
/usrを別パーティションにしてた頃の名残だよね
466:名無しさん@お腹いっぱい。
16/02/07 18:02:30.90 .net
/sbinまでは認めてやっても良い
467:名無しさん@お腹いっぱい。
16/02/07 19:26:38.34 .net
Linuxディストリの一部やSolarisではすべて/usrに移動してる(usr mergeまたはusr moveと呼ぶ)
/binと/sbinはシンボリックリンクで残ってる
468:名無しさん@お腹いっぱい。
16/02/08 08:20:49.74 .net
いっそ、bashをオブジェクト指向に進化させれば、
pythonなぞいらなくなる
469:名無しさん@お腹いっぱい。
16/02/08 10:14:57.97 .net
全角だとバカにしか見えないのは何故だ?
470:名無しさん@お腹いっぱい。
16/02/08 10:31:10.92 .net
>>460
おっさんの可能性もある。
471:名無しさん@お腹いっぱい。
16/02/08 10:49:58.88 .net
新聞社の方でしょう
472:名無しさん@お腹いっぱい。
16/02/08 12:25:26.78 .net
綺麗な見た目に気を遣って作られたプロポーショナルフォントだと全く気にならない
幅が広けりゃいいんでしょ的なやっつけフォントや固定幅フォントを使って表示してると
バランスが悪いのでそうなる
473:名無しさん@お腹いっぱい。
16/02/08 12:34:34.64 .net
>>460
裸の王様だからかな
474:名無しさん@お腹いっぱい。
16/02/08 13:02:09.16 .net
shebang 行は、種類を名乗るといえば名乗っているけれど、
実際には、実行するコマンドラインを指定するもの
以下、補足
例えばこのスクリプトで試すと
$ cat ~/src/test/script
#!../bin/echo "hoge"
'fuga'
$ pwd
/usr
$ ~/src/test/script 'arg 1' "arg 2"
"hoge" /home/anonymous/src/test/script arg 1 arg 2
上では、結果的に
相対パス/echo "hoge" 引数0 引数1 引数2
が実行された結果が印字されている
普通に #!/bin/sh なスクリプトだと、結果的に実行されるのは次
/bin/sh path/to/スクリプト名 引数1 引数2 ...
475:名無しさん@お腹いっぱい。
16/02/08 13:23:29.92 .net
>>465
shebangが種類を名乗るって何のこと?
そのスクリプトを処理するインタプリタを(引数込みで)指定する
以外の説明みたことないけど
476:名無しさん@お腹いっぱい。
16/02/08 15:38:21.12 .net
>>466
>>449 !/usr/bin/shと書いてシェルスクリプトを名乗るのか。
>>451 スクリプトの種類を名乗る
>>465 shebang 行は、種類を名乗るといえば名乗っているけれど、
477:名無しさん@お腹いっぱい。
16/02/08 17:11:40.36 .net
オプションも渡せるよ。
#!/usr/bin/bash -x
とかね。
478:名無しさん@お腹いっぱい。
16/02/08 20:55:16.08 .net
>>468
それなら俺もお前も大体の奴が知ってる。
479:名無しさん@お腹いっぱい。
16/02/08 23:06:27.57 .net
一個だけしか渡せないのは意外と知られていない
480:名無しさん@お腹いっぱい。
16/02/09 00:18:04.86 .net
変数に含まれる記号で質問です。
curlで、サーバに置いてあるファイルを削除したいのですが、
curl -Q "DELE a.txt" host.sample.com
curl -Q 'DELE a.txt' host.sample.com
これだと動きました。
スクリプトで回したいときなどで変数に格納した場合で、
string="-Q 'DELE a.txt'"
curl ${string} host.sample.com
これだと、-Q以降の「 ”~~~” 」で囲われた引数が伝わらないようで、動きませんでした。
> DELE
< 501 Invalid number of arguments
と返答がありました。
「"」そのものや「'」を変数で伝えるのは、一般的にどのように記述すればよいでしょうか。
記号で検索しても、なかなか情報が出ず、ヒントをお願いできればと思います。
481:名無しさん@お腹いっぱい。
16/02/09 02:34:23.06 .net
>>471
curl "-Q 'DELE a.txt'" host.sample.com
ってことじゃん。
コマンドオブションが引数扱いってわけですね。
482:名無しさん@お腹いっぱい。
16/02/09 06:18:16.59 .net
string="-Q 'DELE a.txt'"
eval curl ${string} host.sample.com
あるいは
set x -Q 'DELE a.txt'
shift
curl "$@" host.sample.com
483:名無しさん@お腹いっぱい。
16/02/09 06:31:19.45 .net
書いている内に、別の解答が...しかも set x; shift の方が良い
とりあえず貼っておく
eval を使う
展開されたくない所は、何も考えずにシングルクォートしておく
$ set -vx #とりあえずデバッグ用に
$ opt471="-Q 'DELE a.txt'"
$ sh -c 'for arg; do echo "$arg"; done' parseArgs ${opt471} #質問時の状態
$ eval 'sh -c '\''for arg; do echo "$arg"; done'\'' parseArgs '${opt471}
set も使う
$ eval set -- ${opt471}
$ sh -c 'for arg; do echo "$arg"; done' parseArgs "$@"
bash の配列を使っても良い
$ opt471=(-Q 'DELE a.txt')
$ bash -c 'for arg; do echo "$arg"; done' parseArgs "${opt471[@]}"
484:名無しさん@お腹いっぱい。
16/02/09 12:13:30.71 .net
とりあえず set -- も POSIX なんだけど
autoconf では set x ...; shift をすすめている
少し訂正
eval の際のクォートが抜けていた。連続した空白等で違いが出る
sh -c だと見難いので、function で書きなおした
$ parseArgs () { i=0; for arg; do echo "arg[$((i+=1))]: $arg"; done; }
$ opt471="-Q 'DELE (spaces) a.txt'"
$ eval parseArgs "${opt471}"
$ eval set -- "${opt471}"
$ parseArgs "$@"
ついでにIFS を使うもの
$ LF='
'
$ opt471='
-Q
DELE a.txt
'
$ IFS=$LF; parseArgs $opt471 'another option' 'more...'
485:名無しさん@お腹いっぱい。
16/02/09 17:36:27.79 .net
>>471です。
>>472-475
たくさんの方法を、ありがとうございます!
のちほど実験してみます。
486:名無しさん@お腹いっぱい。
16/02/09 19:11:23.15 .net
スクリプトの外部からやって来た文字列をエバると危険
487:名無しさん@お腹いっぱい。
16/02/09 20:55:40.83 .net
個人的には、host.sample.comにコマンドを渡す
curl -Q "$*" host.sample.com
を関数かスクリプトにするかなぁ
単独でも使えそうだし
488:名無しさん@お腹いっぱい。
16/02/09 23:45:01.02 .net
ごちゃごちゃ書いてしまったので、まとめてみる
結局の所
変数からクォートを考慮して単語分割するには、eval を使う
配列(もどき)に入れるには set か val=(...) もしくは改行区切り等
eval 無しだと、sed perl ruby 辺りで自力で単語分割
簡単なものなら xargs も使えるか
489:名無しさん@お腹いっぱい。
16/02/11 07:29:09.80 .net
午前1時に
cu -l /dev/ugen0.2 > 160211.log
のコマンドを開始し、
23時間後の午前0時に停止する、というシェルスクリプトを作りたいと思っています。
ログファイルの名前は午前1時の時点の日付が入ります。
ここで質問なのですが、
指定した時刻でコマンド(cu)の起動、停止をするにはどうすれば良いのでしょうか?
OS:FreeBSD10.2-RELEASE
シェル:sh
です。
490:名無しさん@お腹いっぱい。
16/02/11 09:25:45.48 .net
>>480
cronやat
491:名無しさん@お腹いっぱい。
16/02/11 13:08:07.53 .net
>>481
ありがとうございます!!
これで幸せになれます!!
492:480
16/02/12 08:51:56.08 .net
シェルスクリプトでcuのプロセスをkillしようとしたがうまくいかなんだ・・・。
結局、
・起動はcron
・cuからminicomに変更
・minicomのソフト改造
・ログファイルを設定なしで保存するように改造
・時間を見て終了するように改造
・タイムスタンプを設定なしでつけるように改造
で落ち着きそう。
うーんせっかくの有休だが、午前中はFreeBSDになりそうだ。
493:名無しさん@お腹いっぱい。
16/02/12 09:40:24.87 .net
意味がわかんないけど普通にコマンドラインからkillしてもkillできないの?
494:名無しさん@お腹いっぱい。
16/02/12 09:42:07.41 .net
cuはSIGHUPで殺すんじゃ無かったかな
うろ覚えだけど
495:名無しさん@お腹いっぱい。
16/02/12 10:21:20.12 .net
cuを起動/停止するスクリプトを書いて
それをcronから呼び出したらどうかな
起動する時はrun_cu start、停止する時はrun_cu stopみたいな形で
で、起動する時に
cu -l /dev/ugen0.2 > 160211.log &
echo $! > /var/run/lock/run_cu.lock
とやっておいて、停止するときは
kill -HUP $(cat /var/run/lock/run_cu.lock)
みたいにすれば(要するに/etc/init.dにあるデーモンの起動スクリプトみたいな感じ)
496:名無しさん@お腹いっぱい。
16/02/12 11:56:41.13 .net
いまいちよくわからん
スクリプトでプロセスIDが調べられないとかじゃないよね?
あとユーザが違っててrootのプロセスkillしようとしてるとか?
497:名無しさん@お腹いっぱい。
16/02/12 13:36:32.98 .net
cuは送信プロセスと受信プロセスがいるから完全に殺せてないのでは
498:480
16/02/12 20:39:39.88 .net
先ほど完了しました。
minicomの改造と、ログファイルの処理ソフト作るのに丸一日かかった。
1日vi使ってたから2chに書き込むのもj,k,l,hでカーソル移動したくなる。
>>484>>487>>488
うん・・・。できたり、できなかったり。
なんかcu -l /dev/ttyU0 > /unko/tinko/manko/log.txtを実行して、
ps ax | grep cu | grep -v grep
で、2つ出てきたり、出てこなかったり。
で、2つ出る場合には片方をkillしようとするとそんなプロセスないとか言われたり。
なんかもう、良く分からなくて投げ出しました。
>>485
SIGHUP知りませんでした。
minicomのソースの終了処理の中に
SIGHUPなんちゃらと書いてあったので、多分それが正解ですね。
いやぁ、SIGHUPで四苦八苦しました。
>>486
それスマートですね。私が作ったやつよりもw
ただ、まぁ、minicom使ったことでタイムスタンプ入れれたので、良しとします。
499:480
16/02/12 20:42:48.13 .net
ちなみに何を作っていたかというと、温度計測システムです。
Xbeeってやつに温度センサーをつないで、無線で親機のXbeeに飛ばして、
親機からPCにシリアルで温度センサーの値を送信するシステムです。
で、ログファイルをsambaにおいておいて、別のPCから見る感じです。
テスト用に温度センサーは1個ですが、部屋中に設置する予定です。
500:名無しさん@お腹いっぱい。
16/02/13 00:30:17.31 .net
viを使っている人はシェルのキーバインドもvi風?
501:名無しさん@お腹いっぱい。
16/02/13 02:17:17.74 .net
>>489
pkillでできなかったの?
502:名無しさん@お腹いっぱい。
16/02/13 02:27:10.99 .net
ちなみに自分は絶対止めたいときは複数回killする
やり方はループするなりsleepで間隔あけたりまちまちだけど
以下cuのマニュアルだけど仕様を理解するって大事だね
> リ モートシステムとの間でコネクションが設定された場合、 cu
> は 2 プロセスを fork します。1 プロセスは、ポートからの デ
> ー タ読みだしと端末へのデータ書き込みを行ない、もう 1 プロ
> セスは、端末からのデータ読み出しとポートへのデータ書き込み
> を受け持ちます。
503:名無しさん@お腹いっぱい。
16/02/13 21:20:59.35 .net
bashで調べてもわからないので質問させてください。
次のような記述のとき、
この%はどのように解釈したらいいのでしょうか?
OLDPATH=(../help/me)
NEWPATH = $(OLDPATH:../%=./%_fuga)
文字列置換に使う場合と違うようですし、
調べても文字列置換以外に定義がでてきませんでした。
よろしくお願いします。
504:名無しさん@お腹いっぱい。
16/02/13 22:07:33.70 .net
>>494
[user@f23 ~]$ OLDPATH=(../help/me)
[user@f23 ~]$ NEWPATH = $(OLDPATH:../%=./%_fuga)
bash: OLDPATH:../%=./%_fuga: そのようなファイルやディレクトリはありません
bash: NEWPATH: コマンドが見つかりませんでした...
505:名無しさん@お腹いっぱい。
16/02/13 22:26:10.26 .net
URLリンク(linuxjm.osdn.jp)
より
${parameter%word}
${parameter%%word}
パターンに後方一致した部分を取り除く。 word が展開され、パス名展開の場合と同じようなパターンを作ります。
このパターンが parameter を展開した値の末尾の部分とマッチする場合、展開結果は parameter を展開した値から
最短一致パターン (``%'' の場合) または最長一致パターン (``%%'' の場合) を取り除いたものになります。 parameter
が @ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして
得られます。 parameter が @ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全て
の要素に順番に適用され、 展開結果はリストとして得られます。
$()じゃなくて${}だんべな。
私は良くわかんない。後は詳しい人にまかせた。
506:名無しさん@お腹いっぱい。
16/02/13 22:38:34.46 .net
>>495
なんでOLDPATH=の閉じカッコを半角に、そこだけ改変しちゃったの?
507:名無しさん@お腹いっぱい。
16/02/14 00:07:40.09 .net
>>494
どこでそういう記述を見つけたのかな
508:名無しさん@お腹いっぱい。
16/02/14 04:49:47.49 .net
仕事で改修やってるんだろ
509:名無しさん@お腹いっぱい。
16/02/14 06:05:22.06 .net
どのように解釈したらいいも何も、NEWPATH の次にスペースが有る時点でおかしい
例示を見直して提示し直さない限り、どうにもならんな
510:名無しさん@お腹いっぱい。
16/02/14 08:13:57.65 .net
なんの脈絡もない質問に答える義理はない
金払って仕事してもらえ
511:名無しさん@お腹いっぱい。
16/02/14 09:11:58.95 .net
OLDPATH:../%=./%_fuga
という相対パスで指定されたファイルを実行し、その結果の前に=をおいてNEWPATHというコマンドを実行する
512:名無しさん@お腹いっぱい。
16/02/14 14:58:59.31 .net
>>494
Makefile 全体とは言わんがもっと前後貼れよ
513:名無しさん@お腹いっぱい。
16/02/15 05:51:37.58 .net
>>494 >>503
ここを釣り堀にする奴がいるとは思わなかったwww
そういえば Makefile を書いている時は似てるなあって思ったな
514:503
16/02/17 23:08:47.15 .net
>>494 は結局返事なしか。
釣りだったってことかな。 イコールの前後に空白いれたり入れなかったりだったし。
一応 make/Makefile での動作例。
$ cat Makefile
OLDPATH = ( ../datadir1 ../datadir2 )
NEWPATH = $(OLDPATH:../%=../%_fuga)
all:
@echo "$(NEWPATH)"
$ make
( ../datadir1_fuga ../datadir2_fuga )
%の使い方は
URLリンク(quruli.ivory.ne.jp)
の 6.3.1節を参照しました。
515:名無しさん@お腹いっぱい。
16/02/23 08:45:41.83 .net
BASH4.2 $> echo $((1 == 2))
0 #!!!
BASH4.2 $> echo $((1 != 2))
1 #!!!
BASH4.2 $> a=0
BASH4.2 $> echo $a
0
BASH4.2 $> echo $((a++))
0 #?
BASH4.2 $> echo $((a++))
1
BASH4.2 $> echo $((a++))
2
BASH4.2 $> echo $((a++))
3
BASH4.2 $> echo $((a--))
4 #!!!!
BASH4.2 $> echo $((a--))
3
516:名無しさん@お腹いっぱい。
16/02/23 10:11:09.22 .net
不思議なことは何も起きていないな
シェルスクリプトの真偽値の表現と後置演算子の意味くらい覚えておけ
517:名無しさん@お腹いっぱい。
16/02/24 08:11:13.70 .net
$a=0; echo $((a++))
0
$ a=0; echo $((++a))
1
518:名無しさん@お腹いっぱい。
16/02/24 16:41:23.49 .net
なんら不思議でない
519:名無しさん@お腹いっぱい。
16/02/25 07:06:49.38 .net
$ a=0; echo $(( ´∀`))
( ´∀`): コマンドが見つかりません
520:名無しさん@お腹いっぱい。
16/02/26 20:53:20.57 .net
かわええ
521:名無しさん@お腹いっぱい。
16/02/26 22:13:00.20 .net
うまくクオーテーション回避したね
522:名無しさん@お腹いっぱい。
16/02/26 22:23:19.78 .net
$ a=0; echo $((a++++++a))
2
523:名無しさん@お腹いっぱい。
16/02/26 22:30:46.28 .net
$ a=0; echo $((a+ +++++a))
1
$ a=0; echo $((a+++++ +a))
1
$ a=0; echo $((a+ ++++ +a))
0
524:名無しさん@お腹いっぱい。
16/02/27 19:01:27.83 .net
こういう解釈かな?
$ bash -c 'a=0; echo $(( ( a++ ) + +( ++a ) ))'
2
シェルによって解釈が色々みたいだけど
$ ksh -c 'a=0; echo $((a++++++a))'
k
525:sh: a++++++a: assignment requires lvalue $ dash -c 'a=0; echo $((a++++++a))' 0
526:名無しさん@お腹いっぱい。
16/02/29 18:15:35.93 .net
ここにいる人たちは誰かのシェルスクリプト見て
普通のプログラミング言語のようにループして処理してたら
ぷっって笑っちゃう方?
527:名無しさん@お腹いっぱい。
16/02/29 18:57:25.92 .net
え? ループ処理しちゃ駄目なの?
528:名無しさん@お腹いっぱい。
16/02/29 19:53:29.46 .net
>>516 が言う「ループ」とは変数のインクリメント((++i))とかのことかと。
529:名無しさん@お腹いっぱい。
16/02/29 20:08:57.21 .net
>>516
コマンドの内部でループしているのと、スクリプトのループとは速度が違うし
また記述も単純になるから、自然とそうなるだけだし
スクリプトで人を笑ったりとかはしないかな