!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
シェルスクリプトに関する総合スレッドです。
スレ立て時は以下の文を先頭行に加えて下さい。
後のつけ忘れ防止の為に複数行重ねて追加推奨
!extend:on:vvvvv:1000:512
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
シェルスクリプト総合 その29
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 3efb-m2E0)
2018/09/22(土) 11:53:21.38ID:BBiLRgnj02デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/22(土) 11:57:44.54ID:rfhCLeCra お約束
・特記なき場合、Bourne ShellもしくはPOSIX準拠のsh可換シェルが既定です
つまりシバンは#! /bin/shです。
他のシェル(bash, zsh, ksh, (d)ash, yash, posh, fish, (t)csh)などの専用機能に依存する場合は明示しましょう。
OS X, GNU/Linuxユーザーは/bin/shの実体がbashなので*特に*注意(自覚なきbashism---シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?)。
ただしDebian, Ubuntuなどでは/bin/shの実体はPOSIX sh互換のdashですのであまり気にしないでも大丈夫です。
FreeBSDユーザーは/bin/shの実体がashなので注意。
Solaris, OpenBSDユーザーは/bin/shの実体がkshなので注意。
csh/tcshでのシェルスクリプトは*まったく推奨しません*。
(参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc)
・POSIXに準拠しましょう
有用なリンクはhttps://en.wikipedia.org/wiki/POSIXにまとめられています。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIXのsh(1)に一番近いのはOpenSolaris由来のHeirloom sh、次点でDebianなどに搭載されているDash shell
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります
Manページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1)ないしはman(1)の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
・特記なき場合、Bourne ShellもしくはPOSIX準拠のsh可換シェルが既定です
つまりシバンは#! /bin/shです。
他のシェル(bash, zsh, ksh, (d)ash, yash, posh, fish, (t)csh)などの専用機能に依存する場合は明示しましょう。
OS X, GNU/Linuxユーザーは/bin/shの実体がbashなので*特に*注意(自覚なきbashism---シバンが#!/bin/shなのにbashに依存する構文を使っていませんか?)。
ただしDebian, Ubuntuなどでは/bin/shの実体はPOSIX sh互換のdashですのであまり気にしないでも大丈夫です。
FreeBSDユーザーは/bin/shの実体がashなので注意。
Solaris, OpenBSDユーザーは/bin/shの実体がkshなので注意。
csh/tcshでのシェルスクリプトは*まったく推奨しません*。
(参考URL: http://www.speech-lab.org/~hiroki/csh-whynot.euc)
・POSIXに準拠しましょう
有用なリンクはhttps://en.wikipedia.org/wiki/POSIXにまとめられています。
最新の仕様はこちらへ: http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」から各コマンドやファイルの仕様を参照することができます)
・Version 7 UNIXのsh(1)に一番近いのはOpenSolaris由来のHeirloom sh、次点でDebianなどに搭載されているDash shell
Heirloom sh: http://heirloom.sourceforge.net/sh.html
Dash shell: http://gondor.apana.org.au/~herbert/dash/
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります
Manページや各種リンク(http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlなど)を見ましょう。
apropos(1)ないしはman(1)の-kオプションでそれらしい単語による簡単な検索もできます。
・ワイルドカードは正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
3デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/22(土) 11:58:06.49ID:rfhCLeCra 初心者へのアドバイス
・適した道具を判断するのも頭の重要な使い方。
シェルスクリプトよりもPerlまたはPythonの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらman(1)を引きましょう。
・思い通りに動かないときは、まずはsh(1)の-xオプションでトレースしましょう。
回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに、「そういうのはPerl, Python使え」と回答するのはやめましょう。
安易にPerlやPythonに逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
・適した道具を判断するのも頭の重要な使い方。
シェルスクリプトよりもPerlまたはPythonの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらman(1)を引きましょう。
・思い通りに動かないときは、まずはsh(1)の-xオプションでトレースしましょう。
回答者への注意事項
・相手がシェルスクリプトでの処理方法を質問しているのにもかかわらず、よく知りもせずに、「そういうのはPerl, Python使え」と回答するのはやめましょう。
安易にPerlやPythonに逃げずに小さなコマンドを組み合わせシェルスクリプトで処理するのが頭のいいやり方。
・質問に対して問題が間違ってるといちゃもんをつけるのも避けましょう。
4デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/22(土) 12:01:23.98ID:rfhCLeCra (補足:今スレのみ)
同名スレッドが乱立していますが、Unix版→ム版移行に伴い荒らしとミスが横行したためであり、実際に使用されるのはこのスレのみです。同名の他スレは利用しないように願います
同名スレッドが乱立していますが、Unix版→ム版移行に伴い荒らしとミスが横行したためであり、実際に使用されるのはこのスレのみです。同名の他スレは利用しないように願います
5デフォルトの名無しさん (ワッチョイ 49d2-Y82R)
2018/09/22(土) 12:08:49.50ID:dRsA3CmI0 【震災を容認、原爆脳】 安部「小型核なら合憲」 ロシア「偽装実験は容易」 読売「原爆で人工地震」
http://rosie.5ch.net/test/read.cgi/liveplus/1537583222/l50
http://rosie.5ch.net/test/read.cgi/liveplus/1537583222/l50
6デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/22(土) 12:15:31.76ID:rfhCLeCra 早速役にたったな
これでワッチョイをNGすればこいつは消える
これでワッチョイをNGすればこいつは消える
7デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/22(土) 17:29:57.71ID:dKJ+Zat70 前のスレでASCII US,RSを区切り文字にしたファイル形式について話してた者だけど
エスケープ文字を\␟,\␞の二つにできないかな。
これで大分処理が楽になるんだけど,この規則で区別できない二種類以上の文字列があれば教えてほしい。
エスケープ文字を\␟,\␞の二つにできないかな。
これで大分処理が楽になるんだけど,この規則で区別できない二種類以上の文字列があれば教えてほしい。
8デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/22(土) 18:51:26.94ID:DxQImHVza 前スレも埋まらないうちから主張はじめんなや
前スレでやれ
前スレでやれ
9デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/22(土) 18:52:48.23ID:n0R7Fe5t0 マジ同意
10デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/22(土) 20:16:11.27ID:dKJ+Zat70 えぇ……
11デフォルトの名無しさん (ワッチョイ c198-coYL)
2018/09/22(土) 20:47:04.94ID:Ig57RuXo012デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/22(土) 20:49:57.60ID:PGp2AKzL0 それだとな
USとRSのasciiデータを含むことができないワケ
やっぱりな低学歴知恵遅れは致命的に頭悪い
USとRSのasciiデータを含むことができないワケ
やっぱりな低学歴知恵遅れは致命的に頭悪い
13デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/22(土) 21:19:04.63ID:SEEeyc/qa14デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/22(土) 21:37:44.00ID:Ma0PioWH0 > ついでに俺はスレ立てた本人だ
1デフォルトの名無しさん (ワッチョイ 3efb-m2E0)2018/09/22(土) 11:53:21.38ID:BBiLRgnj0
13デフォルトの名無しさん (アウアウカー Sae9-m2E0)2018/09/22(土) 21:19:04.63ID:SEEeyc/q
ワッチョイ
アウアウカー
なるほどねw
1デフォルトの名無しさん (ワッチョイ 3efb-m2E0)2018/09/22(土) 11:53:21.38ID:BBiLRgnj0
13デフォルトの名無しさん (アウアウカー Sae9-m2E0)2018/09/22(土) 21:19:04.63ID:SEEeyc/q
ワッチョイ
アウアウカー
なるほどねw
15デフォルトの名無しさん (ワッチョイ 2e81-Lcjh)
2018/09/22(土) 22:01:52.49ID:XHaRNOKU0 何でも喧嘩越しだなんて…
お前ら人生もっと楽に生きろよ
お前ら人生もっと楽に生きろよ
16デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/22(土) 22:04:10.95ID:SEEeyc/qa17デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/22(土) 22:16:05.03ID:n0R7Fe5t0 無敵だなw無敵という表現は正しくはないが
まあ、あんまカッカしないでw
まあ、あんまカッカしないでw
18デフォルトの名無しさん (ワッチョイ 42b3-qdKu)
2018/09/22(土) 22:21:58.24ID:j6So/S370 シュッ シュッ
∧∧ シュッ シュッ
(`・ω・) シュッ シュッ みんな、ここは飲んで気を落ち着かせるんだ!!
(つ と彡 / シュッ
/// /
/c□ /
/旦 /
//c□ ./
/旦 Y /
| | 旦 |
|旦 ガシャーン
ガシャーン
ガシャーン ガシャーン
∧∧ シュッ シュッ
(`・ω・) シュッ シュッ みんな、ここは飲んで気を落ち着かせるんだ!!
(つ と彡 / シュッ
/// /
/c□ /
/旦 /
//c□ ./
/旦 Y /
| | 旦 |
|旦 ガシャーン
ガシャーン
ガシャーン ガシャーン
19デフォルトの名無しさん (ワッチョイ 2e98-rhI1)
2018/09/22(土) 23:18:46.87ID:KDtJrl5K0 ワッチョイもついたようだし、スレ新しくなったので前スレのこれお願い
bashでさ、typesetで関数の中身を出力できるじゃん?
それをevalで評価したら同じ関数が出来上がるじゃん?
これってどれくらい信用できるんだろう?
作成した関数のコードそのままの形で出力されるなら
evalで評価して同じものができるだろうけど、
ぱっとみtypesetで出力するされたものをみると、
改行の位置とか変わって整形された状態になって
関数にはfunctionが頭に追加されてる。
元のコードをどれくらい書き換えるんだろうか?
これ以外になにか変わる事知ってたりする人いない?
bashでさ、typesetで関数の中身を出力できるじゃん?
それをevalで評価したら同じ関数が出来上がるじゃん?
これってどれくらい信用できるんだろう?
作成した関数のコードそのままの形で出力されるなら
evalで評価して同じものができるだろうけど、
ぱっとみtypesetで出力するされたものをみると、
改行の位置とか変わって整形された状態になって
関数にはfunctionが頭に追加されてる。
元のコードをどれくらい書き換えるんだろうか?
これ以外になにか変わる事知ってたりする人いない?
20デフォルトの名無しさん (ワッチョイ bd03-qdKu)
2018/09/22(土) 23:40:33.97ID:T1K71jdo021デフォルトの名無しさん (ワッチョイ 6ee9-1Zjn)
2018/09/23(日) 00:19:41.09ID:gqT47rCG0 ワッチョイでスレを立てたのは前スレを荒らしに荒らしまくった多数回線で自演するRubyアンチのPyキチだよ
自分だけが自演できるワッチョイスレを立てて工作したいんだと思う
次世代スレもワッチョイで立てようとしたけどあっちは失敗したみたいだし
自分だけが自演できるワッチョイスレを立てて工作したいんだと思う
次世代スレもワッチョイで立てようとしたけどあっちは失敗したみたいだし
22デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 00:21:35.03ID:IvXdDnc90 前スレの終わらせ具合からそう見えないこともないなww
23デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/23(日) 00:25:42.58ID:wRiEEsWva スレ立てたのも前スレ終わらせたのも俺だがそれのこと言ってんのか?
rubyもpythonも語ったことなんてないが妄想すごいですね
rubyもpythonも語ったことなんてないが妄想すごいですね
24デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 00:40:41.02ID:IvXdDnc90 うん、妄想は尽きないw
ちょっと終わらせ方が強引だったからねえ、ヤツならやりそうだなと。反省してっwまた、すぐ怒ったり(?)しないでね
ちょっと終わらせ方が強引だったからねえ、ヤツならやりそうだなと。反省してっwまた、すぐ怒ったり(?)しないでね
25デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 00:51:46.20ID:IvXdDnc90 発端となった>>7が全然続かないのな。もう続けてもええんやで
じゃなきゃ、前スレでやれでしかなかった、および、無理やり終わらせた意味がゼロだなw
じゃなきゃ、前スレでやれでしかなかった、および、無理やり終わらせた意味がゼロだなw
26デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 00:53:01.00ID:cRG95Xcq0 低学歴知恵遅れの戯言にだれも興味なんかない
まずその自覚がない
まずその自覚がない
27デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 00:54:17.26ID:cRG95Xcq0 まず相当頭悪いこと書いてる自覚がない
そこが問題だからな
そこが問題だからな
28デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 00:56:29.70ID:IvXdDnc90 ワンパターンのフレーズを繰り返すしかできないのあったが、悔しくてそれでもしてしまう自称賢いはんかくであった
としか見えないなw
としか見えないなw
29デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 00:57:32.98ID:cRG95Xcq030デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 00:58:37.38ID:cRG95Xcq0 頭悪いことを自覚できないかぎり
頭悪いのは治らない
コレは真理だからな
頭悪いのは治らない
コレは真理だからな
31デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/23(日) 01:02:12.95ID:wRiEEsWva なんでワッチョイつけた後になっても半角に構ってるんですかねぇ
とっととNGしてどうぞ
とっととNGしてどうぞ
32デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 01:04:05.84ID:IvXdDnc9033デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 01:04:07.40ID:cRG95Xcq0 まず勘違いしてるのは
オレが賢いとかいってるところ
オレが賢いのではなく
当事者が日常生活に支障をきたすであろうと考えられるぐらい頭悪いこと問題だからな
そういう問題だ
軽度の知的障害があると推認できる
オレが賢いとかいってるところ
オレが賢いのではなく
当事者が日常生活に支障をきたすであろうと考えられるぐらい頭悪いこと問題だからな
そういう問題だ
軽度の知的障害があると推認できる
34デフォルトの名無しさん (ワッチョイ 0676-p1FO)
2018/09/23(日) 01:05:09.76ID:IvXdDnc90 よく言うよ。不特定に向けてもそういうフレーズ使ってるくせに。ほんと自称賢いだな
35デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/23(日) 01:34:23.77ID:D4/zD5nR0 淫夢語録を使うな
36デフォルトの名無しさん (ワッチョイ 6ee9-4aAB)
2018/09/23(日) 02:37:03.28ID:Te/My51X0 別人なんですアピール終わった?
ほんとうざいわコイツ
ほんとうざいわコイツ
37デフォルトの名無しさん (ワッチョイ b181-Lcjh)
2018/09/23(日) 08:59:25.73ID:a7uxw1Gj0 前スレのPOSIX荒らしの頃から、雰囲気悪いなぁ
38デフォルトの名無しさん (ワッチョイ 618a-LQBg)
2018/09/23(日) 09:03:53.53ID:4WDm+Clw0 そんなに悔しかったんだ...
39デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/23(日) 12:00:26.57ID:MAME2I+ya 大学生が課題貼り始めたあたりから何かがおかしくなっていったな
極めつけはCSVだったが
極めつけはCSVだったが
40デフォルトの名無しさん (ワッチョイ bd03-qdKu)
2018/09/23(日) 12:30:25.47ID:0vXeudiz0 >>39
おまえが出入りしだしたあたりからだいぶおかしいでwおまえのせいとは言わんけどw
おまえが出入りしだしたあたりからだいぶおかしいでwおまえのせいとは言わんけどw
41デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/23(日) 12:51:24.23ID:MAME2I+ya42デフォルトの名無しさん (ワッチョイ 6da7-p1FO)
2018/09/23(日) 13:51:05.35ID:VGMMYKH/0 なんでそうすぐにムキになるんだか。>>39なんて俯瞰してもの言えないんじゃねと
43デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/23(日) 15:46:02.02ID:D4/zD5nR0 でもASCII区切り文字を使ったいいアイデアが出たので俺は嬉しいよ
44デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 18:04:09.53ID:cRG95Xcq0 エクセルの出力結果みればわかるとおり
もともとなにも問題ない
低学歴知恵遅れがその出力より劣化したアイデア()を
ドヤ顔してだしてるだけだからな
それはな世間一般ではアイデアとはいわない
それは頭悪い寝言という
わかった?
もともとなにも問題ない
低学歴知恵遅れがその出力より劣化したアイデア()を
ドヤ顔してだしてるだけだからな
それはな世間一般ではアイデアとはいわない
それは頭悪い寝言という
わかった?
45デフォルトの名無しさん (ワッチョイ 42b3-Y16u)
2018/09/23(日) 20:05:39.90ID:i9SY9vW90 とお前は言う
46デフォルトの名無しさん (ワッチョイ bd03-qdKu)
2018/09/23(日) 21:39:22.13ID:0vXeudiz0 >>41
ムキになっとるのは何か自覚でもあったんか?w
ムキになっとるのは何か自覚でもあったんか?w
47デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/24(月) 07:30:26.77ID:csv6kfNU0 CSV、CSVうるせーんだよ、このCSV野郎が!
48デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/25(火) 00:49:55.83ID:lmrEE7TE0 Shell Scriptって国際化はできないの?
調べるとBashは$"text"→$"文"みたいなことができたらしいけどこれも今では使えないし(Bash 3.xで削除?)。
需要がないのかな やっぱり
調べるとBashは$"text"→$"文"みたいなことができたらしいけどこれも今では使えないし(Bash 3.xで削除?)。
需要がないのかな やっぱり
49デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 01:56:25.59ID:BMMTvniR0 >>48
できるよ。gettext.shってのが用意されてる。
ライブラリになっていて、おそらくパスも通ってるはずだから
. gettext.shで読み込めるはず。
そしてeval_gettext関数を使って翻訳するわけだが、
http://www.nofuture.tv/diary/20130329.html の記事を見ると
> echo "$(eval_gettext "hello world")"
と書いてあるな?
eval_gettext "hello world"
だけじゃだめなんだろうか?
一般的には等価だし、これだけでもメッセージの抜き出しはできるはず
なにより"$(・・・)"を使うとforkが行われるから
WSLで遅くなることが懸念される
そのうち使うことになるとは思ってるが、まだ試してないのでよろしくw
できるよ。gettext.shってのが用意されてる。
ライブラリになっていて、おそらくパスも通ってるはずだから
. gettext.shで読み込めるはず。
そしてeval_gettext関数を使って翻訳するわけだが、
http://www.nofuture.tv/diary/20130329.html の記事を見ると
> echo "$(eval_gettext "hello world")"
と書いてあるな?
eval_gettext "hello world"
だけじゃだめなんだろうか?
一般的には等価だし、これだけでもメッセージの抜き出しはできるはず
なにより"$(・・・)"を使うとforkが行われるから
WSLで遅くなることが懸念される
そのうち使うことになるとは思ってるが、まだ試してないのでよろしくw
50デフォルトの名無しさん (ワッチョイ 469f-coYL)
2018/09/25(火) 02:52:25.49ID:VjhU4mZC0 >>48
え?これできないの?
http://www.unixuser.org/~ysjj/bash_script_i18n.html
しかし Linux の bash の man ページには $"string" あるなあ。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
え?これできないの?
http://www.unixuser.org/~ysjj/bash_script_i18n.html
しかし Linux の bash の man ページには $"string" あるなあ。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html
51デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 05:08:08.34ID:BMMTvniR0 だからセキュリティの理由により非推奨になったって書いてあるやん
一つ上のレスぐらい読もうよ
一つ上のレスぐらい読もうよ
52デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/25(火) 05:09:28.74ID:S/r6pG9La 長いから読んでもらえないんじゃね
53デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/25(火) 05:18:05.28ID:lmrEE7TE0 え,俺?
54デフォルトの名無しさん (アウアウカー Sae9-m2E0)
2018/09/25(火) 05:20:16.93ID:S/r6pG9La なんか俺は勘違いしたかもしれん、
>>52は無視してくれ
>>52は無視してくれ
55デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 07:05:22.02ID:BMMTvniR056デフォルトの名無しさん (ワッチョイ 469f-3QZN)
2018/09/25(火) 08:29:51.94ID:VjhU4mZC0 >>51
今見た。元々リロード忘れて一つ上が見えない状態で書いてたのと、見えた後でリンク先見てなかったのでセキュリティの都合で非推奨になった事に気づかなかった。
でも非推奨ってことは使えないこともないのかな?だからmanページには残ってるとか?使わん方が良いことには変わりはないだろうが。
今見た。元々リロード忘れて一つ上が見えない状態で書いてたのと、見えた後でリンク先見てなかったのでセキュリティの都合で非推奨になった事に気づかなかった。
でも非推奨ってことは使えないこともないのかな?だからmanページには残ってるとか?使わん方が良いことには変わりはないだろうが。
57デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/25(火) 09:03:56.75ID:BMMTvniR0 > この方法はセキュリティ上の問題(シフトJISや中国語のエンコーディングではダブルクォーテーションを無効にできてしまうなど。
というような、ASCIIと互換性がない文字コードによる問題だから
そういう文字コード自体を非推奨として対応から外せたら良いのに
Unicode以外の文字コードが絶滅するのはいつになるんだろうな
というような、ASCIIと互換性がない文字コードによる問題だから
そういう文字コード自体を非推奨として対応から外せたら良いのに
Unicode以外の文字コードが絶滅するのはいつになるんだろうな
58デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/25(火) 22:39:41.88ID:lmrEE7TE0 shebangって書かないほうがいいのかもな。
> If the first line of a file of shell commands starts with the characters "#!",
> the results are unspecified
---http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
だそうだし
> One common historical implementation is that
> the execl(), execv(), execle(), and execve() functions
> return an [ENOEXEC] error for any file not recognizable as executable, including a shell script.
> When the execlp() and execvp() functions encounter such a file,
> they assume the file to be a shell script
> and invoke a known command interpreter to interpret such files.
> This is now required by POSIX.1-2017.
---http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html#tag_16_111_08
だし。
> If the first line of a file of shell commands starts with the characters "#!",
> the results are unspecified
---http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
だそうだし
> One common historical implementation is that
> the execl(), execv(), execle(), and execve() functions
> return an [ENOEXEC] error for any file not recognizable as executable, including a shell script.
> When the execlp() and execvp() functions encounter such a file,
> they assume the file to be a shell script
> and invoke a known command interpreter to interpret such files.
> This is now required by POSIX.1-2017.
---http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html#tag_16_111_08
だし。
59デフォルトの名無しさん (ブーイモ MM62-e5An)
2018/09/26(水) 00:23:55.64ID:+a+RcOTAM それは誤読だろ。
execveとかにシェルスクリプト渡したらどうなるか知らん、
execlpとか使えってことでしょ。
実装としてどっちで#!を解釈するかはOSに任せられている。
execveとかにシェルスクリプト渡したらどうなるか知らん、
execlpとか使えってことでしょ。
実装としてどっちで#!を解釈するかはOSに任せられている。
60デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 01:08:43.37ID:yzZF1GUc0 shebangって書かないほうがいいんじゃないかって話は
どこかの誰かがまとめてただろ
書かなくて良いんじゃないかと思うが
書かないとshellcheckが警告出すんだよな。
パラメータじゃない方法でシェルを指定する方法があれば良いんだが
どこかの誰かがまとめてただろ
書かなくて良いんじゃないかと思うが
書かないとshellcheckが警告出すんだよな。
パラメータじゃない方法でシェルを指定する方法があれば良いんだが
61デフォルトの名無しさん (ワッチョイ 5dc3-zlPI)
2018/09/26(水) 06:41:40.90ID:aDQj+U85062デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 07:00:32.41ID:p8TYnMT5063デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 07:43:20.75ID:yzZF1GUc0 ったく、そっちじゃねーよ
https://togetter.com/li/1077808
簡単にまとめるとだな。Androidでは sh は /bin/sh に存在しない
/system/bin/sh だから、どちらでも通じるシバンは書けない
なら書かなくて良いのでは?
→ そのとおり。POSIXではシバンがなければshで起動されると明記されてる
(注意 ログインシェルとしてcshを使用してる場合、先頭一文字目が#
つまりコメント行だったらcshで起動されるので:コマンドなどで無効化する
cshはファイルの先頭が#でなければPOSIX shで起動する)
https://togetter.com/li/1077808
簡単にまとめるとだな。Androidでは sh は /bin/sh に存在しない
/system/bin/sh だから、どちらでも通じるシバンは書けない
なら書かなくて良いのでは?
→ そのとおり。POSIXではシバンがなければshで起動されると明記されてる
(注意 ログインシェルとしてcshを使用してる場合、先頭一文字目が#
つまりコメント行だったらcshで起動されるので:コマンドなどで無効化する
cshはファイルの先頭が#でなければPOSIX shで起動する)
64デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 08:05:31.15ID:p8TYnMT50 ちなみに
bash$ cat ./sbtest.sh
ps -o comm= $$
bash$ ./sbtest.sh
bash
↑↑ Bashじゃねーか
っていう罠もある。
bash$ cat ./sbtest.sh
ps -o comm= $$
bash$ ./sbtest.sh
bash
↑↑ Bashじゃねーか
っていう罠もある。
65デフォルトの名無しさん (ワッチョイ 46e7-Om/S)
2018/09/26(水) 09:25:36.26ID:pB5sfbMh0 ちょっと質問です。
プログラムが終了していたら再起動し、20秒以上動いていたら強制終了させて再起動したい。
どう書けばいいですか?
プログラムが終了していたら再起動し、20秒以上動いていたら強制終了させて再起動したい。
どう書けばいいですか?
66デフォルトの名無しさん (アウアウカー Sae9-rLjT)
2018/09/26(水) 09:56:06.94ID:QtvShas/a >>65
そうだなあ。Linuxとかならkillでシグナル番号0を送ると指定のプロセスの生死を確認できるのでそれ利用して作るかな。
しかしその場合は動いているプロセスのPIDがわからないとダメだ。これがわからない状態でやらねばならない場合はpsの出力にgrepして探すかな。
そうだなあ。Linuxとかならkillでシグナル番号0を送ると指定のプロセスの生死を確認できるのでそれ利用して作るかな。
しかしその場合は動いているプロセスのPIDがわからないとダメだ。これがわからない状態でやらねばならない場合はpsの出力にgrepして探すかな。
67デフォルトの名無しさん (オッペケ Sr71-/xLO)
2018/09/26(水) 10:01:22.38ID:FJCeOZRMr > プログラムが終了していたら再起動し、
親シェルスクリプト(プログラム)作ってループ起動
例えばcronの5分間隔とかにすると隙間が開く可能性がある
> 20秒以上動いていたら強制終了させて再起動したい。
監視シェルスクリプト(プログラム)作る
起動させた時間はpsコマンドで分かる
今の時刻はdateコマンドで分かる
強制終了はkillコマンドでできる
監視の間隔(チェックを何分おきにやるか)は自分で決める
例えば1分間隔で監視したら最悪60秒以上動く場合がある
waitしないループは結構CPUに負荷をかけるから注意
親シェルスクリプト(プログラム)作ってループ起動
例えばcronの5分間隔とかにすると隙間が開く可能性がある
> 20秒以上動いていたら強制終了させて再起動したい。
監視シェルスクリプト(プログラム)作る
起動させた時間はpsコマンドで分かる
今の時刻はdateコマンドで分かる
強制終了はkillコマンドでできる
監視の間隔(チェックを何分おきにやるか)は自分で決める
例えば1分間隔で監視したら最悪60秒以上動く場合がある
waitしないループは結構CPUに負荷をかけるから注意
68デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 11:15:01.91ID:yzZF1GUc0 こんな感じかねぇ
プログラム名からプロセスIDを取得して変数に入れる
while :; do
psコマンドでプロセスID変数の起動時間取得
if 取得できたら; then
if 20秒以上経過していたら; then
kill プロセスID
fi
else # 取得できなかったら
プログラム起動 &
新たなプロセスIDを変数に入れる
fi
sleep 1
done
プログラム名からプロセスIDを取得して変数に入れる
while :; do
psコマンドでプロセスID変数の起動時間取得
if 取得できたら; then
if 20秒以上経過していたら; then
kill プロセスID
fi
else # 取得できなかったら
プログラム起動 &
新たなプロセスIDを変数に入れる
fi
sleep 1
done
69デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 15:07:59.55ID:yzZF1GUc0 setコマンドで変数一覧が見れる機能の使い道にやっと気づいた
man bashにはこうある
> オプションなしの場合は、シェル変数全ての名前と値の組が表示されます。
> 表示は、現在設定されている変数を設定や再設定をする入力 として
> 再利用できるフォーマットで行われます。
ようは変数のシリアライズとデシリアライズだよなーと思ってた
でもそうだとすると普通は特定の変数のみシリアライズ&デシリアライズしたいわけで
全部だされても困る。指定された変数だけ表示できないのか?
変数の中には改行が含まれることもあるから、絞り込むのも大変だぞ
ちなみになんのために俺がsetを調べていたかと言うと、サブシェルの中から
変数の値を返す方法はないものかと(再度)調べていた。
いわゆるwhile read の中で行数数えても、変数は元に戻る問題な
i=0
cat /etc/hosts | while read line; do
i=$((i+1))
done
echo $i # whileがサブシェルで実行されるからもとに戻る
この解決方法として、echoでevalできる形の文字列を返してサブシェルの外で
evalするやり方。このテクニックは最近俺の中で常識となっていた。
でもな、setでevalできる文字を返せるのはわかる。だが欲しいのは変数 i だけなんだよ!
set使えねーなって思ってた。
頭が硬かった。setで表示されたものすべてをevalすりゃいいんや。
サブシェルの中の変数は、サブシェルの外を引き継いてるんだから変えない限り同じ。
evalしても変わらない。いちいち必要なものだけechoする必要なかったんや
man bashにはこうある
> オプションなしの場合は、シェル変数全ての名前と値の組が表示されます。
> 表示は、現在設定されている変数を設定や再設定をする入力 として
> 再利用できるフォーマットで行われます。
ようは変数のシリアライズとデシリアライズだよなーと思ってた
でもそうだとすると普通は特定の変数のみシリアライズ&デシリアライズしたいわけで
全部だされても困る。指定された変数だけ表示できないのか?
変数の中には改行が含まれることもあるから、絞り込むのも大変だぞ
ちなみになんのために俺がsetを調べていたかと言うと、サブシェルの中から
変数の値を返す方法はないものかと(再度)調べていた。
いわゆるwhile read の中で行数数えても、変数は元に戻る問題な
i=0
cat /etc/hosts | while read line; do
i=$((i+1))
done
echo $i # whileがサブシェルで実行されるからもとに戻る
この解決方法として、echoでevalできる形の文字列を返してサブシェルの外で
evalするやり方。このテクニックは最近俺の中で常識となっていた。
でもな、setでevalできる文字を返せるのはわかる。だが欲しいのは変数 i だけなんだよ!
set使えねーなって思ってた。
頭が硬かった。setで表示されたものすべてをevalすりゃいいんや。
サブシェルの中の変数は、サブシェルの外を引き継いてるんだから変えない限り同じ。
evalしても変わらない。いちいち必要なものだけechoする必要なかったんや
70デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 15:10:23.80ID:yzZF1GUc0 長文乙w つーわけで、サブシェルの中から変数を返す方法 汎用版
i=0
eval "$(cat /etc/hosts | { while read line; do
i=$((i+1))
done
set
})"
echo $i # 俺の環境では11だった
set呼ぶだけで、簡単に変数返せるぞ
i=0
eval "$(cat /etc/hosts | { while read line; do
i=$((i+1))
done
set
})"
echo $i # 俺の環境では11だった
set呼ぶだけで、簡単に変数返せるぞ
71デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/26(水) 15:11:28.48ID:yzZF1GUc0 ちなみにbashとかだとデフォルトでは関数まで返しちゃうので注意な
72デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 22:48:58.32ID:p8TYnMT50 シェルスクリプトじゃないんだけど
Makefileのファイル名(例えばGNUMakefileだったりmakefileだったりするよね)
を取得したりってできる?
つまり
$ cat ./Makefile
all:
>---echo $0
$ make
Makefile
みたいな。もちろんMakefileはshが解釈しないんで, $0を使うことはできないけど。
Makefileのファイル名(例えばGNUMakefileだったりmakefileだったりするよね)
を取得したりってできる?
つまり
$ cat ./Makefile
all:
>---echo $0
$ make
Makefile
みたいな。もちろんMakefileはshが解釈しないんで, $0を使うことはできないけど。
73デフォルトの名無しさん (ワッチョイ c964-vX2D)
2018/09/26(水) 23:44:41.88ID:p8TYnMT50 追記
GNU makeなら$(MAKEFILE_LIST)が使えるらしいがFreeBSDでも使いたいんだよね……
GNU makeなら$(MAKEFILE_LIST)が使えるらしいがFreeBSDでも使いたいんだよね……
74デフォルトの名無しさん (ワッチョイ 77a7-c77k)
2018/09/27(木) 00:12:48.73ID:indBRC1Z0 MAKEFILE_LIST
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+6.2-RELEASE&format=html
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+6.2-RELEASE&format=html
75デフォルトの名無しさん (ワッチョイ 9fb3-zW/9)
2018/09/27(木) 00:23:32.14ID:IUmy3t5S0 all:
@echo $(lastword $(MAKEFILE_LIST))
とか。
@echo $(lastword $(MAKEFILE_LIST))
とか。
76デフォルトの名無しさん (ワッチョイ 9fb3-zW/9)
2018/09/27(木) 00:24:08.12ID:IUmy3t5S0 おっと、TAB が使えないんだったな
77デフォルトの名無しさん (ワッチョイ 77a7-c77k)
2018/09/27(木) 00:36:01.18ID:indBRC1Z0 ああ、>>74はめっちゃ古いのか
.MAKE.MAKEFILES
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+11.2-RELEASE&arch=default&format=html
今度は試してみたが確かにっぽい
.MAKE.MAKEFILES
https://www.freebsd.org/cgi/man.cgi?query=make&apropos=0&sektion=0&manpath=FreeBSD+11.2-RELEASE&arch=default&format=html
今度は試してみたが確かにっぽい
78デフォルトの名無しさん (ワッチョイ 178a-VlcY)
2018/09/27(木) 02:38:06.19ID:RGPgoULv079デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 02:48:37.10ID:Fk1HpByz080デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 03:09:09.89ID:Fk1HpByz0 もう少し見やすく、汎用的な書き方をするとこんな感じかな
サブシェル(change_vars)内で追加や変更した変数を
すべてサブシェルの親に返す方法
# もちろん例
change_vars() { i=123; }
eval "$(somecommand | { change_vars; set; })"
echo $i
実際には変更してないものすべてを再代入してるわけだが
それを行った所で問題はない。
ただしreadonlyを使ってると代入できなくてエラーになる。
これはなにかいい回避策はないだろうか
サブシェル(change_vars)内で追加や変更した変数を
すべてサブシェルの親に返す方法
# もちろん例
change_vars() { i=123; }
eval "$(somecommand | { change_vars; set; })"
echo $i
実際には変更してないものすべてを再代入してるわけだが
それを行った所で問題はない。
ただしreadonlyを使ってると代入できなくてエラーになる。
これはなにかいい回避策はないだろうか
81デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 03:23:00.68ID:Fk1HpByz0 readonlyになってる変数一覧はreadonly -pで取得できる
その結果をパースしてごにゃごにゃやればできるんだろうけど、
readonly -pの結果が、
bashだと declare -r a="1"
dashだと readonly a='1'
と異なるのでパースが面倒くさい上に、
変数名がわかったからといってどうするのだ?問題がある
サブシェル内でもreadonlyだからunsetできない。
setをパースして消すのは改行文字とかの対応で面倒
エラーを無視しようにもうまくいかない
詰んだw
その結果をパースしてごにゃごにゃやればできるんだろうけど、
readonly -pの結果が、
bashだと declare -r a="1"
dashだと readonly a='1'
と異なるのでパースが面倒くさい上に、
変数名がわかったからといってどうするのだ?問題がある
サブシェル内でもreadonlyだからunsetできない。
setをパースして消すのは改行文字とかの対応で面倒
エラーを無視しようにもうまくいかない
詰んだw
82デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 03:37:41.74ID:GWQb325r0 "Field with Space" "Second Field" ...
みたいなフィールの連続に対して一番初めのフィールドを取得したいんだけど
なんかいい方法ない? ただしフィールドのなかに特殊な文字は含まれないし、「"」記号もフィールを区別する目的以外には使われてない。
これコマンドに渡す引数の形と似てるから$1とか上手く利用したらいい感じの処理ができそうなんだけど
思い付かん……。
みたいなフィールの連続に対して一番初めのフィールドを取得したいんだけど
なんかいい方法ない? ただしフィールドのなかに特殊な文字は含まれないし、「"」記号もフィールを区別する目的以外には使われてない。
これコマンドに渡す引数の形と似てるから$1とか上手く利用したらいい感じの処理ができそうなんだけど
思い付かん……。
83デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 03:38:09.61ID:GWQb325r0 なぜかフィールドが二箇所でフィールになってるww
84デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 03:50:48.26ID:Fk1HpByz0 ちゃんとフールって書けよw
こんな感じだな
line='"Field with Space" "Second Field"'
echo $line
# 関数呼び出し
foo() {
echo "foo1: $1"
echo "foo2: $2"
}
eval fool $line
# または
eval set -- $line
echo "set1: $1"
echo "set2: $2"
もちろんeval使ってるので、入力データが安全であることが前提
あとは1文字ずつパースして処理するとか
こんな感じだな
line='"Field with Space" "Second Field"'
echo $line
# 関数呼び出し
foo() {
echo "foo1: $1"
echo "foo2: $2"
}
eval fool $line
# または
eval set -- $line
echo "set1: $1"
echo "set2: $2"
もちろんeval使ってるので、入力データが安全であることが前提
あとは1文字ずつパースして処理するとか
85デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 04:38:59.49ID:GWQb325r0 あーやっぱり変数に代入する感じか。
(データが安全なのは保証されてるんだけど 長いんだよね)
でもありがとう。とりあえずそれで行く。
(データが安全なのは保証されてるんだけど 長いんだよね)
でもありがとう。とりあえずそれで行く。
86デフォルトの名無しさん (ワッチョイ ff98-aemA)
2018/09/27(木) 04:43:30.53ID:Fk1HpByz0 変数というか、$1, $2, ... だけど
変数($1等含む)に入れないでどうやれとw
標準入力?
変数($1等含む)に入れないでどうやれとw
標準入力?
87デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 05:30:19.44ID:GWQb325r0 いや 結局変数に入れることと一緒なんだけど
$ echo '"Field with Space" "Second Field"' | { eval set -- "$(cat -)"; echo $1; }
みたいにしてみた。というのは実際のデータは標準出力から流れてくるから
できるだけパイプで処理したいなというのがあった。
いずれにせよeval setなんて思い付きもしなかったんで むちゃくちゃ感謝してる。
難癖を付けてる訳ではないよ。いやマジで。
$ echo '"Field with Space" "Second Field"' | { eval set -- "$(cat -)"; echo $1; }
みたいにしてみた。というのは実際のデータは標準出力から流れてくるから
できるだけパイプで処理したいなというのがあった。
いずれにせよeval setなんて思い付きもしなかったんで むちゃくちゃ感謝してる。
難癖を付けてる訳ではないよ。いやマジで。
88デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 07:41:11.09ID:wRik+4En0 >>87
別に気分悪くしたとかじゃなくて、
なにか処理するなら結局変数に入れるよなーってだけだよ
標準入力からでもreadで変数に入れるわけだし
最近eval多用してる。もちろんそれがどうしても必要だからだけど
特に速度が遅くなるわけでもないし色々と便利
別に気分悪くしたとかじゃなくて、
なにか処理するなら結局変数に入れるよなーってだけだよ
標準入力からでもreadで変数に入れるわけだし
最近eval多用してる。もちろんそれがどうしても必要だからだけど
特に速度が遅くなるわけでもないし色々と便利
89デフォルトの名無しさん (ワッチョイ 377f-2rmu)
2018/09/27(木) 09:31:12.30ID:0Kr1SoI20 丁寧な回答をもらっておいて「でも」「とりあえず」は失礼だろう
「お前の回答はイマイチだが時間もないし採用してやるか」という感じかな?
「お前の回答はイマイチだが時間もないし採用してやるか」という感じかな?
90デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 09:36:53.29ID:wRik+4En0 今日の荒らしは>>89
91デフォルトの名無しさん (アウアウカー Saab-HGqR)
2018/09/27(木) 10:20:00.38ID:pwwRK9qRa 荒らし認定兄貴今日もお疲れ様です
92デフォルトの名無しさん (ワッチョイ 178a-VlcY)
2018/09/27(木) 11:06:37.78ID:RGPgoULv0 正論を書くとあらし認定されるんですね
93デフォルトの名無しさん (オッペケ Sr4b-+FqY)
2018/09/27(木) 12:20:46.63ID:99b9Jx0Mr 大体失礼なのはこの手の答えたがりw
94デフォルトの名無しさん (アウアウカー Saab-XaUO)
2018/09/27(木) 13:17:03.86ID:U92lHhY6a >>70
それ set じゃなくて最後に echo i=$i だけで良いのでは?
それ set じゃなくて最後に echo i=$i だけで良いのでは?
95デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 14:01:53.41ID:wRik+4En096デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/27(木) 14:05:58.33ID:wRik+4En0 こういう問題について考えていると、bashの拡張ってよく考えられてるなって思うよ
ちゃんと足りなくて必要な機能を追加してくれてる
https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51#prefix-%E5%A4%89%E6%95%B0%E5%90%8D%E4%B8%80%E8%A6%A7
ちゃんと足りなくて必要な機能を追加してくれてる
https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51#prefix-%E5%A4%89%E6%95%B0%E5%90%8D%E4%B8%80%E8%A6%A7
97デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/27(木) 17:43:23.75ID:GWQb325r0 https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#compact
こういうのとかもすっげえ便利だよね。
$ VAR=val; echo ${VAR@A}
VAR='val'
でも新しい機能なのか,日本語版のマニュアルに掲載されてない。
(まあ俺はPOSIXに準拠したほうがいいと思ってるので,こういう機能は
それこそ一時的な使い捨てスクリプトにしか使わんけど)
こういうのとかもすっげえ便利だよね。
$ VAR=val; echo ${VAR@A}
VAR='val'
でも新しい機能なのか,日本語版のマニュアルに掲載されてない。
(まあ俺はPOSIXに準拠したほうがいいと思ってるので,こういう機能は
それこそ一時的な使い捨てスクリプトにしか使わんけど)
98デフォルトの名無しさん (ワッチョイ bf9f-MYrK)
2018/09/28(金) 02:21:47.32ID:5yuIehG0099デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/28(金) 10:45:59.06ID:TLhVFQk50 ファイルのメディアタイプを取得する汎用な方法ってあるかな。
自作してもいいんだけどできれば既存のものを利用したい。
file(1)コマンドの-iオプションがまず思い付いたんだけど,これは
GNU/Linux(http://man7.org/linux/man-pages/man1/file.1.html)
FreeBSD(https://www.freebsd.org/cgi/man.cgi?query=file&sektion=1)
ではメディアタイプで出力するとあるのに対し
本家POSIX(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/file.html)
Solaris(https://docs.oracle.com/cd/E26502_01/html/E29030/file-1.html)
AIX(https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/file.htm)
なんかでは特になんの指定もなし……。
メディアタイプなんてド標準なんだから,しっかり規定しておいてほしかったなぁ。
POSIX 2017あたりでさ。
自作してもいいんだけどできれば既存のものを利用したい。
file(1)コマンドの-iオプションがまず思い付いたんだけど,これは
GNU/Linux(http://man7.org/linux/man-pages/man1/file.1.html)
FreeBSD(https://www.freebsd.org/cgi/man.cgi?query=file&sektion=1)
ではメディアタイプで出力するとあるのに対し
本家POSIX(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/file.html)
Solaris(https://docs.oracle.com/cd/E26502_01/html/E29030/file-1.html)
AIX(https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds2/file.htm)
なんかでは特になんの指定もなし……。
メディアタイプなんてド標準なんだから,しっかり規定しておいてほしかったなぁ。
POSIX 2017あたりでさ。
100デフォルトの名無しさん (ワッチョイ 9f98-aemA)
2018/09/28(金) 13:07:01.59ID:bPXaydqo0 >>99
メディアタイプの種類自体は標準化されていたとしても、
あるファイルがどのメディアタイプかってのは決まらないでしょ?
拡張子cgiのスクリプトファイルだって、ソースコード配布サイトなら
テキストファイル扱いにしたいだろうし
メディアタイプの種類自体は標準化されていたとしても、
あるファイルがどのメディアタイプかってのは決まらないでしょ?
拡張子cgiのスクリプトファイルだって、ソースコード配布サイトなら
テキストファイル扱いにしたいだろうし
101デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 13:10:10.20ID:d3Gl2lPg0 特別な意味をもたせた終了コードをなんにしようかな?って考えてるんだけど
既存で使われてる終了コードとなるべくかぶらせたくない。
どんなのがあるか知らない?
1, 2, 126, 127, 255(bashの予約)
0〜63(fsckで使用)
64〜78(sysexits ユーザー用のうち定義済みのもの)
128〜192(シグナルコードの範囲?)
参考
https://ja.wikipedia.org/wiki/%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
http://kaworu.jpn.org/doc/FreeBSD/jman/man3/sysexits.3.php
http://tldp.org/LDP/abs/html/exitcodes.html
一番最後のリンクでsysexitsの作者は64〜113をユーザー用に使うことを提案してるみたいだけど
定義済みを除けば残りは79〜113かな
既存で使われてる終了コードとなるべくかぶらせたくない。
どんなのがあるか知らない?
1, 2, 126, 127, 255(bashの予約)
0〜63(fsckで使用)
64〜78(sysexits ユーザー用のうち定義済みのもの)
128〜192(シグナルコードの範囲?)
参考
https://ja.wikipedia.org/wiki/%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
http://kaworu.jpn.org/doc/FreeBSD/jman/man3/sysexits.3.php
http://tldp.org/LDP/abs/html/exitcodes.html
一番最後のリンクでsysexitsの作者は64〜113をユーザー用に使うことを提案してるみたいだけど
定義済みを除けば残りは79〜113かな
102デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/29(土) 13:18:50.90ID:IuTgmxg/0 オツムに欠陥があるヤツでなければ
普通に別の環境変数にいれる
普通に別の環境変数にいれる
103デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 14:08:42.53ID:PPHj/b7C0104デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 15:12:55.62ID:d3Gl2lPg0 >>103
そう言われるかなとは思ったw
「俺の作ったプログラム」 ==> 「俺の作ったフィルタ」 ==> 「任意のプログラム」
という呼び出しの流れで
「俺の作ったプログラム」 で「任意のプログラム」 の終了コードを知りたいが、
「俺の作ったフィルタ」 独自の終了コードだけは特別扱いしたいということ
「任意のプログラム」のエラーは想定外のエラーで
「俺の作ったフィルタ」のエラーは想定されたエラーで
どちらもエラーではあるんだけど「俺の作ったプログラム」で表示するメッセージが違う
それぐらいなので、かぶってしまっても大きな問題は発生しないんだけどね
そう言われるかなとは思ったw
「俺の作ったプログラム」 ==> 「俺の作ったフィルタ」 ==> 「任意のプログラム」
という呼び出しの流れで
「俺の作ったプログラム」 で「任意のプログラム」 の終了コードを知りたいが、
「俺の作ったフィルタ」 独自の終了コードだけは特別扱いしたいということ
「任意のプログラム」のエラーは想定外のエラーで
「俺の作ったフィルタ」のエラーは想定されたエラーで
どちらもエラーではあるんだけど「俺の作ったプログラム」で表示するメッセージが違う
それぐらいなので、かぶってしまっても大きな問題は発生しないんだけどね
105デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 17:52:02.97ID:PPHj/b7C0 >>104
なるほど。
たしかにそういう目的ならば,終了コードが混ざる≠フはよくないな。
しかし例えばapt(1)は非root権限でシステム操作しようとすると
exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
せっかくsysexitに権限異常を示す77があるのにどうして100番を使ってしまったのか……。
[Debian 2015]: https://manpages.debian.org/stretch/apt/apt.8.ja.html#%E8%A8%BA%E6%96%AD%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8
なるほど。
たしかにそういう目的ならば,終了コードが混ざる≠フはよくないな。
しかし例えばapt(1)は非root権限でシステム操作しようとすると
exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
せっかくsysexitに権限異常を示す77があるのにどうして100番を使ってしまったのか……。
[Debian 2015]: https://manpages.debian.org/stretch/apt/apt.8.ja.html#%E8%A8%BA%E6%96%AD%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8
106デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 17:54:32.38ID:PPHj/b7C0 ああ,なんか説明不足で投稿しちゃった。
つまりさ,一応標準で定められたエラー番号はあるものの,
各種アプリケーションが従っている訳でもなく
Debian系のaptコマンドのような超大手のアプリケーションでさえ標準を無視してるんだから,
> 定義済みを除けば残りは79〜113かな
↑こういうのは考えないほうがいいんじゃない? ってこと。
つまりさ,一応標準で定められたエラー番号はあるものの,
各種アプリケーションが従っている訳でもなく
Debian系のaptコマンドのような超大手のアプリケーションでさえ標準を無視してるんだから,
> 定義済みを除けば残りは79〜113かな
↑こういうのは考えないほうがいいんじゃない? ってこと。
107デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:22:23.04ID:d3Gl2lPg0 >>105-106
どこかのなにかにかぶってしまうのは防ぎようがないけど
よく使われるコマンドがこんな終了コードを使っていたっていう事例を知りたいのよ
fsckとかどう見てもエラーじゃねーだろコレっていうのが
エラーあつかいになってて以前はハマったことあるしw
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
> 1 - ファイルシステムのエラーが修正された
どこかのなにかにかぶってしまうのは防ぎようがないけど
よく使われるコマンドがこんな終了コードを使っていたっていう事例を知りたいのよ
fsckとかどう見てもエラーじゃねーだろコレっていうのが
エラーあつかいになってて以前はハマったことあるしw
https://linuxjm.osdn.jp/html/e2fsprogs/man8/fsck.8.html
> 1 - ファイルシステムのエラーが修正された
108デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:23:25.37ID:d3Gl2lPg0 標準に準拠したいとかそういう話ではなく
単にぶつかりたくないだけ
単にぶつかりたくないだけ
109デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/09/29(土) 18:24:45.45ID:d3Gl2lPg0 > exit 100を返すというトンデモ仕様[Debian 2015]なので,もうどうしようもないんじゃねw
実を言うと今100を使おうとしていたw
やはり裏の裏の裏の裏ぐらいを読まないとダメだなw
実を言うと今100を使おうとしていたw
やはり裏の裏の裏の裏ぐらいを読まないとダメだなw
110デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/09/29(土) 18:40:55.97ID:PPHj/b7C0 非0の返り値だけどコマンドは成功しているっていう例として有名なのはdiff(1)とかかな。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/diff.html#tag_20_34_14
>1
> Differences were found.
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/diff.html#tag_20_34_14
>1
> Differences were found.
111デフォルトの名無しさん (ワッチョイ 9f5d-+h8b)
2018/09/29(土) 18:46:56.62ID:8M0IW2fy0 シグナルでも使ってみたらどうだろうか。
あるいは別にパイプを用意するとか。
あるいは別にパイプを用意するとか。
112デフォルトの名無しさん (ワッチョイ bf9f-MYrK)
2018/09/30(日) 02:44:50.58ID:KPqVv5wd0 絶対にぶつからないようにするには別の方法でエラーを伝えるようにするぐらいしか方法ないんじゃないか?
同じ値になる可能性のあるものをどちらから発生したかわからない状態で同じ所から得るなんてやはり無理があるだろう。
同じ値になる可能性のあるものをどちらから発生したかわからない状態で同じ所から得るなんてやはり無理があるだろう。
113デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/01(月) 01:15:09.47ID:2Ehpmx/A0 こんな書き方できたのか
a=1
case $a in
( 1 ) echo ok
esac
a=1
case $a in
( 1 ) echo ok
esac
114デフォルトの名無しさん (ワッチョイ bf9f-aemA)
2018/10/01(月) 02:02:45.71ID:IEGoOL+v0 お、おう
115デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/02(火) 19:23:29.52ID:6qOrAQgQ0 お題
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、外部コマンド、拡張POSIX機能、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、外部コマンド、拡張POSIX機能、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
116デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/02(火) 21:27:13.63ID:yoF3UpeG0117デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/02(火) 21:45:46.37ID:yoF3UpeG0 おいこら答えてやったんだからなんとか言えよコラ
エレガントすぎて腰が抜けたか?wwwww
まあ実際,自分で言うのもなんだけどかなり最良に近い方法じゃないかしら。
・POSIX.1-2017準拠
・空白などを含む引数も直感的に指定可能("word with space")
・単純 構造が簡単
・数値の増加にexpr(1)ではなく算術式を利用している為速い
エレガントすぎて腰が抜けたか?wwwww
まあ実際,自分で言うのもなんだけどかなり最良に近い方法じゃないかしら。
・POSIX.1-2017準拠
・空白などを含む引数も直感的に指定可能("word with space")
・単純 構造が簡単
・数値の増加にexpr(1)ではなく算術式を利用している為速い
118デフォルトの名無しさん (ワッチョイ 1723-sl6K)
2018/10/02(火) 22:03:54.77ID:kkfm+1S90 変数禁止だから不正解じゃない?
119デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/02(火) 22:15:20.79ID:xDUI5Isc0120デフォルトの名無しさん (アウアウカー Saab-HGqR)
2018/10/02(火) 23:00:16.05ID:xTxFBCr4a 最初の一個だけならスマートだったのに
褒められたがりが
褒められたがりが
121デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 00:30:44.79ID:ej0n10jM0 煽りだよ だって明らかに学校の課題かなにかでしょ。
そんなのに真面目に付き合うほど俺は素直じゃない。
そんなのに真面目に付き合うほど俺は素直じゃない。
122デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 00:44:57.49ID:m57KKa9e0 苦しすぎな言い訳w
123デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 01:48:10.18ID:ej0n10jM0 まあそう思っとけw
124デフォルトの名無しさん (ワッチョイ bf9f-aemA)
2018/10/03(水) 01:59:13.13ID:jikKostS0 >>115
echo は使っては駄目? 拡張されていない sh だと echo はビルトインではなく /usr/bin/echo だと思うが。
echo は使っては駄目? 拡張されていない sh だと echo はビルトインではなく /usr/bin/echo だと思うが。
125デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:01:17.96ID:NkO7phbc0126デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:03:27.25ID:NkO7phbc0127デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:14:54.02ID:NkO7phbc0 そうか。evalとか外部コマンドは実装不可能なものを除いて
ビルトインで実装することなんて決まりはないのか
では外部コマンドの定義を「現存するシェルでビルトインで実装されたことがないもの」にしよう
オレオレシェル作ってビルトインするのは問題の意図から外れるので、
現存する(誰もが容易に入手可能な)いずれかのシェルで
ビルトインされているならば使って良いものとする
ビルトインで実装することなんて決まりはないのか
では外部コマンドの定義を「現存するシェルでビルトインで実装されたことがないもの」にしよう
オレオレシェル作ってビルトインするのは問題の意図から外れるので、
現存する(誰もが容易に入手可能な)いずれかのシェルで
ビルトインされているならば使って良いものとする
128デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 02:18:56.23ID:NkO7phbc0 あと拡張POSIX機能も使用してOKにしよう。
それを実現する裏技みたいなのがあったら嫌だなと思って入れたが、
もしそれでできるなら俺も勉強になるし。
ようするにPATH環境変数を空にして、どれかのシェルで動けばOKってことだな
条件がグダグダになってしまったw
それを実現する裏技みたいなのがあったら嫌だなと思って入れたが、
もしそれでできるなら俺も勉強になるし。
ようするにPATH環境変数を空にして、どれかのシェルで動けばOKってことだな
条件がグダグダになってしまったw
129デフォルトの名無しさん (アウアウカー Saab-XaUO)
2018/10/03(水) 12:27:47.15ID:61GCF4dla if や while を外部コマンド動かさずに使うには [ がビルトインのシェルでないとダメだな。
昔の sh は [ が test コマンドへのシンボリックリンクで外部コマンドだったし。
今でもその名残で /bin または /usr/bin に [ が入ってるよな。
昔の sh は [ が test コマンドへのシンボリックリンクで外部コマンドだったし。
今でもその名残で /bin または /usr/bin に [ が入ってるよな。
130デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 13:43:00.79ID:NkO7phbc0 別件で現在主要のシェルで何がビルトインか調べたことがあるよ
. : [ break cd command continue echo eval exec exit export false kill pwd
read readonly return set shift test times trap true umask unset wait
これらは全てのシェルで使えると言っていいだろう
poshはログインシェルとしては使わないもの扱いなのか
alias bg fg type ulimitが削除されている。(typeないとか地味につらい)
busyboxはgetoptsがないみたい
意外だったのはprintfがビルトインでないシェルがmkshとposhの2つもあったこと。
しかも両方共echoでエスケープシーケンスを解釈してくれるから文字をそのまま出力できない。
mkshの方はset -o posixでエスケープシーケンスを無効にできるしビルトインのprintで代用できるんだが
poshは調べた限りビルトインコマンドでそのまま出力する方法がない
. : [ break cd command continue echo eval exec exit export false kill pwd
read readonly return set shift test times trap true umask unset wait
これらは全てのシェルで使えると言っていいだろう
poshはログインシェルとしては使わないもの扱いなのか
alias bg fg type ulimitが削除されている。(typeないとか地味につらい)
busyboxはgetoptsがないみたい
意外だったのはprintfがビルトインでないシェルがmkshとposhの2つもあったこと。
しかも両方共echoでエスケープシーケンスを解釈してくれるから文字をそのまま出力できない。
mkshの方はset -o posixでエスケープシーケンスを無効にできるしビルトインのprintで代用できるんだが
poshは調べた限りビルトインコマンドでそのまま出力する方法がない
131デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 13:47:38.74ID:m57KKa9e0 いいから、お題の参考答えを出しなさいw
オレオレ定義が曖昧すぎでお題になってないから、もういいでしょ
オレオレ定義が曖昧すぎでお題になってないから、もういいでしょ
132デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 13:57:02.54ID:NkO7phbc0 >>131
問題訂正してやるから、もう少し頑張れやw
お題
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
(ここでいう変数とはsetコマンドで表示されるもののことである)
(使用するコマンドはいずれかのシェルのビルトインコマンドであればよいが、
この問題用に独自シェルを作成するのは禁止とする)
問題訂正してやるから、もう少し頑張れやw
お題
ある関数に対して、apple orange banana ... とN個(Nは任意の個数)の引数を渡した時、
以下のような、引数とその引数のインデックス番号を出力する関数を作成せよ
(単語に対して数値が対応しているわけではない)
apple 1
orange 2
banana 3
:
ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
(ここでいう変数とはsetコマンドで表示されるもののことである)
(使用するコマンドはいずれかのシェルのビルトインコマンドであればよいが、
この問題用に独自シェルを作成するのは禁止とする)
133デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 13:59:49.96ID:m57KKa9e0 なんの目的かさっぱりわからんな。自分でできてんの?っていう疑問からなんだけどなw
>変数の使用は禁止とし
>(ここでいう変数とはsetコマンドで表示されるもののことである)
環境変数のことを言っているのかと思えば違うし、これだけでも曖昧というかオレオレ定義が曖昧だろう
>変数の使用は禁止とし
>(ここでいう変数とはsetコマンドで表示されるもののことである)
環境変数のことを言っているのかと思えば違うし、これだけでも曖昧というかオレオレ定義が曖昧だろう
134デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:11:05.97ID:NkO7phbc0135デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:13:32.35ID:NkO7phbc0 今日の24時までに答えが出なければヒント出しますw
136デフォルトの名無しさん (ワッチョイ f723-LrZ5)
2018/10/03(水) 14:16:57.73ID:6m7pNgyW0 そのヒントとやらもグダグダなんでしょw
137デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:17:05.40ID:m57KKa9e0 変数を使わない 言語(マシン語すら) は知らんなあ。そういう縛りを設けての目的はなんなん?
やってみたできるけど、クソのようなwにしかならんから、どうか、参考の答えを出してw
やってみたできるけど、クソのようなwにしかならんから、どうか、参考の答えを出してw
138デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:19:23.20ID:NkO7phbc0 答えは明日。まあヒントみれば気づく人はすぐわかるでしょう。
コロンブスの卵だよ
コロンブスの卵だよ
139デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:20:30.02ID:m57KKa9e0 なんで常時上から目線なのかw コードで語ればいいのに
素晴らしいコードならそんなおれおれ上から目線しなくてもいいくらいなのに。なんかしらんがもったいつけてのまだ「ヒント」とかもったいつけてるしw
素晴らしいコードならそんなおれおれ上から目線しなくてもいいくらいなのに。なんかしらんがもったいつけてのまだ「ヒント」とかもったいつけてるしw
140デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:21:39.64ID:m57KKa9e0 なんかしらんが見つけて、俺すげーしたいだけっぽいなw
141デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 14:22:11.11ID:NkO7phbc0 > そういう縛りを設けての目的はなんなん?
その理由も答えと一緒に明かします
その理由も答えと一緒に明かします
142デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:23:23.18ID:m57KKa9e0 いや、もういらんわw なんかキモすぎて付き合いきれないw
143デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 14:36:43.15ID:ej0n10jM0 多分だけど学校の課題だと予想
根拠は二点:
1. 問題が実利的でない。学校(それもあまり学力の高くない)にありがちな「こんなのできるかな?」系の問題である。
2. 煽ったらそれに乗っかって答えを出してくれる人が思ってるという点で質問者が精神的に幼ない。(高校生くらいか?)
根拠は二点:
1. 問題が実利的でない。学校(それもあまり学力の高くない)にありがちな「こんなのできるかな?」系の問題である。
2. 煽ったらそれに乗っかって答えを出してくれる人が思ってるという点で質問者が精神的に幼ない。(高校生くらいか?)
144デフォルトの名無しさん (ワッチョイ bf3b-c77k)
2018/10/03(水) 14:45:22.66ID:m57KKa9e0 posh とかいつもの人でしょ
いつもの人が学校の課題をしなきゃならん人なのか知らんけどw
いつもの人が学校の課題をしなきゃならん人なのか知らんけどw
145デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 15:06:30.08ID:ej0n10jM0 poshなんていうシェルがあるのね。初耳だわ。
146デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 15:10:04.24ID:NkO7phbc0 >>2に書いてあるよ。俺もここ(の何スレか前)で初めて知った
147デフォルトの名無しさん (アウアウカー Saab-XaUO)
2018/10/03(水) 15:58:50.21ID:4kFnpcnsa $# と shift を使って逆順に値を付加することは簡単にできたんだがな。
148デフォルトの名無しさん (ワッチョイ 1798-aemA)
2018/10/03(水) 17:25:26.25ID:NkO7phbc0149デフォルトの名無しさん (ワッチョイ 9fb3-lCNR)
2018/10/03(水) 21:20:26.89ID:SM8JpmZX0 ちょっと前にもこんなグダグダ無かったっけ?
150デフォルトの名無しさん (アウウィフ FFdb-LSDD)
2018/10/03(水) 21:48:53.18ID:Tma5IQlaF 変数使ってはダメって、非合理的でない?
シェルの仕様否定してどーするの?
外部コマンドだって、それがUNIXの設計思想なんだからそれさえも否定するってのも理解不能
ならば、OSそのものを仮想的なものを仮定して
その上で動かすとでもしないと
大昔の情報処理技術者試験用に作られたアセンブラみたいな感じでさ
変数使わない、外部コマンド使用禁止、そんなアルゴリズムが何の役に立つんだろう?
シェルの仕様否定してどーするの?
外部コマンドだって、それがUNIXの設計思想なんだからそれさえも否定するってのも理解不能
ならば、OSそのものを仮想的なものを仮定して
その上で動かすとでもしないと
大昔の情報処理技術者試験用に作られたアセンブラみたいな感じでさ
変数使わない、外部コマンド使用禁止、そんなアルゴリズムが何の役に立つんだろう?
151デフォルトの名無しさん (ワッチョイ 5764-u1F+)
2018/10/03(水) 22:35:14.41ID:ej0n10jM0 でも前はワッチョイやIDがなかったから もっと酷かった。
今はNGすればオッケー☆
今はNGすればオッケー☆
152デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:37:38.01ID:8ua9ZMtc0 ヒント忘れてたわw
func() {
*********
while [ $# -gt 1 ]; do
*********
shift
done
}
func apple orange banana
********の所は1行とは限りません
func() {
*********
while [ $# -gt 1 ]; do
*********
shift
done
}
func apple orange banana
********の所は1行とは限りません
153デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:41:45.65ID:8ua9ZMtc0154デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:43:44.36ID:8ua9ZMtc0155デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 00:46:12.13ID:8ua9ZMtc0156デフォルトの名無しさん (ワッチョイ effb-v2gR)
2018/10/04(木) 00:49:17.75ID:C6pwZkBD0 いきなりレス数増えたと思ったらもう木曜か
157デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 04:55:02.39ID:/YMF27MO0 >>152よ、お前のなかでは「$#」は変数じゃないのか……。
人様にクイズとやらを出す前にシェルとはなんなのかを学んだらどうだ?
人様にクイズとやらを出す前にシェルとはなんなのかを学んだらどうだ?
158デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 05:43:44.35ID:8ua9ZMtc0 出題ぐらいちゃんと読もうぜw
> ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
> (ここでいう変数とはsetコマンドで表示されるもののことである)
> ただし、変数の使用は禁止とし、シェル機能とビルトインコマンドのみを用いること
> (ここでいう変数とはsetコマンドで表示されるもののことである)
159デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 08:51:53.43ID:/YMF27MO0 bash 4.2以降はset組み込みコマンドの中に$#が含まれるようになったんだよなぁ…
ちゃんと調べて、どうぞ。
ちゃんと調べて、どうぞ。
160デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 09:17:07.53ID:8ua9ZMtc0 ないですね。ちゃんと調べてどうぞ
foo() { set | grep '#='; }; foo
$ bash --version
GNU bash, バージョン 4.4.19(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
foo() { set | grep '#='; }; foo
$ bash --version
GNU bash, バージョン 4.4.19(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
161デフォルトの名無しさん (アウアウカー Sa0a-iYeS)
2018/10/04(木) 09:50:29.05ID:8DudSISka >>160
grap のパターンはそれでいいのか?
grap のパターンはそれでいいのか?
162デフォルトの名無しさん (ワッチョイ 1e98-vBoO)
2018/10/04(木) 10:01:44.50ID:8ua9ZMtc0163デフォルトの名無しさん (アウアウカー Sa0a-iYeS)
2018/10/04(木) 10:47:30.53ID:8DudSISka ああ。そうか。最初の$は要らないからそれでいいのか。
164デフォルトの名無しさん (ワッチョイ deb3-GavF)
2018/10/04(木) 14:55:58.09ID:7ib5/eAS0 grap コマンドか、なんか強うそうなイメージ
165デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 16:22:52.78ID:/YMF27MO0 なんかもう誰かが作ってそうだよね。
まるでyaから始まる4文字のソフトウェアが被りまくってるように。
まるでyaから始まる4文字のソフトウェアが被りまくってるように。
166デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 16:55:15.20ID:8ua9ZMtc0 犯人はya
167デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:00:19.77ID:8ua9ZMtc0 正解者もいないようなのででは解答
このコードがどういうときに有用かは>>153で書いたとおり
set は使わなくても別にもう一つ関数を作れば同じことができるが
関数を作らずとも引数の再設定という方法がある。意外と便利だよ
func() {
set -- "$@" $(($#+2))
while [ $# -gt 1 ]; do
eval "echo \"$1 \$((\$$#-$#))\""
shift
done
}
func apple orange banana
このコードがどういうときに有用かは>>153で書いたとおり
set は使わなくても別にもう一つ関数を作れば同じことができるが
関数を作らずとも引数の再設定という方法がある。意外と便利だよ
func() {
set -- "$@" $(($#+2))
while [ $# -gt 1 ]; do
eval "echo \"$1 \$((\$$#-$#))\""
shift
done
}
func apple orange banana
168デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:11:54.69ID:n5lIiyiD0 そんなクソなコードを意気揚々としてあげてるけどさ、なんか変数被るからというもっともらしい言い訳してたけど、なるべく変数使わないように書くわけだ、これから。ほーっw。そんなのクソだな、個人的にw
なんでそういうお題をそんな俺偉いじゃなくてできないのかな。よほどそれを出すのに時間かかったとか??
なんでそういうお題をそんな俺偉いじゃなくてできないのかな。よほどそれを出すのに時間かかったとか??
169デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:12:23.41ID:8ua9ZMtc0 はい。想定通りのレスだね。
言い訳だけは一人前w
言い訳だけは一人前w
170デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:13:26.14ID:n5lIiyiD0 いや、ふつうわかるだろう。まあ、かなり頑張って出したんだね、やっぱりw
171デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:14:13.91ID:8ua9ZMtc0 じゃあもう一問。そんなに言うなら次は答えてね
172デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:15:02.61ID:n5lIiyiD0 だから、なんでそんな上から目線なのよ
んなのに付き合うと思ってるの?あんた自体が上から目線でモノ言われたらすぐ反発するくせにww
んなのに付き合うと思ってるの?あんた自体が上から目線でモノ言われたらすぐ反発するくせにww
173デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:18:43.51ID:n5lIiyiD0 いや、上から目線じゃなくても反論されたらかwww
174デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:20:37.56ID:8ua9ZMtc0 >>172
お前はこのおっさんと同じ種類の人間だろうな
相手が下だと思って接してるやつ。
まずお前が上から目線を止めたら?
https://togetter.com/li/1175445
おっさんがタメ語で聞いてきたからタメ語で返したらショックを受けてた。敬意が返ってくると思ってる日本のおっさんって不思議。
お前はこのおっさんと同じ種類の人間だろうな
相手が下だと思って接してるやつ。
まずお前が上から目線を止めたら?
https://togetter.com/li/1175445
おっさんがタメ語で聞いてきたからタメ語で返したらショックを受けてた。敬意が返ってくると思ってる日本のおっさんって不思議。
175デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:24:38.91ID:n5lIiyiD0 いや、お前に合わせているだけだな。さすが常時上から目線なんかしらんが常時上に立ちたいの人は言うことが違うなw
176デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:27:29.69ID:8ua9ZMtc0 上にたってるつもりはないんですが、上に見えちゃうんですかね?w
悪い奴らが「正義の味方のつもりかよwww」って
笑ってるようなシーンがあるけど、あれも悪い奴らに
正義に見えてるからそう言うんでしょうねぇ
悪い奴らが「正義の味方のつもりかよwww」って
笑ってるようなシーンがあるけど、あれも悪い奴らに
正義に見えてるからそう言うんでしょうねぇ
177デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:28:28.79ID:n5lIiyiD0 忘れているのか常時上に立っているつもりで気がつけないwのか知らんが、ID:8ua9ZMtc0 の上から目線なレスに対しての俺のレスでしかないよ
なので、その得意げの>>174はそっくりそのままあんたにお返しいたします
なので、その得意げの>>174はそっくりそのままあんたにお返しいたします
178デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:29:44.58ID:n5lIiyiD0 あーあ、病気なのか社会性がないのか話にならんな。まあ、いつもの無理やりなごまかしモードかな?w
179デフォルトの名無しさん (ワッチョイ 9c03-GavF)
2018/10/04(木) 20:33:31.45ID:vhCji18k0 目くそ鼻くそに上も下もないわwwww
180デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 20:34:30.94ID:n5lIiyiD0 やかましいわっw
181デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/04(木) 20:50:21.03ID:8ua9ZMtc0 これはある意味有名だから簡単だと思う
お題
ある関数に対して1以上の整数Nを引数にして呼び出した時、
1からNまでを出力する関数を作成せよ(要するにseqコマンドの簡易版)
seq 5
1
2
3
4
5
:
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
お題
ある関数に対して1以上の整数Nを引数にして呼び出した時、
1からNまでを出力する関数を作成せよ(要するにseqコマンドの簡易版)
seq 5
1
2
3
4
5
:
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
182デフォルトの名無しさん (ワッチョイ 9c03-GavF)
2018/10/04(木) 20:52:49.73ID:vhCji18k0 >>181
調子にのるな鼻くそ
調子にのるな鼻くそ
183デフォルトの名無しさん (アウアウカー Sa0a-iYeS)
2018/10/04(木) 21:39:22.36ID:sVn7z6Qaa184デフォルトの名無しさん (ワッチョイ 7ab3-H3tq)
2018/10/04(木) 23:11:17.39ID:4+O8yrpt0 こいつ構わん方がいいゼ、俺スゲーしたいだけだから
185デフォルトの名無しさん (アウアウカー Sa0a-v2gR)
2018/10/04(木) 23:14:04.78ID:GYhkNq19a レス番飛び過ぎにも程があるだろ
まぁいつもの長文だらだら流して悦に浸ってるんだろうが
まぁいつもの長文だらだら流して悦に浸ってるんだろうが
186デフォルトの名無しさん (ワッチョイ ae3b-Nzta)
2018/10/04(木) 23:32:35.30ID:n5lIiyiD0 >>183
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
2004の時点であるらしい。++と--は任意。sizeof()なんてあるのかよっ
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
2004の時点であるらしい。++と--は任意。sizeof()なんてあるのかよっ
187デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/04(木) 23:46:42.45ID:/YMF27MO0 >>181
これは興味から訊くんだけど,
「(POSIXの範囲では)変数の局所化ができないので
変数をなるべく使わないべき」
という主張は理解できるし,俺自身もそう思う。
しかしシェルビルトイン関数しか使わず,例えば
sed(1)やawk(1)など目的に合った有用なコマンドを用いない理由はなんだ?
ただの趣味?
これは興味から訊くんだけど,
「(POSIXの範囲では)変数の局所化ができないので
変数をなるべく使わないべき」
という主張は理解できるし,俺自身もそう思う。
しかしシェルビルトイン関数しか使わず,例えば
sed(1)やawk(1)など目的に合った有用なコマンドを用いない理由はなんだ?
ただの趣味?
188デフォルトの名無しさん (ワッチョイ 969f-vBoO)
2018/10/05(金) 01:23:25.22ID:x9IT1j0q0 >>181
$(( )) での計算をしていいなら簡単だよ。
#!/bin/bash
f() {
if [[ $1 -gt 0 ]]; then
f $(( $1 - 1 ))
echo $1
fi
}
f $1
$(( )) での計算をしていいなら簡単だよ。
#!/bin/bash
f() {
if [[ $1 -gt 0 ]]; then
f $(( $1 - 1 ))
echo $1
fi
}
f $1
189デフォルトの名無しさん (ワッチョイ 969f-vBoO)
2018/10/05(金) 01:24:51.76ID:x9IT1j0q0 >>186
そうだったのか。
そうだったのか。
190デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 02:53:44.46ID:bSHFQ9XI0 >>187
現実的なポータビリティと速度のため
POSIXの範囲でやれば、シェルが異なっても動くことが期待できる
だけど現実的にはすべての環境がPOSIXに準拠してるわけではない
特にbusyboxは組み込み向けに必要最小限の機能に減らせるから
sedやawkすらない環境というのもあり得るだろう
そしてもう一つforkは遅い。WSL上だと目に見えて遅い
以下のコードをWSLで実行すると約25秒かかる。fork一回あたり2.5ミリ秒
Linuxだと約2秒。fork1回あたり2ミリ秒。10倍以上の差がある
i=0
while [ $i -lt 10000 ]; do
( :; )
i=$((i+1))
done
この()を外すとWSL上で0.05秒にまで減る。コマンド実行のオーバーヘッドに
埋もれてしまってよくわからないので、10,000から1,000,000から増やすと約1.7秒
つまり一回あたり0.0017ミリ秒。この値はLinuxでも変わらない
外部コマンドの実行でもforkが行われるから
Linux・・・0.0017ミリ秒 → 2ミリ秒 (約1176倍)
WSL・・・0.0017ミリ秒 → 25ミリ秒 (約14706倍)
と大幅に速度が落ちる。シェルスクリプトが遅いと言われる原因の一つ
現実的なポータビリティと速度のため
POSIXの範囲でやれば、シェルが異なっても動くことが期待できる
だけど現実的にはすべての環境がPOSIXに準拠してるわけではない
特にbusyboxは組み込み向けに必要最小限の機能に減らせるから
sedやawkすらない環境というのもあり得るだろう
そしてもう一つforkは遅い。WSL上だと目に見えて遅い
以下のコードをWSLで実行すると約25秒かかる。fork一回あたり2.5ミリ秒
Linuxだと約2秒。fork1回あたり2ミリ秒。10倍以上の差がある
i=0
while [ $i -lt 10000 ]; do
( :; )
i=$((i+1))
done
この()を外すとWSL上で0.05秒にまで減る。コマンド実行のオーバーヘッドに
埋もれてしまってよくわからないので、10,000から1,000,000から増やすと約1.7秒
つまり一回あたり0.0017ミリ秒。この値はLinuxでも変わらない
外部コマンドの実行でもforkが行われるから
Linux・・・0.0017ミリ秒 → 2ミリ秒 (約1176倍)
WSL・・・0.0017ミリ秒 → 25ミリ秒 (約14706倍)
と大幅に速度が落ちる。シェルスクリプトが遅いと言われる原因の一つ
191デフォルトの名無しさん (ワッチョイ d980-A6IM)
2018/10/05(金) 02:58:21.89ID:elz6X2140 なんもわかってない低学歴知恵遅れが
はりきってしょうもないwsl使ってキャッキャッいってるわけか
なるほどなるほど
wsl使ってるのなんかニートぐらいしかいないわ
マジで
はりきってしょうもないwsl使ってキャッキャッいってるわけか
なるほどなるほど
wsl使ってるのなんかニートぐらいしかいないわ
マジで
192デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 03:00:21.47ID:bSHFQ9XI0 >>188
やっぱり簡単だったかw
再帰を使うやり方で関数型言語ではおなじみの問題
もちろんシェルスクリプトは関数型ではないし
末尾最適化も行われないのでどうしても遅くなる
さすがにこれは変数使ったほうが良いかな思ったw
他にも問題を作れそうなネタのはいくつかあるんで
気が向いたらまた問題にしてみるよ
やっぱり簡単だったかw
再帰を使うやり方で関数型言語ではおなじみの問題
もちろんシェルスクリプトは関数型ではないし
末尾最適化も行われないのでどうしても遅くなる
さすがにこれは変数使ったほうが良いかな思ったw
他にも問題を作れそうなネタのはいくつかあるんで
気が向いたらまた問題にしてみるよ
193デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 03:01:11.86ID:bSHFQ9XI0194デフォルトの名無しさん (ワッチョイ 7ab3-H3tq)
2018/10/05(金) 03:25:46.03ID:98l9MfY+0 実用的じゃないもの書いてるうちは似非の技術者じゃの
195デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/05(金) 03:52:16.47ID:DwOdckeN0196デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 08:48:03.27ID:bSHFQ9XI0 >>195
ストリーミング指向と制御文はあまり関係ないと思うよ
流れてくるものに対してなにか処理をしたいなら必ず
制御文を使うことになるし
ストリーミング指向の話をするなら、関数呼び出しし結果の標準出力を
変数にキャプチャするっていうのはストリーミング指向と反してると思う
例えば result=$(command "$data") みたいな形のことね
俺もこの書き方はなるべく避けるようになった
ストリーミング指向的には echo "$data" | command | 別のなにか
とするほうが良いだろう
ただ気づいたのがこの形だとサブシェルになってしまうから、
commandや別のなにかから、呼び出しの起点にデータを戻すことが
簡単にはできないという所。値を戻すこと自体がストリーミングの流れに反しているし
かと言ってそれが必要な場合もある。例えば処理した行数をカウントしたりとかね。
なので最近はイベントハンドラ方式を使うようになった
echo "$data" | command "別のなにか(関数名)" (または command "$data" "別のなにか")
例えばだけどこんな感じにして、commandで$dataを1行ずつ処理して
その都度、別のなにか(関数)を呼び出す。そうするとサブシェルにはならないので
ストリーミングで処理しつつ、グローバル変数経由で呼び出し元に結果を返すことができる
この時、別の何かがシェル関数の場合に、commandが外部コマンドだとシェル関数を呼び出せないので
連鎖的にcommandもシェル関数として実装。みたいなこともやってたりする
ストリーミング指向と制御文はあまり関係ないと思うよ
流れてくるものに対してなにか処理をしたいなら必ず
制御文を使うことになるし
ストリーミング指向の話をするなら、関数呼び出しし結果の標準出力を
変数にキャプチャするっていうのはストリーミング指向と反してると思う
例えば result=$(command "$data") みたいな形のことね
俺もこの書き方はなるべく避けるようになった
ストリーミング指向的には echo "$data" | command | 別のなにか
とするほうが良いだろう
ただ気づいたのがこの形だとサブシェルになってしまうから、
commandや別のなにかから、呼び出しの起点にデータを戻すことが
簡単にはできないという所。値を戻すこと自体がストリーミングの流れに反しているし
かと言ってそれが必要な場合もある。例えば処理した行数をカウントしたりとかね。
なので最近はイベントハンドラ方式を使うようになった
echo "$data" | command "別のなにか(関数名)" (または command "$data" "別のなにか")
例えばだけどこんな感じにして、commandで$dataを1行ずつ処理して
その都度、別のなにか(関数)を呼び出す。そうするとサブシェルにはならないので
ストリーミングで処理しつつ、グローバル変数経由で呼び出し元に結果を返すことができる
この時、別の何かがシェル関数の場合に、commandが外部コマンドだとシェル関数を呼び出せないので
連鎖的にcommandもシェル関数として実装。みたいなこともやってたりする
197デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/05(金) 17:11:32.63ID:bSHFQ9XI0 10. 移植性のあるシェルプログラミング
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
198デフォルトの名無しさん (ワッチョイ 2abe-selW)
2018/10/05(金) 21:16:49.85ID:NK5dBb8n0 >>196
なるほど。
俺は
https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html
ここの3.1.1を読んで、制御文をなるべく使わない方向に開発をシフトしてみたんだよね。
まあどうしても必要な部分はあなたも云ってる通りもちろんあるけど。
なるほど。
俺は
https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html
ここの3.1.1を読んで、制御文をなるべく使わない方向に開発をシフトしてみたんだよね。
まあどうしても必要な部分はあなたも云ってる通りもちろんあるけど。
199デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/06(土) 08:20:34.66ID:Sfai+wMy0 >>198
別にその記事に大きく反対したいわけじゃないけど
おかしな点は指摘しておかないといけない
その手続き型コーディングがステップ数が多く処理効率が低いと書いてある所だが
その原因はストリーミング型コーディングのせいじゃない
rmコマンドの発行回数が原因だ
■手続き型コーディング(ステップ数が多く処理効率が低い)
i=3
while [ $i -le 10000 ]; do
file="file${i}.txt"
rm -f "$file" # 何度もrmコマンドを実行している
i=$((i+3))
done
結果
real 0m3.232s
user 0m2.488s
sys 0m0.808s
■ストリーミング型コーディング
awk 'BEGIN{for(i=3;i<=10000;i+=3){print i;}}' |
sed 's/.*/file&.txt/' |
xargs rm -f
結果
real 0m0.040s
user 0m0.004s
sys 0m0.040s
別にその記事に大きく反対したいわけじゃないけど
おかしな点は指摘しておかないといけない
その手続き型コーディングがステップ数が多く処理効率が低いと書いてある所だが
その原因はストリーミング型コーディングのせいじゃない
rmコマンドの発行回数が原因だ
■手続き型コーディング(ステップ数が多く処理効率が低い)
i=3
while [ $i -le 10000 ]; do
file="file${i}.txt"
rm -f "$file" # 何度もrmコマンドを実行している
i=$((i+3))
done
結果
real 0m3.232s
user 0m2.488s
sys 0m0.808s
■ストリーミング型コーディング
awk 'BEGIN{for(i=3;i<=10000;i+=3){print i;}}' |
sed 's/.*/file&.txt/' |
xargs rm -f
結果
real 0m0.040s
user 0m0.004s
sys 0m0.040s
200デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/06(土) 08:23:22.22ID:Sfai+wMy0 プロセスが分かれており並列で動く可能性があるから
多少ストリーミング型の方が早くはなるとは思うが
以下のように修正すると差は殆ど無くなる。
■手続き型コーディング修正版
i=3
files() {
while [ $i -le 10000 ]; do
file="file${i}.txt"
echo $file
i=$((i+3))
done
}
rm -f $(files)
結果
real 0m0.052s
user 0m0.018s
sys 0m0.044s
余談だがこれはLinuxで実行した結果だがforkが遅いWSLだと
起動プロセスが多い分逆転するかもしれない
多少ストリーミング型の方が早くはなるとは思うが
以下のように修正すると差は殆ど無くなる。
■手続き型コーディング修正版
i=3
files() {
while [ $i -le 10000 ]; do
file="file${i}.txt"
echo $file
i=$((i+3))
done
}
rm -f $(files)
結果
real 0m0.052s
user 0m0.018s
sys 0m0.044s
余談だがこれはLinuxで実行した結果だがforkが遅いWSLだと
起動プロセスが多い分逆転するかもしれない
201デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/06(土) 08:41:27.69ID:Sfai+wMy0 訂正
その手続き型コーディングがステップ数が多く処理効率が低いと書いてある所だが
その原因は手続き型コーディングのせいじゃない
その手続き型コーディングがステップ数が多く処理効率が低いと書いてある所だが
その原因は手続き型コーディングのせいじゃない
202デフォルトの名無しさん (ワッチョイ 2abe-selW)
2018/10/06(土) 10:50:18.29ID:10V4sLOp0 >>200
非本質的だけど
rm -f $(files)とかだとARG_MAXに引っ掛かる可能性がない?
尤も手元の機械では
$ getconf ARG_MAX
2097152
だったので無問題かも知れないけど。
非本質的だけど
rm -f $(files)とかだとARG_MAXに引っ掛かる可能性がない?
尤も手元の機械では
$ getconf ARG_MAX
2097152
だったので無問題かも知れないけど。
203デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/06(土) 11:49:41.89ID:Sfai+wMy0 >>202
> rm -f $(files)とかだとARG_MAXに引っ掛かる可能性がない?
あるよ。それならxargsを使えばいいし、
xargsはファイルから読み込む方法もあるからパイプ使わなくても使える。
ともかく速さの理由はストリーミング型コーディングではないと言いたかっただけ
だいたいawkの中に書いてあるコードは手続き型だろといいたいし、
ステップ数だってちょっと書き方変えれば、大差ないってのがわかるだろう
i=3; while [ $i -le 10000 ]; do rm -f "file${i}.txt"
i=$((i+3)); done
awk 'BEGIN{for(i=3;i<=10000;i+=3){print i;}}' |
sed 's/.*/file&.txt/' |
xargs rm -f
> rm -f $(files)とかだとARG_MAXに引っ掛かる可能性がない?
あるよ。それならxargsを使えばいいし、
xargsはファイルから読み込む方法もあるからパイプ使わなくても使える。
ともかく速さの理由はストリーミング型コーディングではないと言いたかっただけ
だいたいawkの中に書いてあるコードは手続き型だろといいたいし、
ステップ数だってちょっと書き方変えれば、大差ないってのがわかるだろう
i=3; while [ $i -le 10000 ]; do rm -f "file${i}.txt"
i=$((i+3)); done
awk 'BEGIN{for(i=3;i<=10000;i+=3){print i;}}' |
sed 's/.*/file&.txt/' |
xargs rm -f
204デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/07(日) 07:00:55.51ID:9DLOHMhB0 お題
関数fooに対して3つ以上の引数を渡した時、1番目と2番目の引数を入れ替え以下の例のように出力せよ
(引数が3つ未満の場合は考慮する必要はなし)
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
foo 1 2 3 4 5
2
1
3
4
5
レベル1: 引数に使用する文字は英数のみとする
レベル2: 引数にダブルクォート、シングルクォート、スペース、タブが含まれていても動作するようにせよ
関数fooに対して3つ以上の引数を渡した時、1番目と2番目の引数を入れ替え以下の例のように出力せよ
(引数が3つ未満の場合は考慮する必要はなし)
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
foo 1 2 3 4 5
2
1
3
4
5
レベル1: 引数に使用する文字は英数のみとする
レベル2: 引数にダブルクォート、シングルクォート、スペース、タブが含まれていても動作するようにせよ
205デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/07(日) 07:03:41.18ID:9DLOHMhB0 あ、いかん。>>204は簡単な解答があるわw
ちょっと修正する
ちょっと修正する
206デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/07(日) 07:13:43.37ID:9DLOHMhB0 お題(>>204の訂正版)
次のような関数barがある。
bar() { echo 'begin'; printf '%s\n' "$@"; echo 'end'; }
3つ以上の引数を渡した時、1番目と2番目の引数を入れ替えて関数barを呼び出す関数fooを作成し
以下の例のような出力をせよ(引数が3つ未満の場合は考慮する必要はなし)
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
foo 1 2 3 4 5
[出力]
begin
2
1
3
4
5
end
レベル1: 引数に使用する文字は英数のみとする
レベル2: 引数にダブルクォート、シングルクォート、スペース、タブが含まれていても動作するようにせよ
次のような関数barがある。
bar() { echo 'begin'; printf '%s\n' "$@"; echo 'end'; }
3つ以上の引数を渡した時、1番目と2番目の引数を入れ替えて関数barを呼び出す関数fooを作成し
以下の例のような出力をせよ(引数が3つ未満の場合は考慮する必要はなし)
ただし、シェルビルトイン関数のみを使い、変数の使用は禁止とする
(ここでいう変数とはsetコマンドで表示されるもののことである)
foo 1 2 3 4 5
[出力]
begin
2
1
3
4
5
end
レベル1: 引数に使用する文字は英数のみとする
レベル2: 引数にダブルクォート、シングルクォート、スペース、タブが含まれていても動作するようにせよ
207デフォルトの名無しさん (ワッチョイ 1e98-kArq)
2018/10/07(日) 07:18:54.69ID:9DLOHMhB0 余談だが、
func() { printf '%s\n' "begin$@end";} という関数の時、
func 1 2 3 4 5 って書いたら
begin1
2
3
4
5end
func 3 って書いたら
begin3end
って表示されるんだよな。
理解はできるが、なんか不思議だ
func() { printf '%s\n' "begin$@end";} という関数の時、
func 1 2 3 4 5 って書いたら
begin1
2
3
4
5end
func 3 って書いたら
begin3end
って表示されるんだよな。
理解はできるが、なんか不思議だ
208デフォルトの名無しさん (ワッチョイ 969f-vBoO)
2018/10/08(月) 03:36:26.64ID:tKqgyITq0209デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/08(月) 18:41:40.22ID:IMi/szTI0 func -a --foo file1 -b file2 -c --bar
みたいな、オプションとファイル名が交互に来てるときに
オプションを全部解析し終わってから
ファイルに対して処理を実行していくのってけっこう大変なんだな
forで回すのもwhileで回すのも一筋縄ではいかない
もちろんbashなんかの配列を使わないという前提
みたいな、オプションとファイル名が交互に来てるときに
オプションを全部解析し終わってから
ファイルに対して処理を実行していくのってけっこう大変なんだな
forで回すのもwhileで回すのも一筋縄ではいかない
もちろんbashなんかの配列を使わないという前提
210デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/08(月) 18:48:20.63ID:IMi/szTI0 func -a --foo foo1 file1 -b file2 -c --bar
あ、例えば、foo1は--fooはパラメータ、のようなものが有る場合だった
-で始まる or 始まらないだけで見分けるならまだ簡単
あ、例えば、foo1は--fooはパラメータ、のようなものが有る場合だった
-で始まる or 始まらないだけで見分けるならまだ簡単
211デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/08(月) 18:50:15.77ID:NcWFD+EU0 そもそもそんな指定の仕方ありうる?
ありえない状況を想定してヤキモキするのは非生産的だと思うんだけど……。
ありえない状況を想定してヤキモキするのは非生産的だと思うんだけど……。
212デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/08(月) 19:10:00.18ID:IMi/szTI0213デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/08(月) 20:52:36.04ID:NcWFD+EU0214デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/08(月) 21:02:29.11ID:IMi/szTI0 >>213
そういうこと
そういうこと
215デフォルトの名無しさん (ワッチョイ 969f-XQ2D)
2018/10/08(月) 23:31:18.49ID:tKqgyITq0 GNUのgetoptのロングのやつ使えればなんとかなるんじゃないか?
216デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/09(火) 02:27:08.37ID:cJ7fFqob0 これでいいな。
$ getopt --options 'a,b,c' --longoptions 'foo:,bar' -- -a --foo foo1 file1 -b file2 -c --bar
$ getopt --options 'a,b,c' --longoptions 'foo:,bar' -- -a --foo foo1 file1 -b file2 -c --bar
217デフォルトの名無しさん (アウアウカー Sa0a-v2gR)
2018/10/09(火) 02:29:18.52ID:i1ZCVGtYa 195から207まで丸ごと吹っ飛んでんだがどんだけレスバトルしてたんだ
見る気もないが
見る気もないが
218デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/09(火) 07:22:02.82ID:UgeI4/Dm0 >>216
Macでは動きませんでした
Macでは動きませんでした
219デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/09(火) 07:51:19.69ID:cJ7fFqob0220デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/09(火) 07:55:02.13ID:UgeI4/Dm0 >>219
だからMacのgetoptはGNUのgetpotではないから動かないって言ったんだけど?
だからMacのgetoptはGNUのgetpotではないから動かないって言ったんだけど?
221デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/09(火) 07:57:18.12ID:UgeI4/Dm0 GNUのgetoptなら動く。そうでないなら動かないと言われても、
どの環境がGNUのgetoptかなんてわからないでしょう?
GNUのgetoptがほとんどの環境で使われているなら問題ないが
使われてな環境は多いかもしれない。そしてそれがMacという形で
現実になったということを書いたんだけど
どの環境がGNUのgetoptかなんてわからないでしょう?
GNUのgetoptがほとんどの環境で使われているなら問題ないが
使われてな環境は多いかもしれない。そしてそれがMacという形で
現実になったということを書いたんだけど
222デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/09(火) 07:58:09.40ID:cJ7fFqob0223デフォルトの名無しさん (ワッチョイ a798-kArq)
2018/10/09(火) 08:18:38.20ID:UgeI4/Dm0 やはりgetoptは可搬性は皆無か
日本語でgetoptでぐぐるとこれが上の方に出てくるけど
相変わらずの、qiitaクオリティってことでいいのかな?
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
> 一般に 使用される getopt のテンプレートは以下です。
>
> getopt.sh
> set -- 'getopt ad: "$@"'
初っ端からおかしいし。バッククォート書いたつもりが、シングルクォートに化けた?
しかもset --じゃだめだろうと思ってたら、後半では正しい書き方してたが
> OPT=`getopt -o ab:c --long long-a, long-b:,long-c -- "$@"`
> 略
> eval set -- "$OPT"
で、次
> getopt には重大な落とし穴があります。それは、スペースや特殊文字が
> 引数に含まれていた場合、正しく処理できないということです。
特殊文字まではやってないが、スペース入れても普通に動いたんだが?
デフォルトでクォートされてるよな?
man getoptすると「伝統的なgetoptの実装では 〜略〜 空白 〜略〜 使うことができない 〜略〜
この実装ではクォートした出力を生成する」ってことは(この記事で言及できないほど)最近対応したのか?
それはそれとしてクォート方法の指定ができて、shとbash(違いあるの?)があるからシェルごとに
使い分けなきゃいけない気がしていやなんだが
ま、この記事のBSD系ではロングオプション非対応っていうのはgetoptを候補からすばやく外すのには役に立ったなw
GNU版ならもう少し色々できることがわかったが、やはり大変だな。今回は書かなかったがサブコマンド対応とか。
あとgetopt使っても自前処理でもコードの量に大差ないってのはなんなだろう?と前から思っている
日本語でgetoptでぐぐるとこれが上の方に出てくるけど
相変わらずの、qiitaクオリティってことでいいのかな?
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
> 一般に 使用される getopt のテンプレートは以下です。
>
> getopt.sh
> set -- 'getopt ad: "$@"'
初っ端からおかしいし。バッククォート書いたつもりが、シングルクォートに化けた?
しかもset --じゃだめだろうと思ってたら、後半では正しい書き方してたが
> OPT=`getopt -o ab:c --long long-a, long-b:,long-c -- "$@"`
> 略
> eval set -- "$OPT"
で、次
> getopt には重大な落とし穴があります。それは、スペースや特殊文字が
> 引数に含まれていた場合、正しく処理できないということです。
特殊文字まではやってないが、スペース入れても普通に動いたんだが?
デフォルトでクォートされてるよな?
man getoptすると「伝統的なgetoptの実装では 〜略〜 空白 〜略〜 使うことができない 〜略〜
この実装ではクォートした出力を生成する」ってことは(この記事で言及できないほど)最近対応したのか?
それはそれとしてクォート方法の指定ができて、shとbash(違いあるの?)があるからシェルごとに
使い分けなきゃいけない気がしていやなんだが
ま、この記事のBSD系ではロングオプション非対応っていうのはgetoptを候補からすばやく外すのには役に立ったなw
GNU版ならもう少し色々できることがわかったが、やはり大変だな。今回は書かなかったがサブコマンド対応とか。
あとgetopt使っても自前処理でもコードの量に大差ないってのはなんなだろう?と前から思っている
224デフォルトの名無しさん (ワッチョイ b064-selW)
2018/10/09(火) 13:51:30.72ID:cJ7fFqob0 parsargコマンドみたいなのを再発明したほうが早いかもね
GNU getoptと同じ(もしくはもうちょっと拡張)挙動でかつ可搬なのを。
GNU getoptと同じ(もしくはもうちょっと拡張)挙動でかつ可搬なのを。
225デフォルトの名無しさん (スッップ Sdff-ehAa)
2018/10/15(月) 14:55:49.61ID:Q15q2Q7Cd 質問しようと思ったけど初心者の俺にはレベル高い話ばかりで恥ずかしいぜ、、
226デフォルトの名無しさん (ワッチョイ 7f98-9/x8)
2018/10/15(月) 15:15:36.15ID:9UZy+Ppr0 どうぞどうぞ
227デフォルトの名無しさん (スッップ Sdff-ehAa)
2018/10/15(月) 15:50:29.54ID:Q15q2Q7Cd ありがとう
やりたいことは、環境を判定して対象の環境にある複数サーバーに対して一括でコマンド発行したい、です
条件
・A環境とB環境があり、引数でそれぞれ指定し(test.sh A のようにしたい)、シェルスクリプト側でどちらが入力されたか判定する
・サーバーにssh接続するためのIPアドレス等は外部ファイルに記載されているため、環境判定後にファイルを読み込んでsshアクセスする必要がある
・サーバーは両環境それぞれ25台ずつあるが、5台ずつコマンドを発行し、waitしてからまた5台と、塊毎にやりたい
質問1
外部ファイルの指定方法が分からないです
ifで環境を判定してthenの後にファイルを指定すれば良いのか?
質問2
5台ずつ、を実現するためにはwhileで良いのか?
そもそも、sshをまとめてやって後からそれらにコマンド発行ってできるのか
初歩的すぎて恥ずかしい限りですがお願いします
やりたいことは、環境を判定して対象の環境にある複数サーバーに対して一括でコマンド発行したい、です
条件
・A環境とB環境があり、引数でそれぞれ指定し(test.sh A のようにしたい)、シェルスクリプト側でどちらが入力されたか判定する
・サーバーにssh接続するためのIPアドレス等は外部ファイルに記載されているため、環境判定後にファイルを読み込んでsshアクセスする必要がある
・サーバーは両環境それぞれ25台ずつあるが、5台ずつコマンドを発行し、waitしてからまた5台と、塊毎にやりたい
質問1
外部ファイルの指定方法が分からないです
ifで環境を判定してthenの後にファイルを指定すれば良いのか?
質問2
5台ずつ、を実現するためにはwhileで良いのか?
そもそも、sshをまとめてやって後からそれらにコマンド発行ってできるのか
初歩的すぎて恥ずかしい限りですがお願いします
228デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
2018/10/15(月) 15:55:57.71ID:oz1FOCTra どうぞどうぞ
229デフォルトの名無しさん (スッップ Sdff-ehAa)
2018/10/15(月) 16:39:55.24ID:Q15q2Q7Cd230デフォルトの名無しさん (ワッチョイ 7f98-9/x8)
2018/10/15(月) 16:43:11.45ID:9UZy+Ppr0 どういたしまして
231デフォルトの名無しさん (ブーイモ MM0b-LEUL)
2018/10/15(月) 18:26:03.30ID:A4+xGAqjM 僕にも感謝して
232デフォルトの名無しさん (アウアウカー Sa7b-GU/K)
2018/10/15(月) 18:56:32.85ID:3C5NcaRXa >>229
どうやることにしたの?
どうやることにしたの?
233デフォルトの名無しさん (ワッチョイ e776-jM1k)
2018/10/15(月) 20:03:34.75ID:dTacK6h30 ssh ... [command] ができるのがわかったとかじゃないのかな
234デフォルトの名無しさん (ワッチョイ 27eb-ehAa)
2018/10/15(月) 21:27:00.70ID:0gVRdy5i0 >>232
233の言うとおりです
opensshのマニュアル呼んだら、ファイル指定もコマンド発行方法も書いてあったので、それでやることに
あとはifとの組み合わせで頑張ります
まぁつまずいてるんだけど
233の言うとおりです
opensshのマニュアル呼んだら、ファイル指定もコマンド発行方法も書いてあったので、それでやることに
あとはifとの組み合わせで頑張ります
まぁつまずいてるんだけど
235デフォルトの名無しさん (ワッチョイ 07e0-SmB1)
2018/10/15(月) 21:32:13.05ID:E6pr56BO0 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
236デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 12:14:09.96ID:/ofNkRJS0 ksh、関数のオーバーライド、くせっていうかバグあるわ
(foo() { echo 1; }; foo; (foo() { echo 2; }; foo;); foo)
何度実行しても1 2 1 と表示される(想定通り)
foo() { echo 1; }; foo; (foo() { echo 2; }; foo;); foo
最初の1回は1 2 1 と表示されるが、
2回目以降は1 1 1 としか表示されない(2でオーバーライドできなくなる)
(foo() { echo 1; }; foo; (foo() { echo 2; }; foo;); foo)
何度実行しても1 2 1 と表示される(想定通り)
foo() { echo 1; }; foo; (foo() { echo 2; }; foo;); foo
最初の1回は1 2 1 と表示されるが、
2回目以降は1 1 1 としか表示されない(2でオーバーライドできなくなる)
237デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 12:32:51.57ID:/ofNkRJS0 もう一つ。kshで関数の定義の場所でオーバーライドできない
場合があるんだが原因がよくわからない。
多分これ関連なんだろうけど
https://github.com/modernish/modernish/blob/master/libexec/modernish/cap/BUG_FNSUBSH.t
これはメインシェルの定義がある場合、サブシェルの中での定義が無視されるということだから、
サブシェルの中で定義していれば、その中のサブシェルではオーバーライドできると解釈できる
たしかに>>236はそのとおりの動きはしてる
もう一つの問題も同じなんだろうか、定義の順番を変えればうまくいくんだが
サブシェルに関しては定義の順番を変えても同じだと思うんだけどなぁ。
.コマンドを使ってるのが関係してるのかなんだこりゃって感じだ
場合があるんだが原因がよくわからない。
多分これ関連なんだろうけど
https://github.com/modernish/modernish/blob/master/libexec/modernish/cap/BUG_FNSUBSH.t
これはメインシェルの定義がある場合、サブシェルの中での定義が無視されるということだから、
サブシェルの中で定義していれば、その中のサブシェルではオーバーライドできると解釈できる
たしかに>>236はそのとおりの動きはしてる
もう一つの問題も同じなんだろうか、定義の順番を変えればうまくいくんだが
サブシェルに関しては定義の順番を変えても同じだと思うんだけどなぁ。
.コマンドを使ってるのが関係してるのかなんだこりゃって感じだ
238デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 12:40:28.86ID:/ofNkRJS0 もう一つの問題は、ちょっとコードが入り組んでて調べるのが面倒くさい。
なんでこれで解決したのかわかってない状況だが、今のところ動いているので
まあなにかわかったら書くよw
なんでこれで解決したのかわかってない状況だが、今のところ動いているので
まあなにかわかったら書くよw
239デフォルトの名無しさん (スッップ Sd8a-YVHm)
2018/10/18(木) 16:05:20.75ID:q7k/ngFed 初心者です、while文の質問です
このようなスクリプトがあったとします
a=0
while [ $a -le 50 ]
do
a=`expr $a +1`
echo "${a}個目
done
とやると、50個目まで表示されると思いますが、この数値が5の倍数の時だけ、echoで表示させたあとsleepを入れるようにするには、contiuneを使えばよい?
それともifでやる?
よくわからず
このようなスクリプトがあったとします
a=0
while [ $a -le 50 ]
do
a=`expr $a +1`
echo "${a}個目
done
とやると、50個目まで表示されると思いますが、この数値が5の倍数の時だけ、echoで表示させたあとsleepを入れるようにするには、contiuneを使えばよい?
それともifでやる?
よくわからず
240デフォルトの名無しさん (アウアウカー Safb-nHS7)
2018/10/18(木) 16:38:15.26ID:hfM3a7YWa >>239
continue はループ内のその後の処理を飛ばすやつだからできないと思うが。
普通に if 使ってやるしかないのでは?
if [ `expr $a % 5` -eq 0 ] ; then sleep 1 ; fi
とか、done の直前に入れる。
continue はループ内のその後の処理を飛ばすやつだからできないと思うが。
普通に if 使ってやるしかないのでは?
if [ `expr $a % 5` -eq 0 ] ; then sleep 1 ; fi
とか、done の直前に入れる。
241デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 17:31:05.73ID:/ofNkRJS0242デフォルトの名無しさん (アウアウカー Safb-nHS7)
2018/10/18(木) 17:40:57.72ID:hfM3a7YWa あ。そうか。なるほど。
243デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 17:41:55.70ID:/ofNkRJS0 ついでだから書いておくと、
a=`expr $a +1` でも大差ないだろ?と思った人
WSLの酷さがわかるぞ
たった50回のループ、sleepを行わない状態で
a=$((a+1)) だと 約0.025秒なのに、
a=`expr $a +1` だと 約0.5秒にもなるのだ
10000回のループだと
a=$((a+1)) だと 約0.1秒のところ、
a=`expr $a +1` だと 約90秒
早くWSLのfokの遅さが解決すると良いな
a=`expr $a +1` でも大差ないだろ?と思った人
WSLの酷さがわかるぞ
たった50回のループ、sleepを行わない状態で
a=$((a+1)) だと 約0.025秒なのに、
a=`expr $a +1` だと 約0.5秒にもなるのだ
10000回のループだと
a=$((a+1)) だと 約0.1秒のところ、
a=`expr $a +1` だと 約90秒
早くWSLのfokの遅さが解決すると良いな
244デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 17:43:58.54ID:/ofNkRJS0 × [ $(($a % 5)) = 0 ] && sleep 1
○ [ $((a % 5)) = 0 ] && sleep 1
書き込む前に気づいて直したと思ったんだがコピペミスったか
上でも動かないわけではない。無駄なだけ
○ [ $((a % 5)) = 0 ] && sleep 1
書き込む前に気づいて直したと思ったんだがコピペミスったか
上でも動かないわけではない。無駄なだけ
245デフォルトの名無しさん (ワッチョイ 6a7c-fIkj)
2018/10/18(木) 17:56:39.61ID:uRBurQVb0 > [ $((a % 5)) = 0 ]
新旧混ぜんなw
arithmetic使うなら、そのままevaluation記法にしてしまえばいい。
((...))
あと、旧testでの数値比較は-eqを使え。
新旧混ぜんなw
arithmetic使うなら、そのままevaluation記法にしてしまえばいい。
((...))
あと、旧testでの数値比較は-eqを使え。
246デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 18:24:07.81ID:/ofNkRJS0247デフォルトの名無しさん (ワッチョイ 6a7c-fIkj)
2018/10/18(木) 18:35:46.85ID:uRBurQVb0 ((a % 5 == 0))&& ...
なんで一々ここまで言わんとわからんような奴が、他人の指摘しているんだろうかね。。。
-eqでの数値比較とか基本中の基本だろうに。
なんで一々ここまで言わんとわからんような奴が、他人の指摘しているんだろうかね。。。
-eqでの数値比較とか基本中の基本だろうに。
248デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 18:50:03.03ID:/ofNkRJS0 >>247
$ dash -c 'a=0; ((a % 5 == 0)) && echo ok'
dash: 1: a: not found
$ dash -c 'a=0; (($a % 5 == 0)) && echo ok'
dash: 1: 0: Permission denied
なぜかって?
その書き方はPOSIX準拠じゃないもの
https://github.com/koalaman/shellcheck/wiki/SC2039#standalone-
$ dash -c 'a=0; ((a % 5 == 0)) && echo ok'
dash: 1: a: not found
$ dash -c 'a=0; (($a % 5 == 0)) && echo ok'
dash: 1: 0: Permission denied
なぜかって?
その書き方はPOSIX準拠じゃないもの
https://github.com/koalaman/shellcheck/wiki/SC2039#standalone-
249デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 18:56:56.93ID:/ofNkRJS0 動かないコード出されて、偉そうにされても
やれやれって言うしか無いわなw
やれやれって言うしか無いわなw
250デフォルトの名無しさん (アウアウカー Safb-nHS7)
2018/10/18(木) 19:33:42.29ID:9i8IzX+1a (( )) ではなく [[ ]] では?
251デフォルトの名無しさん (ワッチョイ 7b98-usPd)
2018/10/18(木) 19:37:12.04ID:/ofNkRJS0 [[ ]] もPOSIX準拠ではない
252デフォルトの名無しさん (アウアウカー Safb-6CEe)
2018/10/18(木) 22:39:25.80ID:3W2GDYvfa またぽっじくすか
253デフォルトの名無しさん (ワッチョイ dbeb-YVHm)
2018/10/19(金) 00:21:19.12ID:0zKHBU8T0254デフォルトの名無しさん (ワッチョイ 26e7-iIDB)
2018/10/19(金) 01:23:10.99ID:JmLVta5V0 cat file.txt | ( head; tail) は最高
255デフォルトの名無しさん (ワッチョイ f398-usPd)
2018/10/20(土) 02:22:05.90ID:V0y1IBp60 >>224
> parsargコマンドみたいなのを再発明したほうが早いかもね
違うもの調べてて、こういうのを見つけた。
見つけたってだけでどんなものかは調べていない
http://zentoo.hatenablog.com/entry/20110708/1310124831
> ちょっとした理由でgit-flow (https://github.com/nvie/gitflow) のソースを
> ちょっとちょっと眺めていたんだけど、内部でコマンドライン引数を
> パースするためにshflagsというツールが使われていたのでメモ。
> parsargコマンドみたいなのを再発明したほうが早いかもね
違うもの調べてて、こういうのを見つけた。
見つけたってだけでどんなものかは調べていない
http://zentoo.hatenablog.com/entry/20110708/1310124831
> ちょっとした理由でgit-flow (https://github.com/nvie/gitflow) のソースを
> ちょっとちょっと眺めていたんだけど、内部でコマンドライン引数を
> パースするためにshflagsというツールが使われていたのでメモ。
256デフォルトの名無しさん (ワッチョイ db8a-2XJB)
2018/10/20(土) 06:26:18.72ID:EzXK/x1W0 >>254
おまえらなんでそんなに猫が好きなん?
おまえらなんでそんなに猫が好きなん?
257デフォルトの名無しさん (ワッチョイ 3bfb-6CEe)
2018/10/20(土) 12:30:19.19ID:o8LOHz9N0 それを疑問に思う人間に説明するのは困難だ
258デフォルトの名無しさん (オッペケ Srb3-iHQf)
2018/10/20(土) 12:37:11.93ID:MzLaXRRvr 猫好きてそんなに言語化しにくい複雑怪奇な感情持っとるんか?
259デフォルトの名無しさん (ワッチョイ 3bfb-6CEe)
2018/10/20(土) 12:43:08.81ID:o8LOHz9N0 例えば女をみて欲情しない人間に、なぜ欲情するのかを説明するのは難しいだろう
言葉を並べるだけなら本能だとか体の特徴なんかを言えるが、共感はされまい
つまりそれを疑問に感じる人間には、その時点ですでに納得させる言葉がないのだ
言葉を並べるだけなら本能だとか体の特徴なんかを言えるが、共感はされまい
つまりそれを疑問に感じる人間には、その時点ですでに納得させる言葉がないのだ
260デフォルトの名無しさん (オッペケ Srb3-iHQf)
2018/10/20(土) 12:48:37.62ID:MzLaXRRvr でもそもそも説明するのが困難なのやろ?
おまえが言ったんやで
おまえが言ったんやで
261デフォルトの名無しさん (ワッチョイ f398-usPd)
2018/10/20(土) 12:55:36.75ID:V0y1IBp60 おい、スレと無関係な話をして荒らすな
262デフォルトの名無しさん (ワッチョイ 3bfb-6CEe)
2018/10/20(土) 12:56:11.89ID:o8LOHz9N0 なぜ説明するのが困難かを説明したつもりだったんだが
263デフォルトの名無しさん (ワッチョイ f398-usPd)
2018/10/20(土) 13:01:22.08ID:V0y1IBp60264デフォルトの名無しさん (ワッチョイ 2aa2-k6PT)
2018/10/20(土) 14:52:07.13ID:ZWcyeiuM0 お前がつまんねーんだよ
265デフォルトの名無しさん (アウアウカー Safb-6CEe)
2018/10/20(土) 14:54:50.53ID:2nu5r9gua なんかレス番飛んだけどなんだこれ
266デフォルトの名無しさん (ワッチョイ db8a-2XJB)
2018/10/20(土) 16:25:12.28ID:EzXK/x1W0267デフォルトの名無しさん (ワッチョイ 2aa2-k6PT)
2018/10/20(土) 17:00:11.18ID:ZWcyeiuM0 なんか遠いレスの番号という意味じゃないの。てか、なんで噛み付いているんだか
268デフォルトの名無しさん (アウアウカー Safb-6CEe)
2018/10/20(土) 17:06:13.46ID:T0X8nuYVa ワッチョイ変わったのになんでNG効いてんだ?と思ったら課題マンだったのか
269デフォルトの名無しさん (ワッチョイ ea98-usPd)
2018/10/21(日) 03:41:54.16ID:dQhyPQp/0 あるパスがディレクトリで書き込み可能かは、[ -d "$path" ] とか [ -w "$path" ] で調べられるし、
所有者が自分自身であるかは-Gや-Oで調べられますが、
自分以外が読み書き不可能であることをチェックするにはどうしたら良いですかね?
所有者が自分自身であるかは-Gや-Oで調べられますが、
自分以外が読み書き不可能であることをチェックするにはどうしたら良いですかね?
270デフォルトの名無しさん (ワッチョイ db8a-2XJB)
2018/10/21(日) 05:19:47.73ID:C+Apg5Hi0 ls
271デフォルトの名無しさん (ワッチョイ ea98-usPd)
2018/10/21(日) 05:42:25.02ID:dQhyPQp/0 やっぱlsしかないですかね。
このフォーマットって仕様化されてるんですよね
このフォーマットって仕様化されてるんですよね
272デフォルトの名無しさん (ワッチョイ aebe-fIkj)
2018/10/21(日) 06:29:17.52ID:9NX69mCX0 >>271
pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html#tag_20_73_10
pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html#tag_20_73_10
273デフォルトの名無しさん (ワッチョイ ea98-usPd)
2018/10/21(日) 06:34:56.07ID:dQhyPQp/0 ありがとう。だがオプション多すぎて読むのだりぃw
なんでだろ?どうもlsって解析する気にならないんだよな
人間向けのフォーマットでコンピュータが解釈するのに向いてない感じがしている
どこまでPOSIXで仕様化されてるのか、どこからが拡張なのか、オプション多すぎて(略
関係ないけど、ふと本棚を見たら
「lsを読まずにプログラマを名乗るな!」という本があったw
そういや買ったっけ(未読)
なんでだろ?どうもlsって解析する気にならないんだよな
人間向けのフォーマットでコンピュータが解釈するのに向いてない感じがしている
どこまでPOSIXで仕様化されてるのか、どこからが拡張なのか、オプション多すぎて(略
関係ないけど、ふと本棚を見たら
「lsを読まずにプログラマを名乗るな!」という本があったw
そういや買ったっけ(未読)
274デフォルトの名無しさん (ワッチョイ 2aa2-k6PT)
2018/10/21(日) 06:42:08.88ID:xQoMnSHc0 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html
STDOUTに記述があるんだからそうじゃね
STDOUTに記述があるんだからそうじゃね
275デフォルトの名無しさん (ワッチョイ 2aa2-k6PT)
2018/10/21(日) 06:42:50.73ID:xQoMnSHc0 あら被りすぎた。すまん
276デフォルトの名無しさん (ワッチョイ 2aa2-k6PT)
2018/10/21(日) 06:45:46.73ID:xQoMnSHc0 >>273
>>272はPOSIXの仕様。>>269,270,271の目的には
If the -l option is specified, the following information shall be written for files other than character special and block special files:
と
If the -l option is specified, the following information shall be written for character special and block special files:
で書いてあるフォーマットだけだけどね
>>272はPOSIXの仕様。>>269,270,271の目的には
If the -l option is specified, the following information shall be written for files other than character special and block special files:
と
If the -l option is specified, the following information shall be written for character special and block special files:
で書いてあるフォーマットだけだけどね
277デフォルトの名無しさん (ワッチョイ ea98-usPd)
2018/10/21(日) 07:33:05.64ID:dQhyPQp/0 そういや、macだとlsで
drwxr-xr-x+ や
drwxr-xr-x@ みたいに
後ろになにかくっついていることがあるな
> Implementations may add other characters to this list to represent other implementation-defined file types.
くっつけても良いってことなのか?
drwxr-xr-x+ や
drwxr-xr-x@ みたいに
後ろになにかくっついていることがあるな
> Implementations may add other characters to this list to represent other implementation-defined file types.
くっつけても良いってことなのか?
278デフォルトの名無しさん (ワッチョイ db8a-2XJB)
2018/10/21(日) 11:22:28.24ID:C+Apg5Hi0 これだからマカーは馬鹿だと言われるんだなあ...
279デフォルトの名無しさん (アウアウウー Sa9f-L0SM)
2018/10/21(日) 20:00:09.31ID:0dWokXAIa stat コマンドの出力解析した方が楽ではないか?
または find コマンドの -perm 利用してチェックして -exec でやらせたいことをやらせる。
または find コマンドの -perm 利用してチェックして -exec でやらせたいことをやらせる。
280デフォルトの名無しさん (ワッチョイ ea98-usPd)
2018/10/21(日) 20:21:13.14ID:dQhyPQp/0281デフォルトの名無しさん (ワッチョイ f364-qPjg)
2018/10/21(日) 22:04:44.47ID:8BH3p2hm0 標準入力の代わりにfileの内容を入力するのに、リダイレクトで
$ <file somecmd
とやる方式ってPOSIXで既定されてるっけ。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_01
このへんに書いてそうなんだけど、それっぽい記述がない?
$ <file somecmd
とやる方式ってPOSIXで既定されてるっけ。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_01
このへんに書いてそうなんだけど、それっぽい記述がない?
282デフォルトの名無しさん (ワッチョイ 269f-nBLa)
2018/10/22(月) 02:54:50.03ID:HyPH6OEy0 >>280
じゃ、find で。
ファイルのパーミッションに 066 を and した時に 0 になるやつでいいのなら
find $dir -prune ! -perm -40 ! -perm -20 ! -perm -4 ! -perm -2 -exec やらせたいこと \;
のようにすればいいのではないかな。
http://pubs.opengroup.org/onlinepubs/9699919799/ で find コマンド見てみたら -perm はあるようなので。
もし GNU の find コマンド使えるようなら -perm /mode が使えて、これは何れかのビットが立っていれば
真になるので ! -perm /66 の一つで出来ると思う。
じゃ、find で。
ファイルのパーミッションに 066 を and した時に 0 になるやつでいいのなら
find $dir -prune ! -perm -40 ! -perm -20 ! -perm -4 ! -perm -2 -exec やらせたいこと \;
のようにすればいいのではないかな。
http://pubs.opengroup.org/onlinepubs/9699919799/ で find コマンド見てみたら -perm はあるようなので。
もし GNU の find コマンド使えるようなら -perm /mode が使えて、これは何れかのビットが立っていれば
真になるので ! -perm /66 の一つで出来ると思う。
283デフォルトの名無しさん (ワッチョイ db8a-2XJB)
2018/10/22(月) 03:01:30.80ID:1Kkbm3du0 GNUのfind使っていいという条件なら、GNUのlsやstatでいいじゃんw
284名無しさん@そうだ選挙に行こう! Go to vote! (アウアウウー Sa9f-L0SM)
2018/10/22(月) 10:18:21.67ID:8WYgXfgna その辺はご自由に。POSIX縛りがあってもこの場合にfindも使えるってだけの話なので。ls使いたいならそうすればいい。
285デフォルトの名無しさん (ワッチョイ f364-qPjg)
2018/10/22(月) 14:51:33.47ID:JUwIDQm90 >>281
これ分かる方います?
これ分かる方います?
286デフォルトの名無しさん (JP 0H1b-v9b0)
2018/10/22(月) 16:55:54.61ID:9s+yFzz3H >>281
2.1の5で、リダイレクトの処理をしてパラメーターリストから
除去するって書いてあるのと、
6でコマンド名を第0パラメーターとして渡すって書いてるってことは、
先頭もパラメーターリストの一部と解釈できるから、
暗に、先頭にリダイレクトがあってもいいってことを表してるんでは?
2.1の5で、リダイレクトの処理をしてパラメーターリストから
除去するって書いてあるのと、
6でコマンド名を第0パラメーターとして渡すって書いてるってことは、
先頭もパラメーターリストの一部と解釈できるから、
暗に、先頭にリダイレクトがあってもいいってことを表してるんでは?
287デフォルトの名無しさん (ガックシ 06e6-fIkj)
2018/10/22(月) 19:08:52.43ID:WU2zxBnF6288デフォルトの名無しさん (ガックシ 06e6-fIkj)
2018/10/22(月) 19:09:38.93ID:WU2zxBnF6 あ、ワッチョイもIDも違うけど>>285です。
289デフォルトの名無しさん (ワッチョイ ea98-Pr2h)
2018/10/22(月) 21:35:03.82ID:oF7wf0Ce0 >>118
それはオブジェクト指向の話じゃない
C++の話だ
そもそもテンプレートやジェネリックは、型を明確にすることでバグを少なくしたり
速度を速くするためのもので、オブジェクト指向における問題点を解決するための追加機能
テンプレートやジェネリックを使うことでオブジェクト指向が不要になるのではなく
オブジェクト指向と組み合わせて使うことで問題点が改善される
テンプレートはオブジェクト指向と組み合わせずに使えたと思うが、
テンプレートの殆ど(ジェネリックは全て)はオブジェクト指向なしに使うことはできない
それはオブジェクト指向の話じゃない
C++の話だ
そもそもテンプレートやジェネリックは、型を明確にすることでバグを少なくしたり
速度を速くするためのもので、オブジェクト指向における問題点を解決するための追加機能
テンプレートやジェネリックを使うことでオブジェクト指向が不要になるのではなく
オブジェクト指向と組み合わせて使うことで問題点が改善される
テンプレートはオブジェクト指向と組み合わせずに使えたと思うが、
テンプレートの殆ど(ジェネリックは全て)はオブジェクト指向なしに使うことはできない
290デフォルトの名無しさん (ワッチョイ ea98-usPd)
2018/10/22(月) 21:47:50.25ID:oF7wf0Ce0 あ、書き込まれてないと思ったら書き込む場所間違えてたのかw
291デフォルトの名無しさん (ワッチョイ ea98-usPd)
2018/10/22(月) 23:23:26.53ID:oF7wf0Ce0292デフォルトの名無しさん (アウアウウー Sa9f-L0SM)
2018/10/23(火) 13:27:19.16ID:QwHjyvjPa シェルというか tar コマンドの問題なんだけど、tar tvf でアーカイブに入っているファイルのタイムスタンプを秒単位まで出す方法ある?
Linux で GNU tar のmanページ見た感じではなさそうなんだけど、やはり自作するしかないなかな。
Linux で GNU tar のmanページ見た感じではなさそうなんだけど、やはり自作するしかないなかな。
293デフォルトの名無しさん (ワッチョイ 2a23-8h48)
2018/10/23(火) 14:12:45.60ID:mYtscksw0 >>292
tar --full-time ...
tar --full-time ...
294デフォルトの名無しさん (アウアウウー Sa9f-L0SM)
2018/10/23(火) 14:38:56.39ID:QwHjyvjPa >>293
おお!ありがとう。新しい GNU tar にあるね。
最初CentOS6で試しててわからなかった。これは GNU tar 1.23 だ。
CentOS7は GNU tar 1.26 になっててこちらでは出来るしmanページにも書いてあった。
おお!ありがとう。新しい GNU tar にあるね。
最初CentOS6で試しててわからなかった。これは GNU tar 1.23 だ。
CentOS7は GNU tar 1.26 になっててこちらでは出来るしmanページにも書いてあった。
295デフォルトの名無しさん (ワッチョイ f364-qPjg)
2018/10/23(火) 15:22:22.26ID:cKF5Z2eR0 CentOS 6はそろそろサポート切れるんじゃないかしら
余計なお世話だが移行したほうがいいんでは
余計なお世話だが移行したほうがいいんでは
296デフォルトの名無しさん (アウアウウー Sa9f-L0SM)
2018/10/23(火) 15:35:42.08ID:QwHjyvjPa >>295
するする。仕事でRHEL6のサーバ使っててそれの一部をテストする時に使ってただけなので。
するする。仕事でRHEL6のサーバ使っててそれの一部をテストする時に使ってただけなので。
297デフォルトの名無しさん (ワッチョイ 7b32-JHIh)
2018/10/25(木) 13:45:54.07ID:7aRL1OkY0 すごい低レベルな質問で申し訳ないんだけど、
win用のGit-bashで.shファイルダブルクリックしたときに
DOS窓出さないで実行するのってどうすればいい?
win用のGit-bashで.shファイルダブルクリックしたときに
DOS窓出さないで実行するのってどうすればいい?
298デフォルトの名無しさん (アウアウウー Sa5d-hDoO)
2018/10/25(木) 14:43:08.46ID:hw/Q19JUa >>297
それもはやシェルかどうか関係なくてWindows固有の問題だと思うが、エクスプローラでそのファイル右クリックしてプロパティ出したらそんな感じの設定できるようになってない?
最小化した状態で実行するとか、そんなやつ。
それもはやシェルかどうか関係なくてWindows固有の問題だと思うが、エクスプローラでそのファイル右クリックしてプロパティ出したらそんな感じの設定できるようになってない?
最小化した状態で実行するとか、そんなやつ。
299デフォルトの名無しさん (アウアウウー Sa5d-hDoO)
2018/10/25(木) 14:51:54.06ID:hw/Q19JUa こうだ。
まずショートカット作り、そのショートカットのプロパティ出すと実行時の大きさを指定できる所があって、そこを最小化にすると実行時にタスクバーにアイコン出ているだけになる。
まずショートカット作り、そのショートカットのプロパティ出すと実行時の大きさを指定できる所があって、そこを最小化にすると実行時にタスクバーにアイコン出ているだけになる。
300デフォルトの名無しさん (ワッチョイ 7b32-JHIh)
2018/10/25(木) 16:15:39.89ID:7aRL1OkY0301デフォルトの名無しさん (ワッチョイ 9764-Ed1r)
2018/10/26(金) 22:15:40.17ID:ScQN6FWl0 ファイルや標準出力の行数がある数値より大きいことをできるだけ高速に確かめるにはどうすればいいだろう
最も単純で最もUNIXっぽいのは
$ test $(<file.txt wc -l) -gt $num
としてその真偽を見ることだけど
$ test $( (yes | head -n 3000000000000000000) | wc -l) -lt 300
こういうのを実行して貰えれば分かると思うがかなり時間が掛かる
俺の使ってる計算機はそこそこ良い性能(Intel Xeon x2/32GiB RAMなのだが)
それでも実行に1分強掛かった。
しかしこれは無駄だ。なぜなら結局比較する対象は300なのだから、「300行以上ある」ことが分かればいい。
なにか案ありませんかね。
思ったのはsed -n -e '300p'とかでその失敗判定を見るとかだが,これはsedコマンドの失敗の要因が他にもあるので
ちょっと不安定かなと。
最も単純で最もUNIXっぽいのは
$ test $(<file.txt wc -l) -gt $num
としてその真偽を見ることだけど
$ test $( (yes | head -n 3000000000000000000) | wc -l) -lt 300
こういうのを実行して貰えれば分かると思うがかなり時間が掛かる
俺の使ってる計算機はそこそこ良い性能(Intel Xeon x2/32GiB RAMなのだが)
それでも実行に1分強掛かった。
しかしこれは無駄だ。なぜなら結局比較する対象は300なのだから、「300行以上ある」ことが分かればいい。
なにか案ありませんかね。
思ったのはsed -n -e '300p'とかでその失敗判定を見るとかだが,これはsedコマンドの失敗の要因が他にもあるので
ちょっと不安定かなと。
302デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
2018/10/26(金) 23:12:31.32ID:7cGNdWT70 cで指定行読むコマンドを作ればいい
面倒なこといちいち考える必要がそもそもない
面倒なこといちいち考える必要がそもそもない
303デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/26(金) 23:41:06.71ID:E+2rE/Ml0 >>301
headで300行読み込めば?
headで300行読み込めば?
304デフォルトの名無しさん (ワッチョイ 5b5b-F79V)
2018/10/27(土) 00:04:40.31ID:GbJLfo150 sed -n 300pでもええんか?
305デフォルトの名無しさん (ワッチョイ 9764-Ed1r)
2018/10/27(土) 00:13:24.42ID:BbyQQXdF0306デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 00:29:51.71ID:4RrrP6U60307デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 00:37:07.31ID:4RrrP6U60 あれ?できなかったか?
308デフォルトの名無しさん (ワッチョイ 9764-Ed1r)
2018/10/27(土) 01:15:41.17ID:BbyQQXdF0 GNU headだとどうか知らないが
POSIX headだと無理
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/head.html
POSIX headだと無理
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/head.html
309デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 01:23:00.95ID:4RrrP6U60 シェルスクリプトでループで回しながら数えるのと
headで300行とってきて、wcで300行数えるのってどっちが速いんだろうかね
やればすぐわかるけど、やる気起きないなぁw
headで300行とってきて、wcで300行数えるのってどっちが速いんだろうかね
やればすぐわかるけど、やる気起きないなぁw
310デフォルトの名無しさん (ワッチョイ 5b9f-3knh)
2018/10/27(土) 04:24:55.28ID:QwPOuwmq0 >>309
シェルスクリプトだとインタープリタの言語みたいな動きになるので遅そうなイメージはあるな。但しうまいこと内部で最適化されれば速くなるかもね。
シェルスクリプトだとインタープリタの言語みたいな動きになるので遅そうなイメージはあるな。但しうまいこと内部で最適化されれば速くなるかもね。
311デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 08:30:31.93ID:4RrrP6U60 >>310
いうてもループとカウントと条件分岐だけだからなぁ
内部的にはインタプリタ解釈後の状態になってるだろうし
そこでCPUは食わない気がする
でもheadでとってきてwcでカウントの部分は並列で実行できるわけで
マルチコアなら当然のことながら、シングルコアでもファイルから読み取りの方が
遅いからwcで待たされることはなさそう
どちらが速いかは微妙な所だなw
いうてもループとカウントと条件分岐だけだからなぁ
内部的にはインタプリタ解釈後の状態になってるだろうし
そこでCPUは食わない気がする
でもheadでとってきてwcでカウントの部分は並列で実行できるわけで
マルチコアなら当然のことながら、シングルコアでもファイルから読み取りの方が
遅いからwcで待たされることはなさそう
どちらが速いかは微妙な所だなw
312デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/27(土) 09:05:32.40ID:94jXB05x0 awkでいいんじゃないの
313デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
2018/10/27(土) 09:08:24.86ID:S4VvuAVS0 ファイルの先頭からLFの数を数えるだけのことを
ああでもこうでもないと
いちいち考えないといけないオツムのデキを疑うわ。。。
ああでもこうでもないと
いちいち考えないといけないオツムのデキを疑うわ。。。
314デフォルトの名無しさん (オッペケ Sref-9p2Q)
2018/10/27(土) 09:14:33.78ID:EI3TCK5cr ループってreadのループ?
catからパイプしてwhileのreadループってどうなんだっけ
昔作ったシェルでcatしてたファイルを処理中に書き換えたけど
実行されてる処理では書き換える前の内容で処理されてたみたいだから
どこかメモリに展開されてるんじゃ
catからのパイプでプロセスが終わってるからか?
でもリダイレクトやヒアドキュメントでも同じじゃないの?
catからパイプしてwhileのreadループってどうなんだっけ
昔作ったシェルでcatしてたファイルを処理中に書き換えたけど
実行されてる処理では書き換える前の内容で処理されてたみたいだから
どこかメモリに展開されてるんじゃ
catからのパイプでプロセスが終わってるからか?
でもリダイレクトやヒアドキュメントでも同じじゃないの?
315デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
2018/10/27(土) 09:24:18.83ID:S4VvuAVS0 低学歴知恵遅れの思考形態、世界では
すでに用意されているコマンドを組み合わせてシェルスクリプトを書くことが
シェルスクリプトを書くことになるという決まりがあるのが
このスレみてると分かる
すでに用意されているコマンドを組み合わせてシェルスクリプトを書くことが
シェルスクリプトを書くことになるという決まりがあるのが
このスレみてると分かる
316デフォルトの名無しさん (ワッチョイ c3e7-t6cX)
2018/10/27(土) 09:27:18.91ID:7MihieRw0 そういうのは上流でなんとかせい
317デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/27(土) 09:36:35.55ID:94jXB05x0 >>314
単にバッファに入っていただけとか。カーネルに設定できるバッファサイズなバッファなんぞもしくはcatプログラムのバッファ(の方が小さいだろう、たぶん)
もしくは上書きが上書きではなくて削除して新規ファイルに保存とかの場合とか(削除してもどこぞでオープンしていたらクローズされるまでは元のはそのまま残る)、か、OSが他でオープンされていたら上書きでも同じように別に保存してるとか
単にバッファに入っていただけとか。カーネルに設定できるバッファサイズなバッファなんぞもしくはcatプログラムのバッファ(の方が小さいだろう、たぶん)
もしくは上書きが上書きではなくて削除して新規ファイルに保存とかの場合とか(削除してもどこぞでオープンしていたらクローズされるまでは元のはそのまま残る)、か、OSが他でオープンされていたら上書きでも同じように別に保存してるとか
318デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 10:00:05.77ID:4RrrP6U60 >>313
考えてるのはファイルの先頭からLFの数を数える
「効率がいい方法(コマンド)は何か」だよ
LFの数を数えることなんてわかりきったことは考えてない
それを実現する方法を考えてる
まったくキミは思慮が足りないなw
考えてるのはファイルの先頭からLFの数を数える
「効率がいい方法(コマンド)は何か」だよ
LFの数を数えることなんてわかりきったことは考えてない
それを実現する方法を考えてる
まったくキミは思慮が足りないなw
319デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 10:02:52.71ID:4RrrP6U60320デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 10:06:05.12ID:4RrrP6U60 >>312
awkプログラマ、シェルショッカーさんこんちには(笑)
awkプログラマ、シェルショッカーさんこんちには(笑)
321デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/27(土) 10:32:12.85ID:94jXB05x0 何を噛み付いているのだか。よほど気に食わないことがあるらしいなっw
322デフォルトの名無しさん (アウアウカー Sad3-x45d)
2018/10/27(土) 10:38:33.23ID:5CI9IsZua このガキのやり取りもシェルスクリプトスレの日常になりつつあるな
323デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/27(土) 10:42:58.86ID:4RrrP6U60 この殺伐さがいいんだよ
324デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/27(土) 10:49:54.15ID:94jXB05x0 雑談すんなとか言ってなかったかなあ、だれかはw
325デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
2018/10/27(土) 11:01:01.29ID:S4VvuAVS0 低学歴知恵遅れのしゃべり場
326デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/27(土) 11:02:18.35ID:94jXB05x0 自己紹介そのものじゃないのww
327デフォルトの名無しさん (ワッチョイ 9764-g60c)
2018/10/27(土) 15:16:56.95ID:BbyQQXdF0 >>305
まあこれで今のところ上手くいってるのでいいです。
まあこれで今のところ上手くいってるのでいいです。
328デフォルトの名無しさん (ワッチョイ 9764-Ed1r)
2018/10/28(日) 00:51:41.26ID:5IpH1DwA0 「シェルスクリプト」を省略するときなんて呼べばいいのかな。
“ss”だと他の用例が多すぎてややこしいし。
“shscp”とか?
“ss”だと他の用例が多すぎてややこしいし。
“shscp”とか?
329デフォルトの名無しさん (アウアウカー Sad3-x45d)
2018/10/28(日) 01:46:36.58ID:0ZKwpNcRa sh
330デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 02:04:05.48ID:PnJQ4LJT0 SHと書くとスーパエッチみたいだな
331デフォルトの名無しさん (ワッチョイ df03-WuzW)
2018/10/28(日) 06:57:04.86ID:xmv6f/Y+0 そもそもシェルでええのにわざわざシェルスクリプトって言いたがる新参者達w
332デフォルトの名無しさん (ドコグロ MMcf-YOnW)
2018/10/28(日) 07:36:49.77ID:fdB1NucVM そういうくだらないことにしか突っ込めない老害w
333デフォルトの名無しさん (ワッチョイ 5b5b-KO6q)
2018/10/28(日) 07:49:18.94ID:JDWqlC9k0 >>331
シェルでググれ&テンプレくらい嫁
シェルでググれ&テンプレくらい嫁
334デフォルトの名無しさん (ワッチョイ df03-WuzW)
2018/10/28(日) 09:10:44.72ID:xmv6f/Y+0 >>333
おまえがググれよおこちゃまw
おまえがググれよおこちゃまw
335デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 09:26:48.32ID:PnJQ4LJT0 こんな感じに script1.sh が script2.sh を呼び出してる状態でさ、
script1.sh
└ script2.sh
CTRL+Cを押した時、script2.shは止めて、script1.shは
止めないってできるのかなぁ?
シグナルって、伝搬というか、上から下へ もしくは 下から上へ
流れていくものなん?
script1.sh
└ script2.sh
CTRL+Cを押した時、script2.shは止めて、script1.shは
止めないってできるのかなぁ?
シグナルって、伝搬というか、上から下へ もしくは 下から上へ
流れていくものなん?
336デフォルトの名無しさん (ワッチョイ bb80-+toU)
2018/10/28(日) 10:03:53.12ID:oCsOt6/L0 trapかけろ
337デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 10:12:32.68ID:PnJQ4LJT0 ああ、いやトラップはかけてるんだよ
script1.sh でINTを無効にすると
script2.sh は止まらなくなる
script1.sh でINTを無効にすると
script2.sh は止まらなくなる
338デフォルトの名無しさん (ブーイモ MM5b-F79V)
2018/10/28(日) 11:08:09.88ID:YiTUMI+KM >>334
老害と思いきや素人か
老害と思いきや素人か
339デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 11:18:09.59ID:gJfQRhUl0 >>335,337
目的がどこまでどゆのなのかわからんけど、script2.shのシグナルハンドラでkill -SIGTERM $PPIDすればそんな動作にはなるな
目的がどこまでどゆのなのかわからんけど、script2.shのシグナルハンドラでkill -SIGTERM $PPIDすればそんな動作にはなるな
340デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 11:32:07.64ID:gJfQRhUl0 ああ、script2.shを止めるのか
そんなんだったらscript2.shのシグナルハンドラでexitすればいいんじゃないの??また変な縛りとか拘りとかは知らん
そんなんだったらscript2.shのシグナルハンドラでexitすればいいんじゃないの??また変な縛りとか拘りとかは知らん
341デフォルトの名無しさん (ワッチョイ ab5d-DAZ3)
2018/10/28(日) 11:40:05.37ID:uhvIO3T60 script1.sh だけ動作を変えたいということなら
trap true INT
でいいように思うんだが…
trap true INT
でいいように思うんだが…
342デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 11:47:47.85ID:gJfQRhUl0 script2.shでそのへんの制御とかしたくなく、script1.shだけでならscript1.shで trap SIGINTすればいいだけっぽいな。無効じゃなくなにもしないシグナルハンドラで
script2.shの時だけでならその前後でNOPのシグナルハンドラ設定通常のシグナルハンドラに戻すとかか
>>341 被ったけど、書いたので被り被りで
script2.shの時だけでならその前後でNOPのシグナルハンドラ設定通常のシグナルハンドラに戻すとかか
>>341 被ったけど、書いたので被り被りで
343デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 17:27:21.50ID:XoYPKH7l0 勘違いしてた。違う所が原因だった
単純にscript2.shを起動してるのではなくて
script2.sh | filter みたいにパイプ使っていて、
CTRL+C押したときにscript2.shが出力するメッセージを
script1.shで受け取れないって問題だった
単純にscript2.shを起動してるのではなくて
script2.sh | filter みたいにパイプ使っていて、
CTRL+C押したときにscript2.shが出力するメッセージを
script1.shで受け取れないって問題だった
344デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 17:58:26.84ID:gJfQRhUl0 どのタイミングでの出力が出ない、出したいのかわからんな。CTRL+C押した瞬間ギリのか??としか思えないが。filterがなんなのか知らんけど、script1.shでtrapでもscript2.shでの出力が全くでないことなないだろう、当然
script2.shでtrapしてexitすればギリ近くのまで出るんじゃないの。script2.shで実際に出力しているコマンド(プロセス)にもよるだろうけど
script2.shでtrapしてexitすればギリ近くのまで出るんじゃないの。script2.shで実際に出力しているコマンド(プロセス)にもよるだろうけど
345デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 18:40:23.99ID:gJfQRhUl0 ああ、trapの対象はパイプチェイン(?)の最後のヤツ&それがシェルでなければなのか?script2.shに飛ぶことはないのね。その最後のでexitすればだなすればかな
script2.sh | cat
script2.sh | sh -c "trap 'exit 0';cat"
のような変態なw それもシェル種類依存かな。あとはバッファをflushすればよりなんとかなりそうかなあ(できるのであれば)
そもそもCTRL+Cなんだからそんなギリを気にすんなってとこか
script2.sh | cat
script2.sh | sh -c "trap 'exit 0';cat"
のような変態なw それもシェル種類依存かな。あとはバッファをflushすればよりなんとかなりそうかなあ(できるのであれば)
そもそもCTRL+Cなんだからそんなギリを気にすんなってとこか
346デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 18:42:22.28ID:gJfQRhUl0 SIGINT抜けてた
347デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 19:05:49.36ID:XoYPKH7l0 >>344
最終的にやりたいことは
script1.sh ・・・ サブプロセスの標準出力・標準エラー出力を総てキャプチャしたい
script2.sh ・・・ 標準出力・標準エラー出力を行い、CTRL+Cを押されたら(trapして)
CTRL+Cが押されたと標準エラー出力に出力したい
ってことなんだよね
> そもそもCTRL+Cなんだからそんなギリを気にすんなってとこか
そういうことだし、諦めて一つのスクリプトにしてやりたいことは
解決できたのでもう深追いする気はなくなってる
あと関係ないけど、SIGINTってPOSIXじゃないみたいだなw
INTを使えってshellcheckに怒られた。みんな SIG SIG 言ってるのに
最終的にやりたいことは
script1.sh ・・・ サブプロセスの標準出力・標準エラー出力を総てキャプチャしたい
script2.sh ・・・ 標準出力・標準エラー出力を行い、CTRL+Cを押されたら(trapして)
CTRL+Cが押されたと標準エラー出力に出力したい
ってことなんだよね
> そもそもCTRL+Cなんだからそんなギリを気にすんなってとこか
そういうことだし、諦めて一つのスクリプトにしてやりたいことは
解決できたのでもう深追いする気はなくなってる
あと関係ないけど、SIGINTってPOSIXじゃないみたいだなw
INTを使えってshellcheckに怒られた。みんな SIG SIG 言ってるのに
348デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 20:03:04.22ID:gJfQRhUl0 なにその勝手にやる気なくすなよw ほんとに身勝手だな、いつも通り
SIGINTはPOSIXだからな(なぞ)。そっち寄りのの人は普通に使ってしまうんじゃね。てか、んなの本題に関係ないだろうに、そんなこと言いたいのはわかるけどさ(なぞ)
SIGINTはPOSIXだからな(なぞ)。そっち寄りのの人は普通に使ってしまうんじゃね。てか、んなの本題に関係ないだろうに、そんなこと言いたいのはわかるけどさ(なぞ)
349デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 20:07:36.88ID:XoYPKH7l0 >>348
> なにその勝手にやる気なくすなよw
$ dash -c 'trap true SIGINT && echo v^_^'
trap: SIGINT: bad trap
$ dash -c 'trap true INT && echo v^_^'
v^_^
> なにその勝手にやる気なくすなよw
$ dash -c 'trap true SIGINT && echo v^_^'
trap: SIGINT: bad trap
$ dash -c 'trap true INT && echo v^_^'
v^_^
350デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 20:17:52.04ID:gJfQRhUl0 で?通じてるんでしょ?POSIX縛りなんてあったの?そういうのはやる気あるのねw
351デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 20:20:44.42ID:gJfQRhUl0352デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 20:30:59.64ID:XoYPKH7l0 >>350
やる気ではなくて、POSIX縛りは必須要件なので
サブプロセスの標準エラー出力の件は、別の方法で解決できることなので
数値でも指定できるのは知ってる。trap SIGINTとかSIGINT抜けてたとか
かいてあるから、trap INT、INT抜けてただよって言ってるだけ
やる気ではなくて、POSIX縛りは必須要件なので
サブプロセスの標準エラー出力の件は、別の方法で解決できることなので
数値でも指定できるのは知ってる。trap SIGINTとかSIGINT抜けてたとか
かいてあるから、trap INT、INT抜けてただよって言ってるだけ
353デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 20:36:08.52ID:gJfQRhUl0 また、後出しか。そんなレスしている目的は違うだろうw
いきなり「数値でも指定できるのは知ってる」とか??(3)に対して???
http://pubs.opengroup.org/onlinepubs/007904975/utilities/trap.html
(新しいドキュメントはどこだ?)
SIG付きもPOSIX仕様のようだけどなwオプションでも言及しているんだからPOSIXの仕様のひとつだろう
なんて、アホなやりとりしたいの?
いきなり「数値でも指定できるのは知ってる」とか??(3)に対して???
http://pubs.opengroup.org/onlinepubs/007904975/utilities/trap.html
(新しいドキュメントはどこだ?)
SIG付きもPOSIX仕様のようだけどなwオプションでも言及しているんだからPOSIXの仕様のひとつだろう
なんて、アホなやりとりしたいの?
354デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 20:40:09.47ID:gJfQRhUl0 >いきなり「数値でも指定できるのは知ってる」とか??(3)に対して???
ああ、(3)がSIGINTの数値だと思ったのか。違うぞ2だぞ。(3)は C API という意味
ああ、(3)がSIGINTの数値だと思ったのか。違うぞ2だぞ。(3)は C API という意味
355デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 20:41:40.70ID:XoYPKH7l0 なるほどSIGをつけた名前はPOSIXだが、ポータビリティではないってことか
echoみたいなもんだな
echoみたいなもんだな
356デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 20:42:17.74ID:XoYPKH7l0 >>354
ここ、シェルスクリプトのスレだから
ここ、シェルスクリプトのスレだから
357デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 20:43:25.81ID:gJfQRhUl0 でた、都合が悪くなるとのいつものやつw
358デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 20:50:49.94ID:XoYPKH7l0 シェルスクリプトのスレでC APIは関係ないですよね?
言ってること間違ってますか?
言ってること間違ってますか?
359デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 20:56:45.89ID:gJfQRhUl0360デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 21:00:00.71ID:XoYPKH7l0 > ちなみに、>>353のPOSIXドキュメントでも (3) のことに言及しているのはどう思う?
それが、シェルスクリプトだけのドキュメントじゃなくて、POSIXのドキュメントだからでしょう???
なにがいいたいんだか
それが、シェルスクリプトだけのドキュメントじゃなくて、POSIXのドキュメントだからでしょう???
なにがいいたいんだか
361デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 21:01:18.42ID:gJfQRhUl0 コマンドのドキュメントだよ。それもお前が大好きなPOSIXのw
いろいろ破綻しているように見えなくもない。落ち着けww
いろいろ破綻しているように見えなくもない。落ち着けww
>>358
その C API って何ですか?定義を教えてください
その C API って何ですか?定義を教えてください
363デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 21:26:47.89ID:XoYPKH7l0364デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 21:28:14.13ID:XoYPKH7l0365デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 21:37:09.45ID:gJfQRhUl0 >>363
で?その目的がわからんな。単に素直な疑問なだけなら、>>348で応えているけど。話を振ってねちっこく続けているのは誰なの?>>349とか以後とか
それも>>353でお前は納得したんだろ?
なんか上でC++のことを偉そうにのたまっているのを誤爆したのお前じゃなかったっけ?
それがお前じゃなくても、なんでコマンド関連のCなんて簡単なのにそんなに知らないのか不思議だな、なんか異常にシェルスクリプト「だけ」に拘るのもあって
UNIX/Linux界隈では自分でCでコマンド書く(簡単なフィルタも)のも普通にいるだろうから、お前のようにシェルスクリプトだけしか言ってはいけないなんてないと思うけどな(それも俺からは単にお前の間違いをごまかすためだけにしか見えんからw)
>>362は俺に振ってもいいが、なにを聞いているのか傍目にもわからないw すまんが、も少し具体的に>>362
で?その目的がわからんな。単に素直な疑問なだけなら、>>348で応えているけど。話を振ってねちっこく続けているのは誰なの?>>349とか以後とか
それも>>353でお前は納得したんだろ?
なんか上でC++のことを偉そうにのたまっているのを誤爆したのお前じゃなかったっけ?
それがお前じゃなくても、なんでコマンド関連のCなんて簡単なのにそんなに知らないのか不思議だな、なんか異常にシェルスクリプト「だけ」に拘るのもあって
UNIX/Linux界隈では自分でCでコマンド書く(簡単なフィルタも)のも普通にいるだろうから、お前のようにシェルスクリプトだけしか言ってはいけないなんてないと思うけどな(それも俺からは単にお前の間違いをごまかすためだけにしか見えんからw)
>>362は俺に振ってもいいが、なにを聞いているのか傍目にもわからないw すまんが、も少し具体的に>>362
366デフォルトの名無しさん (ワッチョイ 2723-+HLB)
2018/10/28(日) 21:40:16.96ID:quDgO6NR0 またposix先生が宿題出してんの?
367デフォルトの名無しさん (ワッチョイ 01fb-KhvQ)
2018/10/28(日) 21:44:47.82ID:EWkScXjB0 ぽっぽっぽー
368デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 21:49:30.03ID:XoYPKH7l0 >>365
コマンド?
もしかして、trapがコマンドだと思ってる?
シェルビルトイン関数だよ
シェルのプロセスでシグナルを扱わなきゃいけないから
外部コマンドで実装することは不可能
だからシェルスクリプトスレでtrapの話をするならば
シェルスクリプト前提になるのは当然だろう?
コマンド?
もしかして、trapがコマンドだと思ってる?
シェルビルトイン関数だよ
シェルのプロセスでシグナルを扱わなきゃいけないから
外部コマンドで実装することは不可能
だからシェルスクリプトスレでtrapの話をするならば
シェルスクリプト前提になるのは当然だろう?
369デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 21:53:11.18ID:gJfQRhUl0 >>368
そういう細かいことは言いたいのね。大枠でコマンドでいいじゃん (1) の範疇なんだから
その二行目以降はイミフ。なにを言っているの?言いたいの?
お前から見てミスを論ってなんとかお前のなにかを保ちたいだけにしか見えない
そういう細かいことは言いたいのね。大枠でコマンドでいいじゃん (1) の範疇なんだから
その二行目以降はイミフ。なにを言っているの?言いたいの?
お前から見てミスを論ってなんとかお前のなにかを保ちたいだけにしか見えない
370デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 21:53:58.49ID:XoYPKH7l0371デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 21:54:56.36ID:gJfQRhUl0 結局SIGINTの振りも>>368と同じでなにかをなんとかしたかっただけだろなww
SIGINTで失敗したから、別のにか。懲りないなw
SIGINTで失敗したから、別のにか。懲りないなw
372デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 21:55:59.54ID:gJfQRhUl0 >>370
なんか失点を挽回しようとしているのが透けて見えてるのでwww
なんか失点を挽回しようとしているのが透けて見えてるのでwww
373デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 21:59:08.94ID:XoYPKH7l0374デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/28(日) 22:00:47.39ID:XoYPKH7l0 ID:gJfQRhUl0 がさっきから俺に言ってることって
全部自分の事になってるのわかってないのかな?
どうせ次言う言葉も、自分のことを棚に上げて言うんだろうな
全部自分の事になってるのわかってないのかな?
どうせ次言う言葉も、自分のことを棚に上げて言うんだろうな
375デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 22:07:32.28ID:gJfQRhUl0 >>373,374
はあ?無茶苦茶やな
その答えはすでに応えているけど。「みんな SIG SIG 言ってるのに」のに対する応えを含めての
それも最初に。それも話の流れで、お前も納得勉強wになっただろうにww
よほど「お前のなにかを保ちたい」が琴線だったようだねえw
はあ?無茶苦茶やな
その答えはすでに応えているけど。「みんな SIG SIG 言ってるのに」のに対する応えを含めての
それも最初に。それも話の流れで、お前も納得勉強wになっただろうにww
よほど「お前のなにかを保ちたい」が琴線だったようだねえw
376デフォルトの名無しさん (ワッチョイ 8bb3-WuzW)
2018/10/28(日) 22:32:38.54ID:reiOA0Hq0 UNIX板へ帰ろう
377デフォルトの名無しさん (ワッチョイ 5b76-MKt5)
2018/10/28(日) 22:34:09.63ID:gJfQRhUl0 https://www.freebsd.org/cgi/man.cgi?query=builtin&apropos=0&sektion=1&manpath=FreeBSD+12-current&arch=default&format=html
https://linuxjm.osdn.jp/html/GNU_bash/man1/builtins.1.html
コマンドでよかったみたいだけどwww
https://linuxjm.osdn.jp/html/GNU_bash/man1/builtins.1.html
コマンドでよかったみたいだけどwww
378デフォルトの名無しさん (アウアウカー Sad3-KhvQ)
2018/10/28(日) 22:50:09.83ID:8zpC2JPUa379デフォルトの名無しさん (ワッチョイ 5b5b-F79V)
2018/10/28(日) 23:07:26.81ID:JDWqlC9k0 村を出てアイドルになるためだったよな
380デフォルトの名無しさん (ワッチョイ 9764-Ed1r)
2018/10/28(日) 23:38:46.03ID:5IpH1DwA0 シグナルを送信するコマンドの名前がsigとかじゃなくkillなのはなぜでしょうか。
例によって歴史的経緯? 元々はSIGKILLシグナルしか送信しなかったのでkillとか。
例によって歴史的経緯? 元々はSIGKILLシグナルしか送信しなかったのでkillとか。
381デフォルトの名無しさん (ワッチョイ 5b98-o90R)
2018/10/29(月) 00:45:49.98ID:OX2gPbsu0 >>379
某農家「村を出てアイドルになるなんてとんでもねぇ、両立するべ」
某農家「村を出てアイドルになるなんてとんでもねぇ、両立するべ」
382デフォルトの名無しさん (ワッチョイ 5b5b-F79V)
2018/10/29(月) 00:48:40.26ID:gm+ugNlu0 ご想像どおり、version6 unix以前はkillしかできなかった模様
383デフォルトの名無しさん (ワッチョイ 9764-Ed1r)
2018/10/29(月) 02:55:07.53ID:OPK1oA4w0 http://d.hatena.ne.jp/oraccha/20110419/1303223401
こことかにありますね。ありがとうございました。
こことかにありますね。ありがとうございました。
384デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
2018/10/29(月) 22:10:10.39ID:JGxixszg0 村に戻って親が死んでたら
そいつは手遅れコロスしかない
親はいつまでも待っていない
そいつは手遅れコロスしかない
親はいつまでも待っていない
385デフォルトの名無しさん (ワッチョイ 0b98-o90R)
2018/10/30(火) 01:05:53.06ID:2OC/bUyM0 >>304
それを言えるのは、まだ手遅れになってないからなんやで
それを言えるのは、まだ手遅れになってないからなんやで
386デフォルトの名無しさん (ワッチョイ 5b5b-qKGX)
2018/10/30(火) 02:11:38.48ID:yt1zemAy0 すまん、俺がsedなんて持ち出したばかりに…
387デフォルトの名無しさん (ワッチョイ 2d8a-WPqz)
2018/10/30(火) 02:16:29.65ID:lSvIGV4X0 お題:スクリプトのシグナルを扱う外部コマンドを設計せよ
388デフォルトの名無しさん (ワッチョイ 0b98-o90R)
2018/10/30(火) 02:24:39.94ID:2OC/bUyM0 こんな感じ?w
#!/bin/sh
trap "$(extcmd)" INT
[extcmd]
#!/bin/sh
cat <<HERE
handler() {
: なにかする
}
handler
HERE
#!/bin/sh
trap "$(extcmd)" INT
[extcmd]
#!/bin/sh
cat <<HERE
handler() {
: なにかする
}
handler
HERE
389デフォルトの名無しさん (ワッチョイ 9764-hveG)
2018/10/30(火) 08:39:46.28ID:lJU58Qkm0 >>353
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#trap
組込コマンドは「 Shell Command Language」の一部として定める方針みたいね。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#trap
組込コマンドは「 Shell Command Language」の一部として定める方針みたいね。
390デフォルトの名無しさん (ワッチョイ cfa7-MKt5)
2018/10/30(火) 16:02:13.78ID:7uiQkmXn0391デフォルトの名無しさん (ワッチョイ 1d80-SUE8)
2018/10/30(火) 23:49:50.18ID:H/liFP070 いや手遅れ
親がしんでたらゾンビスプロセスになる
殺すしかない
親がしんでたらゾンビスプロセスになる
殺すしかない
392デフォルトの名無しさん (ワッチョイ 9764-hveG)
2018/10/31(水) 05:39:40.82ID:VU8NOm8y0 UTF-8で符号化された文字列に対応してるfmt(1)コマンドってある?
GNU coreutilsのfmt(1)は無理だった。
GNU coreutilsのfmt(1)は無理だった。
393デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 17:53:36.33ID:Kkuf6Nxk0 一回のループでファイルや変数を使わずに、偶数行と奇数行にまとめられないかなぁ?
例えば、入力ファイルが以下のような場合
1
2
3
4
5
出力は、以下のようにしたい
2 # ここから偶数行
4
1 # ここから奇数行
3
5
ファイルディスクリプタをうまく使えばできるんじゃないか?
と思ってたりするけどうまくいかない
例えば、入力ファイルが以下のような場合
1
2
3
4
5
出力は、以下のようにしたい
2 # ここから偶数行
4
1 # ここから奇数行
3
5
ファイルディスクリプタをうまく使えばできるんじゃないか?
と思ってたりするけどうまくいかない
394デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/01(木) 18:26:55.97ID:OxvwXsOaa 変数も使っちゃダメなのか。うーん。
395デフォルトの名無しさん (ブーイモ MMba-rFq1)
2018/11/01(木) 18:37:54.39ID:eWvFwheDM sedじゃあかんのけ?
396デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 18:50:36.53ID:Kkuf6Nxk0 >>395
sedでできるならsedでもいいけど。
やっぱり無理だよなぁ
結局、奇数行のデータを後からだすためには
どこかにためておく必要があるわけで
メモリかディスクはどうしても使用してしまう
二回のループにするなら、メモリもディスクも消費しないけど
今度は入力データをためておく必要がある
sedでできるならsedでもいいけど。
やっぱり無理だよなぁ
結局、奇数行のデータを後からだすためには
どこかにためておく必要があるわけで
メモリかディスクはどうしても使用してしまう
二回のループにするなら、メモリもディスクも消費しないけど
今度は入力データをためておく必要がある
397デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/01(木) 19:37:55.15ID:upF+pHX50 >>393
もし変数を使っていいなら,どうやって書くの?
もし変数を使っていいなら,どうやって書くの?
398デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 19:42:09.40ID:Kkuf6Nxk0399デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/01(木) 19:46:11.92ID:OxvwXsOaa 元データがファイルに入っていて2回読んで良くて尚且つ変数使って良いなら楽だよ、っていうかそれなら誰でも作れるかw
400デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 19:51:11.07ID:Kkuf6Nxk0 遅くなるのでディスクに書き込みたくないし、メモリも
あまり使用したくなかったんだけど仕方ないか
実際には偶数行、奇数行じゃなくて、データを種類ごとに前後に分けたくて
後ろに分けるデータは基本的に少ないってことがせめてもの救いか
あまり使用したくなかったんだけど仕方ないか
実際には偶数行、奇数行じゃなくて、データを種類ごとに前後に分けたくて
後ろに分けるデータは基本的に少ないってことがせめてもの救いか
401デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 19:58:02.45ID:zOBF+lvD0 なんでバカって実行速度ばかり気にするんや?
402デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 19:59:10.65ID:Kkuf6Nxk0 何度も実行するものなので、遅いとストレスたまるから
403デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 20:00:23.29ID:zOBF+lvD0 バカなのにストレスたまるの?バカやめたら?
404デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 20:03:44.33ID:Kkuf6Nxk0 その理屈だと、
・バカなのにストレス溜まるの?(不思議)
・バカじゃないならストレス溜まる(普通)
ってことになるから、
バカやめたら、それこそストレス溜まるのでは?
・バカなのにストレス溜まるの?(不思議)
・バカじゃないならストレス溜まる(普通)
ってことになるから、
バカやめたら、それこそストレス溜まるのでは?
405デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 20:18:26.34ID:zOBF+lvD0 バカの理屈わろたw
バカなんやから考えん方がええで
バカなんやから考えん方がええで
406デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 20:23:45.26ID:Kkuf6Nxk0 なにか言い返せよw
407デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 20:37:24.98ID:zOBF+lvD0 バカに言いかえすとか無理やわ理屈がないからバカなんやでおまえ
408デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 20:38:28.76ID:Kkuf6Nxk0 そりゃね。>>404が正しいから何も言いえせないわなw
409デフォルトの名無しさん (ブーイモ MMba-4S5W)
2018/11/01(木) 20:43:56.74ID:RCcSs0UBM お前ら、哲学者か何かなん?
410デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 20:50:42.34ID:zOBF+lvD0 バカとバカを嘲笑う者や
411デフォルトの名無しさん (ワッチョイ 4e81-8AGB)
2018/11/01(木) 20:51:14.40ID:5U41yww90 奇数行だけ抽出するスクリプトと
偶数行だけの二つ作って、
奇数行スクリプトの出力に偶数行のを追記させる
なんとなくそんなイメージ
偶数行だけの二つ作って、
奇数行スクリプトの出力に偶数行のを追記させる
なんとなくそんなイメージ
412デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/01(木) 21:54:51.76ID:zo7FxUKXr 速度言うならCなりJavaで書いてデーモン化して動かさんとな
シェルスクリプト特有のコマンド羅列のプロセス起動しまくりってのは
すごいコストがかかってる
シェルスクリプト特有のコマンド羅列のプロセス起動しまくりってのは
すごいコストがかかってる
413デフォルトの名無しさん (ブーイモ MMba-rFq1)
2018/11/01(木) 21:57:34.95ID:eWvFwheDM 偶数行抽出
grep "Kkuf6Nxk0"
奇数行抽出
grep "zOBF+lvD0"
楽勝すぎるわ
grep "Kkuf6Nxk0"
奇数行抽出
grep "zOBF+lvD0"
楽勝すぎるわ
414デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/01(木) 21:58:38.71ID:zo7FxUKXr >>404
いや普通なら落としどころ決めるだろ
シェルスクリプトだからあきらめるとか
ちゃんとした言語で作るとか
バカだから漠然と心配ばかりしてストレスが溜まる
今も月が落ちてくる心配でもしてるんじゃないの
いや普通なら落としどころ決めるだろ
シェルスクリプトだからあきらめるとか
ちゃんとした言語で作るとか
バカだから漠然と心配ばかりしてストレスが溜まる
今も月が落ちてくる心配でもしてるんじゃないの
415デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/01(木) 21:59:28.16ID:JoiMeSvG0 >>412
デーモンだって実行プロセスは立ち上げないとダメだろ
デーモンだって実行プロセスは立ち上げないとダメだろ
416デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 21:59:49.59ID:zOBF+lvD0 >>413
シェルが固まったんやがウイルスちゃうやろな?直しかた教えろバカ
シェルが固まったんやがウイルスちゃうやろな?直しかた教えろバカ
417デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/01(木) 21:59:57.39ID:zo7FxUKXr >>413
後出しで奇数偶数じゃないって言ってるよ
後出しで奇数偶数じゃないって言ってるよ
418デフォルトの名無しさん (ワッチョイ 9ab3-gRbH)
2018/11/01(木) 22:00:55.53ID:45pCF+y00 seq 5 | awk '{print ($1%2?"b":"a") $1}' | sort -V | cut -c2-
419デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:06:42.28ID:Kkuf6Nxk0420デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:08:20.21ID:Kkuf6Nxk0421デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 22:09:12.59ID:zOBF+lvD0 バカはいいかげん黙っとけ
422デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:12:35.86ID:Kkuf6Nxk0423デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:13:57.69ID:Kkuf6Nxk0424デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 22:16:53.31ID:zOBF+lvD0 >>423
要するにバカやんけおまえ
要するにバカやんけおまえ
425デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:19:28.46ID:Kkuf6Nxk0 まだNGにしてないのか?
426デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 22:21:41.75ID:zOBF+lvD0427デフォルトの名無しさん (ワッチョイ 9ab3-gRbH)
2018/11/01(木) 22:22:49.71ID:45pCF+y00 ああもぅめんどくせぇなw 順番変えたくないなら stable sort でええやんけ
メモリがどーたらこーたらは知らんw
$ cat hogehoge | awk '{print ($1%2?"b":"a") "\t" $1}' | sort -s -k1,1 | cut -f2
メモリがどーたらこーたらは知らんw
$ cat hogehoge | awk '{print ($1%2?"b":"a") "\t" $1}' | sort -s -k1,1 | cut -f2
428デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:22:56.19ID:Kkuf6Nxk0 じゃあなんで黙れって言ったの?
俺が書き込みしなきゃ、お前出てこれないじゃん
矛盾してるよね。
俺が書き込みしなきゃ、お前出てこれないじゃん
矛盾してるよね。
429デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:23:55.45ID:Kkuf6Nxk0 >>427
いや、頑張らなくていいよw
いや、頑張らなくていいよw
430デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/01(木) 22:25:19.85ID:zOBF+lvD0 >>428
バカはしゃべるな
バカはしゃべるな
431デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/01(木) 22:31:12.95ID:zo7FxUKXr432デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:35:03.93ID:Kkuf6Nxk0 だから仕方ないかって書いてんのにw
ほんと人の話読まないやつだな
400 自分:デフォルトの名無しさん (ワッチョイ ab98-QXT6)[sage] 投稿日:2018/11/01(木) 19:51:11.07 ID:Kkuf6Nxk0 [4/15]
遅くなるのでディスクに書き込みたくないし、メモリも
あまり使用したくなかったんだけど仕方ないか
ほんと人の話読まないやつだな
400 自分:デフォルトの名無しさん (ワッチョイ ab98-QXT6)[sage] 投稿日:2018/11/01(木) 19:51:11.07 ID:Kkuf6Nxk0 [4/15]
遅くなるのでディスクに書き込みたくないし、メモリも
あまり使用したくなかったんだけど仕方ないか
433デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/01(木) 22:35:30.89ID:bLNYdVH2a えっなにこれは…
434デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/01(木) 22:36:17.06ID:upF+pHX50 tee(1)コマンド使ったらいけるかなとか考えたが無理かな。
435デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:43:09.27ID:Kkuf6Nxk0 >>434
片方ファイルだもんね。
メインプロセス起動(出力を2つに分岐)
├出力1 偶数行表示プロセス実行
└出力2 奇数行表示プロセス実行(偶数行表示プロセス終了後に処理開始)
みたいな事ができるかな?と思ったんだけど
まあ、これでも内部的には出力がバッファに
溜め込まれてるんだろうけどね
片方ファイルだもんね。
メインプロセス起動(出力を2つに分岐)
├出力1 偶数行表示プロセス実行
└出力2 奇数行表示プロセス実行(偶数行表示プロセス終了後に処理開始)
みたいな事ができるかな?と思ったんだけど
まあ、これでも内部的には出力がバッファに
溜め込まれてるんだろうけどね
436デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/01(木) 22:48:35.54ID:zo7FxUKXr >>432
お前ホントバカだな
お前のようなバカのためにプログラム書いてやったぞ
eo-sort.exe
第一引数に入力ファイルを渡せば標準出力に
まず偶数業出してその後に奇数業出してくれる
必要ならそれをファイルにリダイレクトしなよ
お前ホントバカだな
お前のようなバカのためにプログラム書いてやったぞ
eo-sort.exe
第一引数に入力ファイルを渡せば標準出力に
まず偶数業出してその後に奇数業出してくれる
必要ならそれをファイルにリダイレクトしなよ
437デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:49:59.34ID:Kkuf6Nxk0 いらねっす
438デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/01(木) 22:53:44.24ID:zo7FxUKXr ああ、あと出し情報で偶数奇数じゃなかったんだよな
そりゃいらないわなw
そりゃいらないわなw
439デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/01(木) 22:54:34.69ID:Kkuf6Nxk0 え?あぁ、そうだな
440デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/01(木) 23:01:11.09ID:upF+pHX50 >>435
というかよく読んだら「ファイルディスクリプタをうまく使う」ってそういうことだよね
teeっていうのはファイルと標準出力に書き込む「ファイルディスクリプタをうまく使う」コマンドの一つなんだからさ。
まあ俺には変数使わずに出力を分けるのは無理かな。
ところで変数使わない理由はPOSIXシェルスクリプトは変数のスコープができず
利用者が定義している定数を潰す可能性があるからって理解でいいのかな?
というかよく読んだら「ファイルディスクリプタをうまく使う」ってそういうことだよね
teeっていうのはファイルと標準出力に書き込む「ファイルディスクリプタをうまく使う」コマンドの一つなんだからさ。
まあ俺には変数使わずに出力を分けるのは無理かな。
ところで変数使わない理由はPOSIXシェルスクリプトは変数のスコープができず
利用者が定義している定数を潰す可能性があるからって理解でいいのかな?
441デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/01(木) 23:17:46.65ID:JoiMeSvG0 印刷して紙でやればメモリもディスクも使わないんじゃね?
442デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/01(木) 23:22:18.99ID:0eDQcpEPa 天才か
443デフォルトの名無しさん (ワッチョイ 9ab3-gRbH)
2018/11/01(木) 23:31:18.23ID:45pCF+y00 じゃぁ moreutils の pee コマンドでも使ったら
$ cat hogehoge | pee 'awk "!(\$1%2)"' 'awk "\$1%2"'
$ cat hogehoge | pee 'awk "!(\$1%2)"' 'awk "\$1%2"'
444デフォルトの名無しさん (ワッチョイ 769f-MyS3)
2018/11/01(木) 23:58:02.32ID:s+SrulDE0 >>441
コペルニクス的転回だな。
コペルニクス的転回だな。
445デフォルトの名無しさん (ワッチョイ 76e7-75/g)
2018/11/02(金) 00:25:05.23ID:qf9daF/z0 同じターミナルに出力するのが仕様間違いだろ。スクロールバックがめんどくさい。
446デフォルトの名無しさん (ブーイモ MMba-MC7i)
2018/11/02(金) 01:50:44.73ID:RWqagkCBM447デフォルトの名無しさん (ワッチョイ 5aa2-cAEM)
2018/11/02(金) 03:41:34.10ID:fhEBIQ700 確かに
448デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/02(金) 06:24:06.72ID:tmRne/9W0449デフォルトの名無しさん (ワッチョイ b69f-8AGB)
2018/11/02(金) 06:38:46.12ID:BwjETkqh0 あのう、プロセス動かすだけでメモリ消費してしまうんですが
変数や作業用ファイル作らなくても内部的な一時ファイルは作られるわけで
リソース消費しないで切り分けようとエディタ立ち上げて手作業でやっても、やっぱりリソース消費があるので
誰かが言ったように、ノートかなにかに手書き転記するしかないと思う
つうか、そんな人はコンピュータ使っちゃダメだと思う
まるで、経団連会長みたいなんだもの
最近会長室にコンピュータが導入されたらしい
あれこれ、たかが変数や作業用ファイル如きでリソース消費しないように考える時間など無駄中の無駄
なにも、惑星探査衛星の限られたリソースでなんとかするって話じゃないんだから
時間の使い方を間違っている
そんな下らない話題で、ここのスレのリソースも無駄遣い
変数や作業用ファイル作らなくても内部的な一時ファイルは作られるわけで
リソース消費しないで切り分けようとエディタ立ち上げて手作業でやっても、やっぱりリソース消費があるので
誰かが言ったように、ノートかなにかに手書き転記するしかないと思う
つうか、そんな人はコンピュータ使っちゃダメだと思う
まるで、経団連会長みたいなんだもの
最近会長室にコンピュータが導入されたらしい
あれこれ、たかが変数や作業用ファイル如きでリソース消費しないように考える時間など無駄中の無駄
なにも、惑星探査衛星の限られたリソースでなんとかするって話じゃないんだから
時間の使い方を間違っている
そんな下らない話題で、ここのスレのリソースも無駄遣い
450デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 07:18:03.73ID:bE/8yEKV0 >>446
諦めてないです!まってます!
諦めてないです!まってます!
451デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 07:42:30.53ID:bE/8yEKV0 >>448
> peeコマンドに可搬性を持たせられたらいいんだけど、それが問題だよね
こんなんでどう? peeコマンドのシェルスクリプト実装版
シェルスクリプトで実装したから外部コマンドだけじゃなくてシェル関数も呼べるよ
#!/bin/sh
pee() {
( ( (
while IFS= read -r line; do
printf '%s\n' "$line"
printf '%s\n' "$line" >&3
done | "$1" >&4) 3>&1 ) | "$2" ) 4>&1
}
foo() { printf 'foo %s\n' "$(cat -)"; }
bar() { printf 'bar %s\n' "$(cat -)"; }
pee foo bar
> peeコマンドに可搬性を持たせられたらいいんだけど、それが問題だよね
こんなんでどう? peeコマンドのシェルスクリプト実装版
シェルスクリプトで実装したから外部コマンドだけじゃなくてシェル関数も呼べるよ
#!/bin/sh
pee() {
( ( (
while IFS= read -r line; do
printf '%s\n' "$line"
printf '%s\n' "$line" >&3
done | "$1" >&4) 3>&1 ) | "$2" ) 4>&1
}
foo() { printf 'foo %s\n' "$(cat -)"; }
bar() { printf 'bar %s\n' "$(cat -)"; }
pee foo bar
452デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 07:59:00.48ID:bE/8yEKV0453デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 08:25:40.36ID:bE/8yEKV0 あれ? これでできてね?
最初こんな感じだったからブロックされずに混じって出てくることになったけど
foo() { cat -; }
bar() { cat -; }
こうしたせいで出力がブロックされてる気がする
foo() { printf 'foo %s\n' "$(cat -)"; }
bar() { printf 'bar %s\n' "$(cat -)"; }
最初こんな感じだったからブロックされずに混じって出てくることになったけど
foo() { cat -; }
bar() { cat -; }
こうしたせいで出力がブロックされてる気がする
foo() { printf 'foo %s\n' "$(cat -)"; }
bar() { printf 'bar %s\n' "$(cat -)"; }
454デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/02(金) 08:26:07.31ID:tmRne/9W0 >>451
https://www.mankier.com/1/pee
これを読む限り引数は2つだけじゃないから,ちょっと機能不足かもね。
もちろん今回のあなたの目的には合うけど(2通りのパイプがあればそれで十分でしょう?)
ただ,もっと一般的なpee(1)コマンドを作ろうと思うと,
引数の数に応じてまずは雛形を作りそれをevalする,みたいな方法を採る必要があるかも。
https://www.mankier.com/1/pee
これを読む限り引数は2つだけじゃないから,ちょっと機能不足かもね。
もちろん今回のあなたの目的には合うけど(2通りのパイプがあればそれで十分でしょう?)
ただ,もっと一般的なpee(1)コマンドを作ろうと思うと,
引数の数に応じてまずは雛形を作りそれをevalする,みたいな方法を採る必要があるかも。
455デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 08:41:23.56ID:bE/8yEKV0456デフォルトの名無しさん (ワッチョイ 9ab3-gRbH)
2018/11/02(金) 09:19:53.88ID:Rb6mIS4M0 foo() { printf 'foo %s\n' "$(tail -n 1 -)"; }
bar() { printf 'bar %s\n' "$(head -n 1 -)"; }
ってして seq 1000 | ./pee.sh としたら実行する度に foo の値
が違ってるな…どちからの子プロセスが実行完了したら while
も終了するから仕方ないんだろうけど。trap '' PIPE ってすると
I/O error になるし
bar() { printf 'bar %s\n' "$(head -n 1 -)"; }
ってして seq 1000 | ./pee.sh としたら実行する度に foo の値
が違ってるな…どちからの子プロセスが実行完了したら while
も終了するから仕方ないんだろうけど。trap '' PIPE ってすると
I/O error になるし
457デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/02(金) 09:45:49.16ID:0QIYfvOaa458デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 09:56:03.14ID:bE/8yEKV0 >>457
正解。組み込みマシンも対象としている
正解。組み込みマシンも対象としている
459デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 09:59:54.78ID:bE/8yEKV0 限定的ながら変数で渡すっていうのが出来てしまったので晒す。多分使わない
#!/bin/sh
main() {
index=0
( ( (
while IFS= read -r line; do
index=$((index+1))
dumpvar_and_call "even"
dumpvar_and_call "odd" >&3
done | eval "$(cat -)" >&4) 3>&1 ) | eval "$(cat -)" ) 4>&1
}
dumpvar_and_call() { set; echo "$1"; }
even() {
if [ $((line % 2)) = 0 ]; then
echo "index:$index even $line"
sleep 1
fi
}
odd() {
if [ $((line % 2)) = 1 ]; then
echo "index:$index odd $line"
fi
}
main<<HERE
3
6
7
4
2
8
HERE
#!/bin/sh
main() {
index=0
( ( (
while IFS= read -r line; do
index=$((index+1))
dumpvar_and_call "even"
dumpvar_and_call "odd" >&3
done | eval "$(cat -)" >&4) 3>&1 ) | eval "$(cat -)" ) 4>&1
}
dumpvar_and_call() { set; echo "$1"; }
even() {
if [ $((line % 2)) = 0 ]; then
echo "index:$index even $line"
sleep 1
fi
}
odd() {
if [ $((line % 2)) = 1 ]; then
echo "index:$index odd $line"
fi
}
main<<HERE
3
6
7
4
2
8
HERE
460デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 10:03:43.36ID:bE/8yEKV0 なんで使わないかというと、変数をパイプで渡すために
setでシェル変数をダンプして、evalしてるんだが、
bashでは読み取り専用変数があってエラーになるから
setの出力をあれこれフィルタすればできると思うが、
変数の中に改行が入ってる場合とか対応が面倒
bashなら変数名に特定のプリフィックスがついたものだけ
ダンプできたとは思うが他のシェルではそうは行かない
また、行ごとに変数すべてをsetしてevalとか
パフォーマンス悪そうだし。
setでシェル変数をダンプして、evalしてるんだが、
bashでは読み取り専用変数があってエラーになるから
setの出力をあれこれフィルタすればできると思うが、
変数の中に改行が入ってる場合とか対応が面倒
bashなら変数名に特定のプリフィックスがついたものだけ
ダンプできたとは思うが他のシェルではそうは行かない
また、行ごとに変数すべてをsetしてevalとか
パフォーマンス悪そうだし。
461デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/02(金) 10:11:28.72ID:GFVwJxnL0 >>457
そんな環境でPosix縛りだとしたら、プロジェクト自体が間違ってる。
そんな環境でPosix縛りだとしたら、プロジェクト自体が間違ってる。
462デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/02(金) 10:16:42.75ID:bE/8yEKV0 > そんな環境でPosix縛りだとしたら
実はPOSIXよりも状況が悪いw
使える機能がPOSIX未満なんだよ。
つまり一部の機能しか実装されていない
実はPOSIXよりも状況が悪いw
使える機能がPOSIX未満なんだよ。
つまり一部の機能しか実装されていない
463デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/02(金) 11:47:49.42ID:tmRne/9W0 ただの愚痴だけど
POSIXユーティリティにネットワーク通信が含まれてないのってマジで致命的欠陥だと思う。
POSIX原理主義とか,たしかに素晴らしい考えだとは思うけど,ネットワーク通信なくして現在のコンピュータを管理・運用するのは不可能っていうか
もしできてもすごくつまらないでしょう。
POSIXユーティリティにネットワーク通信が含まれてないのってマジで致命的欠陥だと思う。
POSIX原理主義とか,たしかに素晴らしい考えだとは思うけど,ネットワーク通信なくして現在のコンピュータを管理・運用するのは不可能っていうか
もしできてもすごくつまらないでしょう。
464デフォルトの名無しさん (オッペケ Srbb-t4vu)
2018/11/02(金) 12:35:03.14ID:e7WVTJJGr なんでバカって大げさに言いたがるんやw
致命的てwww
致命的てwww
465デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/02(金) 13:04:44.69ID:0QIYfvOaa >>464
大袈裟に言うなよ
大袈裟に言うなよ
466デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/02(金) 19:08:56.10ID:a5BSTCMR0 なぜか悔しがって意味不明なバカ>>465
どないなっとんねんおまえらwww
どないなっとんねんおまえらwww
467デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/02(金) 23:14:17.14ID:KoqyjIsr0 アンリカバブルな低学歴知恵遅れだからしょうがない
468デフォルトの名無しさん (ワッチョイ 769f-MyS3)
2018/11/03(土) 05:20:12.41ID:vg8hCxXN0 大げさだなあ
469デフォルトの名無しさん (ブーイモ MMba-MC7i)
2018/11/03(土) 06:43:33.72ID:9hr0em1cM 日常的に誇大妄想が激しいんだろ
470デフォルトの名無しさん (ワッチョイ b69f-8AGB)
2018/11/03(土) 17:50:12.58ID:GQ9FpTGT0 MicroPythonを実装した方が良さそう
組込にも対応してるから
組込にも対応してるから
471デフォルトの名無しさん (ワッチョイ bebe-YdG1)
2018/11/04(日) 08:48:54.81ID:S8h/cDRc0 コマンドを作っていてすこし疑問に思ったことなんだけど
--helpオプションで出力される文章って太字や着色なんかで装飾してもいいのかな。
「いいのかな」っていうか、そういうことしてるコマンドをほとんどみかけないので
もしかしたら「--helpオプションで出力される文章は装飾しないように」っていう規約がどこかにあるのかな と思ってさ。
--helpオプションで出力される文章って太字や着色なんかで装飾してもいいのかな。
「いいのかな」っていうか、そういうことしてるコマンドをほとんどみかけないので
もしかしたら「--helpオプションで出力される文章は装飾しないように」っていう規約がどこかにあるのかな と思ってさ。
472デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 10:11:04.15ID:Nn4ZdlZB0 >>471
それはいいアイデアだな。
コマンドの出力とは違ってヘルプを入力するプログラムなんて
無いだろうし、カラー専用でもいいくらいなんじゃないか?
そう考えると、manとかinfoもカラーにするべきなんだろうな
今どきカラー使えないとかまず無いし
色ももう16色に拘る必要もないだろう
最低でも256色、24bitカラーも普通に使っていいだろう
それはいいアイデアだな。
コマンドの出力とは違ってヘルプを入力するプログラムなんて
無いだろうし、カラー専用でもいいくらいなんじゃないか?
そう考えると、manとかinfoもカラーにするべきなんだろうな
今どきカラー使えないとかまず無いし
色ももう16色に拘る必要もないだろう
最低でも256色、24bitカラーも普通に使っていいだろう
473デフォルトの名無しさん (ワッチョイ c703-gRbH)
2018/11/04(日) 10:12:08.50ID:iTJ8u5Nd0 >>471
どこかにあったとしその素性のわからん規約におまえが従う必要ないやんアホなん?
どこかにあったとしその素性のわからん規約におまえが従う必要ないやんアホなん?
474デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/04(日) 11:08:19.99ID:Ok+6IZd3a 慣習は先人の知恵が詰まってる場合もある
自分勝手に振る舞う自称合理的よりよっぽど賢い質問だと思う
AIXはmanが黄色とか太字とかで修飾されてた気がするな
自分勝手に振る舞う自称合理的よりよっぽど賢い質問だと思う
AIXはmanが黄色とか太字とかで修飾されてた気がするな
475デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 11:17:07.51ID:Nn4ZdlZB0476デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 11:18:53.69ID:Nn4ZdlZB0 ↑ふざけとんのか
BASH(1) General Commands Manual BASH(1)
名名前前
bash - GNU Bourne-Again SHell
書書式式
bash [options] [file]
著著作作権権
Bash is Copyright (C) 1989-2011 by the Free Software Foundation, Inc.
説説明明
bash は、標準入力やファイルから読み込んだコマンドを実行する、 sh 互換のコマンド言語インタプリタです。 bash に
は、Korn シェルや C シェル ksh や csh) の便利な機能も採り入れられています。
bash は IEEE POSIX specification (IEEE Standard 1003.1) の Shell and Utilities に準拠する実装を目指していま
す。 bash はデフォルトで POSIX 準拠に設定することもできます。
オオププシショョンン
BASH(1) General Commands Manual BASH(1)
名名前前
bash - GNU Bourne-Again SHell
書書式式
bash [options] [file]
著著作作権権
Bash is Copyright (C) 1989-2011 by the Free Software Foundation, Inc.
説説明明
bash は、標準入力やファイルから読み込んだコマンドを実行する、 sh 互換のコマンド言語インタプリタです。 bash に
は、Korn シェルや C シェル ksh や csh) の便利な機能も採り入れられています。
bash は IEEE POSIX specification (IEEE Standard 1003.1) の Shell and Utilities に準拠する実装を目指していま
す。 bash はデフォルトで POSIX 準拠に設定することもできます。
オオププシショョンン
477デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 11:25:16.76ID:Nn4ZdlZB0478デフォルトの名無しさん (ワッチョイ bebe-YdG1)
2018/11/04(日) 11:56:45.43ID:S8h/cDRc0 >>472
24bitカラーはまだマズいと思う。
多くのXデスクトップ環境で利用されてる端末エミュレータ
(GNOME TerminalとかLXTerminalとか)は
LibVTEベースなのよ。
そしてLibVTEの安定板は24bitカラーには対応してない。
24bitカラーはまだマズいと思う。
多くのXデスクトップ環境で利用されてる端末エミュレータ
(GNOME TerminalとかLXTerminalとか)は
LibVTEベースなのよ。
そしてLibVTEの安定板は24bitカラーには対応してない。
479デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/04(日) 12:58:38.32ID:MKH8Qowh0 そういうのを根本的に対応できるようにするなら
roffが対応する部分になるからな
このスレでやってることは
池沼の塗り絵
roffが対応する部分になるからな
このスレでやってることは
池沼の塗り絵
480デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 13:16:39.02ID:Nn4ZdlZB0 >>478
WSLは対応したのに?
WSL その41 - Windowsのコンソールが24bitカラーをサポート・Bashからカラフルな出力が可能に
https://kledgeb.blogspot.com/2016/09/wsl-41-windows24bitbash.html
WSLは対応したのに?
WSL その41 - Windowsのコンソールが24bitカラーをサポート・Bashからカラフルな出力が可能に
https://kledgeb.blogspot.com/2016/09/wsl-41-windows24bitbash.html
481デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/04(日) 16:48:40.44ID:V6s3/sLe0 >>480
ま,まぁ? 24bitカラーなんて端末エミュレータの本来の機能じゃないし? (震え声)
ま,まぁ? 24bitカラーなんて端末エミュレータの本来の機能じゃないし? (震え声)
482デフォルトの名無しさん (ワッチョイ 769f-MyS3)
2018/11/04(日) 20:50:30.36ID:eEexL0w40483デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/04(日) 20:58:33.34ID:Nn4ZdlZB0484デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/04(日) 23:47:16.17ID:EATzJZ5p0 そして寒い寒いマシン室に押し込められる可哀想な
おじさん達のことは誰も考えてくれないんだよな。
おじさん達のことは誰も考えてくれないんだよな。
485デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/05(月) 00:50:02.70ID:8mReqxsGa かわいそう
486デフォルトの名無しさん (ワッチョイ ab98-QXT6)
2018/11/05(月) 01:09:40.53ID:LRv++2Wv0 マシン室が
487デフォルトの名無しさん (ワッチョイ 9a1d-MyS3)
2018/11/06(火) 16:17:47.15ID:Vcs848wz0 ... | sort -k 2.2 や
... | uniq -c
のような、パイプ挟んでもオプション使えるシェルスクリプトが書けません
これはどうやればいいのでしょうか?
... | uniq -c
のような、パイプ挟んでもオプション使えるシェルスクリプトが書けません
これはどうやればいいのでしょうか?
488デフォルトの名無しさん (ブーイモ MM7f-4S5W)
2018/11/06(火) 16:19:39.11ID:cucsRggBM 理解不能
489デフォルトの名無しさん (ワッチョイ 9a1d-MyS3)
2018/11/06(火) 16:27:38.20ID:Vcs848wz0 ... | perl -0777 -ne 'print grep(m{ココ1}i, split("(?=ココ2)", $_));'
例えばこのような文脈で動作させていたものを
パイプ移行をシェルスクリプトに書いておき
変数ココ1 ココ2 に渡して処理したいのです
| split_grep.sh ココ1 ココ2
このように動作させたいのですが
$1 $2 ... などを見ても 参照できてなくて困っています
例えばこのような文脈で動作させていたものを
パイプ移行をシェルスクリプトに書いておき
変数ココ1 ココ2 に渡して処理したいのです
| split_grep.sh ココ1 ココ2
このように動作させたいのですが
$1 $2 ... などを見ても 参照できてなくて困っています
490デフォルトの名無しさん (ブーイモ MM7f-4S5W)
2018/11/06(火) 16:53:48.26ID:7Ll1zO1lM ' だからじゃねえか?適切に " を使え。
491デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/06(火) 18:09:54.51ID:dlj8br7m0 --helpオプションで出力される手引きの装飾についてだが
less(1)ユーティリティは太字とにしてるね。
less(1)ユーティリティは太字とにしてるね。
492デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/06(火) 23:18:09.57ID:9jHKU1L00 シェルスクリプトは20年動くとか言ってるやつがいるけど、
あれ嘘だなぁ。
各シェルの実装は互換性がない部分があるし、
同じシェルでもバージョンが変わると微妙に動きが変わる
POSIXという仕様があってもそれを完全に実装しているとは
限らないしバグもある。
20年前のJavaScriptと同じようなレベルだ。
そのJavaScriptも20年前のものが今でも動いているからねw
今のJavaScriptは本当にどれもで同じように動くようになったけど20年前は大変だった。
どのシェルでも同じように動くシェルスクリプトを書くのは今でも大変だよ
一度互換性テストでもやって準拠度100%を達成を競わせたほうが良いだろう
あれ嘘だなぁ。
各シェルの実装は互換性がない部分があるし、
同じシェルでもバージョンが変わると微妙に動きが変わる
POSIXという仕様があってもそれを完全に実装しているとは
限らないしバグもある。
20年前のJavaScriptと同じようなレベルだ。
そのJavaScriptも20年前のものが今でも動いているからねw
今のJavaScriptは本当にどれもで同じように動くようになったけど20年前は大変だった。
どのシェルでも同じように動くシェルスクリプトを書くのは今でも大変だよ
一度互換性テストでもやって準拠度100%を達成を競わせたほうが良いだろう
493デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/07(水) 03:53:59.64ID:XzpCa+6s0 「POSIXという一つの規格」がなぜそんなに強力だと思うのか分からない。
Pythonの公式文書やECMAが規格するJavaScriptと同等の立場でしょう。
もちろん,俺がシェルスクリプトを書くときは,俺がPythonやJavaScriptを書くときと同じく
POSIXという共通規格に従うようにしているが,それは今後20年動かす為じゃない。
Pythonの公式文書やECMAが規格するJavaScriptと同等の立場でしょう。
もちろん,俺がシェルスクリプトを書くときは,俺がPythonやJavaScriptを書くときと同じく
POSIXという共通規格に従うようにしているが,それは今後20年動かす為じゃない。
494デフォルトの名無しさん (オッペケ Srbb-elto)
2018/11/07(水) 09:26:49.70ID:66xysPr5r cronから実行しているシェル(スクリプト)があるんだけど
2重実行されると問題があるので
そのシェルをくるむ親シェルを作って
そこで事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる
でも最近もともと実行してるシェルを複数回ループで実行したい要件が出てきた
単純に親シェルでループさせることを考えたけど
pkillしてもループで再実行されてkill出来ずに2重実行される問題が出てくる
シェルを親子孫の3階層にして新しく間に挟む子シェルでループさせ
親シェルのpkillではこの子と孫とコマンドをkillするといいと思うんだけど
階層が深くなって嫌だなと思うんだけど何かいい案ない?
ちなみに孫シェルでループってのも考えたけど
cron以外ではループさせたくない場合が多いので
そこには手を加えずシンプルなままとしたいため考慮から外しました
2重実行されると問題があるので
そのシェルをくるむ親シェルを作って
そこで事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる
でも最近もともと実行してるシェルを複数回ループで実行したい要件が出てきた
単純に親シェルでループさせることを考えたけど
pkillしてもループで再実行されてkill出来ずに2重実行される問題が出てくる
シェルを親子孫の3階層にして新しく間に挟む子シェルでループさせ
親シェルのpkillではこの子と孫とコマンドをkillするといいと思うんだけど
階層が深くなって嫌だなと思うんだけど何かいい案ない?
ちなみに孫シェルでループってのも考えたけど
cron以外ではループさせたくない場合が多いので
そこには手を加えずシンプルなままとしたいため考慮から外しました
495デフォルトの名無しさん (ブーイモ MM26-4S5W)
2018/11/07(水) 09:42:23.92ID:+ld6QnEyM pkillとか野蛮な方法じゃなくて、ちゃんとロックして、ロック取れなければ死ねばいいのでは?
496デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 09:48:09.44ID:bimd4khFa もしflockコマンドがあればそれで可能な筈。
497デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 09:48:23.84ID:v2POOMdv0 どこまでの子プロセスとか残る可能性がとか条件が全然わからんが、シェルスクリプトを2重実行しないようにだけなら、その冒頭で、
[ -f /var/run/hogehogeshellscript.pid ] && kill -0 $(cat /var/run/hogehogeshellscript.pid) && exit 0
printf "%d" $$ > /var/run/hogehogeshellscript.pid
後始末で
rm -f /var/run/hogehogeshellscript.pid
が常套手段だな、俺は。「事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる」なんて、バグって残る場合しか考えられない(そんな動いているの殺していいの??)
[ -f /var/run/hogehogeshellscript.pid ] && kill -0 $(cat /var/run/hogehogeshellscript.pid) && exit 0
printf "%d" $$ > /var/run/hogehogeshellscript.pid
後始末で
rm -f /var/run/hogehogeshellscript.pid
が常套手段だな、俺は。「事前にpkillで実行されているシェルおよびコマンドを無条件にkillしてる」なんて、バグって残る場合しか考えられない(そんな動いているの殺していいの??)
498デフォルトの名無しさん (ワッチョイ 9a7f-yep2)
2018/11/07(水) 09:55:36.16ID:zUpUn5UV0 そもそも考え方自体が理解しがたい
こんなクソなことやり出すやつとは仕事したくない
こんなクソなことやり出すやつとは仕事したくない
499デフォルトの名無しさん (ブーイモ MM26-4S5W)
2018/11/07(水) 09:56:12.27ID:+ld6QnEyM500デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 10:01:20.98ID:v2POOMdv0501デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:16:33.73ID:UCphLCxy0 バグの言い訳をシェルスクリプトのせいにするなよ
シェルスクリプト以外でもやり方は一緒だろ
それともシェルスクリプトでは不可能で
他の言語なら可能な方法があるとでも言うのか?
> そんな超短時間で多重起動されうるもんなんて、シェルスクリプトなんて書かない
シェルスクリプト以外でいいんで、どうやるのか答えてみて
シェルスクリプト以外でもやり方は一緒だろ
それともシェルスクリプトでは不可能で
他の言語なら可能な方法があるとでも言うのか?
> そんな超短時間で多重起動されうるもんなんて、シェルスクリプトなんて書かない
シェルスクリプト以外でいいんで、どうやるのか答えてみて
502デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:40:25.66ID:v2POOMdv0 バグの言い訳??
そんなタイミングにシビアなのは普通にCなりで書くけど?なんか知らんがシェルスクリプトで処理スピードに必死なヤツもいるけど、そんなに時間にシビアなら普通にCでするだろう(一部でも)
てか、デーモンだろな。別にシェルスクリプトでデーモン書いてもいいけど、小回りが利くのはやっぱCなりの方だな
そんなタイミングにシビアなのは普通にCなりで書くけど?なんか知らんがシェルスクリプトで処理スピードに必死なヤツもいるけど、そんなに時間にシビアなら普通にCでするだろう(一部でも)
てか、デーモンだろな。別にシェルスクリプトでデーモン書いてもいいけど、小回りが利くのはやっぱCなりの方だな
503デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:41:10.13ID:UCphLCxy0 いや、だから、C言語でいいんで、多重起動しない方法書いてみてって、
どうせそれがシェルスクリプトでも使えるだろ
どうせそれがシェルスクリプトでも使えるだろ
504デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:48:02.80ID:v2POOMdv0 何に絡んでいるのかわからん
粒度が全然違うことなぞCで何か書いたことがあるのならわかるだろう。>>499がその粒度の話だからな
粒度が全然違うことなぞCで何か書いたことがあるのならわかるだろう。>>499がその粒度の話だからな
505デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:50:35.19ID:UCphLCxy0 絡んでいない。C言語で多重起動しない方法は
シェルスクリプトでも使えると言ってる
だからシェルスクリプトで書かない理由にはならない
シェルスクリプトでも使えると言ってる
だからシェルスクリプトで書かない理由にはならない
506デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:52:41.86ID:v2POOMdv0 だから、粒度って言ってるじゃん。わからんのだな。話にならんな
507デフォルトの名無しさん (アウアウカー Sac3-68Wn)
2018/11/07(水) 11:55:02.47ID:oFuFuwyAa 結論の出ない子供同士の戦い
ファイッ
ファイッ
508デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 11:55:08.02ID:UCphLCxy0 > 粒度って言ってるじゃん
なんの説明にも反論にもなってない
粒度が違っても関係ない話だろ(他の人には「粒度」といい方で伝わってるはずw)
なんの説明にも反論にもなってない
粒度が違っても関係ない話だろ(他の人には「粒度」といい方で伝わってるはずw)
509デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:56:38.86ID:v2POOMdv0 うるせっw
どうもシェルスクリプト大好き(後は私怨かなあとw)な絡みで、それ視点でしかなのでうやむやにしてんだけどね。言ったってたぶん聞かない人だから
どうもシェルスクリプト大好き(後は私怨かなあとw)な絡みで、それ視点でしかなのでうやむやにしてんだけどね。言ったってたぶん聞かない人だから
510デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 11:59:05.62ID:v2POOMdv0511デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:06:12.02ID:UCphLCxy0 > 余計なことがない方が粒度が細かい
粒度の使い方を待ちってるだけじゃないか
で、デーモンにしないと多重起動は防げないって話をしてんのか?
デーモンにすれば多重起動を防げる理由は?
ほらな、突っ込まれるとこの程度、答えられないんだよw
粒度の使い方を待ちってるだけじゃないか
で、デーモンにしないと多重起動は防げないって話をしてんのか?
デーモンにすれば多重起動を防げる理由は?
ほらな、突っ込まれるとこの程度、答えられないんだよw
512デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 12:07:51.60ID:8DqZdVO16 すまん 口を挟むけど
「
1.
シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
可搬な方法ではほとんど制御できない。
一方でCはそもそもOSがそれで書かれているように、上記の事柄を比較的簡単に実現できる。
2.
ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
3.
よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
だから無意味
」
↑こういう理解でいいか?
「
1.
シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
可搬な方法ではほとんど制御できない。
一方でCはそもそもOSがそれで書かれているように、上記の事柄を比較的簡単に実現できる。
2.
ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
3.
よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
だから無意味
」
↑こういう理解でいいか?
513デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:09:17.82ID:v2POOMdv0 >>511
>粒度の使い方を待ちってる(間違ってる)だけじゃないか
はあ?
>デーモンにすれば多重起動を防げる理由は
はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
>粒度の使い方を待ちってる(間違ってる)だけじゃないか
はあ?
>デーモンにすれば多重起動を防げる理由は
はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
514デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:16:34.30ID:v2POOMdv0 >>512
別に無意味とは言わないよ。俺は書かないというだけで。なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。それならCでのほうがスッキリ小回りが利くしという
後は、超短時間で多重起動されうるもんなんてよりCで書くなという、そんな起動頻度のあるのは、スクリプトではしない
別に無意味とは言わないよ。俺は書かないというだけで。なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。それならCでのほうがスッキリ小回りが利くしという
後は、超短時間で多重起動されうるもんなんてよりCで書くなという、そんな起動頻度のあるのは、スクリプトではしない
515デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:21:30.58ID:UCphLCxy0 >>512
> シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
> 可搬な方法ではほとんど制御できない。
それはプロセスの多重起動を防ぐ方法と関係ない
> ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
コマンドの制御時間やファイルの扱いとかなんの話をしてるのか
>>497はアルゴリズムの間違いなのでロックファイルがどうとか関係ない
(どうせC言語で作っても同じ間違いをするだろう)
> よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
今はプロセスの多重起動の話でしか無いので、多重起動が出来ないならば運用に耐えられる
それがシェルスクリプトできないわけがない。
> シェルスクリプトは各コマンドの起動時間やカーネルがファイルをどのように扱うということを
> 可搬な方法ではほとんど制御できない。
それはプロセスの多重起動を防ぐ方法と関係ない
> ロックファイルを用いた多重起動防止アルゴリズムにはコマンドの制御時間やファイルの扱いを考える必要がある。
コマンドの制御時間やファイルの扱いとかなんの話をしてるのか
>>497はアルゴリズムの間違いなのでロックファイルがどうとか関係ない
(どうせC言語で作っても同じ間違いをするだろう)
> よってCと同じアルゴリズムをシェルスクリプトで記述しても それは運用に耐えるものでなくなってしまう。
今はプロセスの多重起動の話でしか無いので、多重起動が出来ないならば運用に耐えられる
それがシェルスクリプトできないわけがない。
516デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:24:39.53ID:UCphLCxy0 >>513
> はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
デーモンが一つ動けば十分だとかそういう話をしてるんじゃない。
プロセスの多重起動を防ぐにはどうするかの話で、、
それはデーモンにしないと出来ないことではないだろ
>>514
> なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。
だから、なんでシェルスクリプトにこだわってるのか?
こっちはお前が、プロセスの多重起動を防ぐ正しい方法を知らないんだろうなって思ってるんだよ。
だからC言語でいいから書いてみろと。
同じアルゴリズムはシェルスクリプトでも使えるから、シェルスクリプトかどうかの話じゃないって言ってんの
で、C言語でプロセスの多重起動を防ぐ正しい方法を書けないんだろう?
出てないってことそういうことだ。シェルスクリプトだからと嘘をつくな
> はあ?デーモンは一つ動けば十分だからな。ま・さ・か、デーモンにしても多重起動を防げないとか言い出してるわけ?だとしたらアホだな
デーモンが一つ動けば十分だとかそういう話をしてるんじゃない。
プロセスの多重起動を防ぐにはどうするかの話で、、
それはデーモンにしないと出来ないことではないだろ
>>514
> なんでシェルスクリプトでタイミング的な諸々をシェルスクリプトというある意味隠蔽された条件制約で悩まなくちゃならんねんってとこから。
だから、なんでシェルスクリプトにこだわってるのか?
こっちはお前が、プロセスの多重起動を防ぐ正しい方法を知らないんだろうなって思ってるんだよ。
だからC言語でいいから書いてみろと。
同じアルゴリズムはシェルスクリプトでも使えるから、シェルスクリプトかどうかの話じゃないって言ってんの
で、C言語でプロセスの多重起動を防ぐ正しい方法を書けないんだろう?
出てないってことそういうことだ。シェルスクリプトだからと嘘をつくな
517デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:24:57.98ID:v2POOMdv0518デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:26:20.56ID:v2POOMdv0 >>516
ただのイチャモンやん。また、無茶苦茶やな。なにを問題にしているのかイミフ。いちゃもんのためのいちゃもんやなあ
ただのイチャモンやん。また、無茶苦茶やな。なにを問題にしているのかイミフ。いちゃもんのためのいちゃもんやなあ
519デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:29:45.81ID:UCphLCxy0520デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 12:31:32.56ID:UCphLCxy0 あ、>>517って俺の書き込みか
わかるように書けよw
わかるように書けよw
521デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:33:40.01ID:v2POOMdv0 >>519
うーむ、だから粒度の問題と言っているんだけど。なにがアルゴリズムに問題があるの?cronで起動する大きな粒度では問題ないと思うけど
あるとしたら、起動終了間近とか??それは別の話だろうしな???
うーむ、だから粒度の問題と言っているんだけど。なにがアルゴリズムに問題があるの?cronで起動する大きな粒度では問題ないと思うけど
あるとしたら、起動終了間近とか??それは別の話だろうしな???
522デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:35:54.84ID:v2POOMdv0523デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:39:53.83ID:v2POOMdv0524デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 12:40:36.54ID:8DqZdVO16 >>515
俺は「プロセスの多重起動を防ぐ」というのを
「プロセスを一つ立ち上がっていることを感知する」
という仕組みを作ることだと思っていて、その方法の一つに
「プロセスが起動するときに特定のファイルを生成し
そして終了するときそのファイルを削除する
(そして そのファイルの有無によって多重起動を判断する)」
というものがある という認識。
「特定のファイル」はロックファイルと呼ばれる。
で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
最初に起動したプロセスがロックファイルを生成し終える前に
二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
(結果として二重起動する)
ということだと思っている。
このときに関わってくるのはファイルIOとかその辺のカーネル領域に片足突っ込んだ話なので
Cではできるがシェルスクリプトでは難しいということだと考えたんだけど
違いますかね。
俺は「プロセスの多重起動を防ぐ」というのを
「プロセスを一つ立ち上がっていることを感知する」
という仕組みを作ることだと思っていて、その方法の一つに
「プロセスが起動するときに特定のファイルを生成し
そして終了するときそのファイルを削除する
(そして そのファイルの有無によって多重起動を判断する)」
というものがある という認識。
「特定のファイル」はロックファイルと呼ばれる。
で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
最初に起動したプロセスがロックファイルを生成し終える前に
二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
(結果として二重起動する)
ということだと思っている。
このときに関わってくるのはファイルIOとかその辺のカーネル領域に片足突っ込んだ話なので
Cではできるがシェルスクリプトでは難しいということだと考えたんだけど
違いますかね。
525デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 12:43:18.47ID:bimd4khFa flockコマンド使えって。シェル単体ではそこまでやってくれるやつは多分ないだろうし。
526デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 12:47:11.27ID:v2POOMdv0527デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/07(水) 12:56:45.06ID:sVRrLKNr0528デフォルトの名無しさん (ワッチョイ 038a-Mg3v)
2018/11/07(水) 12:58:34.71ID:sVRrLKNr0 >>525
POSIXにないんでしょ、多分
POSIXにないんでしょ、多分
529デフォルトの名無しさん (ブーイモ MM26-4S5W)
2018/11/07(水) 13:04:03.69ID:jS/U4UFDM flockがあればそれでいいけど、なくてもmkdirとかln -sで正しいロックが書けるよ
530デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 13:04:59.10ID:bimd4khFa ロックファイルの有無だけでやる場合は open() で O_EXCL 指定してファイル作ろうとしないと駄目で、シェルスクリプトからこれがやれるかどうかはシェル次第になる。
そういう外部コマンド作って呼び出せば確実だが、それがありなら fcntl() や flock() 等を使ったもう少し信頼性の高そうなロックをした方が良いように思う。
ロックファイルだけでロックする場合はもう一つ強制終了させられた時にファイルが消せずに残る問題がある。
これはファイルのタイムスタンプを見て古ければ動いていないとみなす方法である程度回避可能だが、その場合は動いているプロセスが定期的にファイルを touch する等して更新する必要がある。
しかしそれでも SIGSTOP により停止していただけだったら役に立たない。
そういう外部コマンド作って呼び出せば確実だが、それがありなら fcntl() や flock() 等を使ったもう少し信頼性の高そうなロックをした方が良いように思う。
ロックファイルだけでロックする場合はもう一つ強制終了させられた時にファイルが消せずに残る問題がある。
これはファイルのタイムスタンプを見て古ければ動いていないとみなす方法である程度回避可能だが、その場合は動いているプロセスが定期的にファイルを touch する等して更新する必要がある。
しかしそれでも SIGSTOP により停止していただけだったら役に立たない。
531デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 13:05:12.80ID:8DqZdVO16 https://qiita.com/richmikan@github/items/6ca1ec3b354ae2f5505d
「シェルスクリプト 排他制御」でググったらこんな記事があったよ。
「シェルスクリプト 排他制御」でググったらこんな記事があったよ。
532デフォルトの名無しさん (アウアウウー Sac7-AdN2)
2018/11/07(水) 13:06:37.34ID:bimd4khFa >>529
ああ。それでもできるか。
ああ。それでもできるか。
533デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 13:22:04.61ID:v2POOMdv0 なるほど、OS内でキッチリ一元管理しているナニカに頼ればいいのか&あるのか
534デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:40:10.94ID:UCphLCxy0 >>524
> で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
> 最初に起動したプロセスがロックファイルを生成し終える前に
> 二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
> (結果として二重起動する)
正しくない
正しいロックファイルアルゴリズムであれば、素早く二つのプロセスを立ち上げても問題ない
あんたが書いたそれはは典型的な間違ったロックファイルアルゴリズム(そして>>497も同様)
アルゴリズム自体の問題なのでシェルスクリプトかどうかは関係ない
直接的な解答ではなくて関連した話題になるが、多重起動防止以外でも重要だから読んどけ
https://www.ibm.com/developerworks/jp/linux/library/l-sprace/index.html
> 単純な解決方法は、open()をフラグO_WRONLY | O_CREAT | O_EXCLで使うことです
https://www.ipa.go.jp/security/fy20/reports/tech1-tg/2_05.html
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
> で ロックファイルアルゴリズムの問題点は非常に素早く二つのプロセスを立ち上げた時に
> 最初に起動したプロセスがロックファイルを生成し終える前に
> 二番目のプロセスがロックファイルが存在しないのを理由に立ち上がってしまう
> (結果として二重起動する)
正しくない
正しいロックファイルアルゴリズムであれば、素早く二つのプロセスを立ち上げても問題ない
あんたが書いたそれはは典型的な間違ったロックファイルアルゴリズム(そして>>497も同様)
アルゴリズム自体の問題なのでシェルスクリプトかどうかは関係ない
直接的な解答ではなくて関連した話題になるが、多重起動防止以外でも重要だから読んどけ
https://www.ibm.com/developerworks/jp/linux/library/l-sprace/index.html
> 単純な解決方法は、open()をフラグO_WRONLY | O_CREAT | O_EXCLで使うことです
https://www.ipa.go.jp/security/fy20/reports/tech1-tg/2_05.html
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
535デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:43:12.68ID:UCphLCxy0 もう少し引用する範囲を広げる
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
> これを POSIX シェルで行うには、set -C を使う。set -C は noclobber オプションを有効にする。
> noclobber が有効な場合、> によるリダイレクトでの open には O_EXCL が指定される。
> これを使ってテンポラリファイルの生成に挑戦し、失敗したときは終了するには以下のようにする。
> また、ここでは TMPDIR が指定された場合には使うようにしている。
> これを避けるためには先に述べたとおり、テンポラリファイルを生成するときに O_EXCL を指定すればよい。
> これを POSIX シェルで行うには、set -C を使う。set -C は noclobber オプションを有効にする。
> noclobber が有効な場合、> によるリダイレクトでの open には O_EXCL が指定される。
> これを使ってテンポラリファイルの生成に挑戦し、失敗したときは終了するには以下のようにする。
> また、ここでは TMPDIR が指定された場合には使うようにしている。
536デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:44:46.92ID:UCphLCxy0537デフォルトの名無しさん (ワッチョイ 039f-VYDo)
2018/11/07(水) 13:45:31.17ID:v2POOMdv0 ほんと場合によってってって無いやつだな。原理主義者か?
538デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 13:49:03.61ID:8DqZdVO16539デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 13:57:13.33ID:UCphLCxy0 ロックの確認とロックかけるのをアトミックにやらないとか
まともにロック処理やったことがない証拠だよ
これは初心者は誰でもやる典型的な間違いだからな
基本を知らずに独自の思いつきで実装するからそうなる
言われれ初めて気づく。だが一回言われればこうやれば
解決できるのかと深く記憶する話だから、単純に知識が欠けてるということ
だから他の言語でもどうせ同じなんだろということ。
まともにロック処理やったことがない証拠だよ
これは初心者は誰でもやる典型的な間違いだからな
基本を知らずに独自の思いつきで実装するからそうなる
言われれ初めて気づく。だが一回言われればこうやれば
解決できるのかと深く記憶する話だから、単純に知識が欠けてるということ
だから他の言語でもどうせ同じなんだろということ。
540デフォルトの名無しさん (ガックシ 06b6-ofXo)
2018/11/07(水) 15:22:16.58ID:8DqZdVO16 ksh --helpは出力される手引きが装飾されてるね
541デフォルトの名無しさん (ブーイモ MM7f-bq42)
2018/11/07(水) 15:56:27.81ID:A+xcJusCM 最初っから主張の根拠を提示すれば良かったのに
何だかんだで下らないレスが続くの止めて欲しい
何だかんだで下らないレスが続くの止めて欲しい
542デフォルトの名無しさん (アウアウエー Sa52-lVsa)
2018/11/07(水) 17:41:34.46ID:P+AQGnBFa echo "echo \"Hello, world\!\""
これ実行したら
echo "Hello, world!"
にならない
echo "Hello, world\!"
なぜか!だけ手前についてしまう
これ実行したら
echo "Hello, world!"
にならない
echo "Hello, world\!"
なぜか!だけ手前についてしまう
543デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/07(水) 18:45:58.27ID:XzpCa+6s0544デフォルトの名無しさん (ワッチョイ 5b64-ofXo)
2018/11/07(水) 18:49:27.43ID:XzpCa+6s0 間違えてた。
「echo "echo \"Hello, world!\""」にして。
スクリプトの中ではPOSIX互換のインタラクティブシェルは
履歴展開をしないので上手くいく。
「echo "echo \"Hello, world!\""」にして。
スクリプトの中ではPOSIX互換のインタラクティブシェルは
履歴展開をしないので上手くいく。
545デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 19:24:02.67ID:UCphLCxy0 そういやkshで思い出したけど、
ksh88ってもしかして比較的最近(今も?)使われてたりする?
ksh88っていうぐらいだから1988年だろ?ksh93っていうぐらいだから1993年だろ?
流石にksh88はなんて30年前の化石使われてないだろ?と思ったけど
Solaris 11 でこんなこと書かれてたんだよね。意外と最近まで使われていたのかなぁ?と
https://docs.oracle.com/cd/E26924_01/html/E25934/userenv-1.html
> シェルの変更 - デフォルトのシェル /bin/sh が ksh93 にリンクされるようになりました。
> レガシー Bourne シェルは /usr/sunos/bin/sh として使用可能です。
> 旧バージョンの ksh88 は、shell/ksh88 パッケージの /usr/sunos/bin/ksh として使用可能になっています。
Solaris 11が最新版って言っても2011年11月9日リリースなので2日後に7年前のOSになるけど
(でもサポートはSolaris 10が2021年までなのか・・・)
そしてksh93の機能でこんな事書いてたんで、$(( )) が使えないシェルはksh88だったんだなって思ったところ
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/com.ibm.aix.osdevice/korn_shell_enhanced.htm
ksh88ってもしかして比較的最近(今も?)使われてたりする?
ksh88っていうぐらいだから1988年だろ?ksh93っていうぐらいだから1993年だろ?
流石にksh88はなんて30年前の化石使われてないだろ?と思ったけど
Solaris 11 でこんなこと書かれてたんだよね。意外と最近まで使われていたのかなぁ?と
https://docs.oracle.com/cd/E26924_01/html/E25934/userenv-1.html
> シェルの変更 - デフォルトのシェル /bin/sh が ksh93 にリンクされるようになりました。
> レガシー Bourne シェルは /usr/sunos/bin/sh として使用可能です。
> 旧バージョンの ksh88 は、shell/ksh88 パッケージの /usr/sunos/bin/ksh として使用可能になっています。
Solaris 11が最新版って言っても2011年11月9日リリースなので2日後に7年前のOSになるけど
(でもサポートはSolaris 10が2021年までなのか・・・)
そしてksh93の機能でこんな事書いてたんで、$(( )) が使えないシェルはksh88だったんだなって思ったところ
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/com.ibm.aix.osdevice/korn_shell_enhanced.htm
546デフォルトの名無しさん (アウアウエー Sa52-lVsa)
2018/11/07(水) 20:49:34.06ID:nHlOtVrla547デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/07(水) 20:55:26.75ID:XzpCa+6s0548デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/07(水) 21:01:40.12ID:XzpCa+6s0 >>546
「echo "echo \"Hello, world"'!'"\""」とかどうだろう。
参考: https://www.gnu.org/software/bash/manual/html_node/History-Interaction.html#History-Interaction
History expansions are introduced by the appearance of the history expansion character, which is ‘!’ by default. Only ‘\’ and ‘'’ may be used to escape the history expansion character,
but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string.
「echo "echo \"Hello, world"'!'"\""」とかどうだろう。
参考: https://www.gnu.org/software/bash/manual/html_node/History-Interaction.html#History-Interaction
History expansions are introduced by the appearance of the history expansion character, which is ‘!’ by default. Only ‘\’ and ‘'’ may be used to escape the history expansion character,
but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string.
549デフォルトの名無しさん (ワッチョイ 9a98-QXT6)
2018/11/07(水) 21:21:50.95ID:UCphLCxy0 >>547
ksh・・・お前が諸悪の根源だったか
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861743
> % posh -u -c 'echo "$@"'
> posh: @: parameter not set
poshはpdkshからフォークしている
> posh (0.0.1) unstable; urgency=low
> * Initial release. (copied from pdksh 5.2.14-6). closes: bug#150431.
そしてシンプルな(笑)解決方法をありがとう
(if書くのはもっと面倒だった)
もっとバッドノウハウあったら教えてくれ!
ksh・・・お前が諸悪の根源だったか
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861743
> % posh -u -c 'echo "$@"'
> posh: @: parameter not set
poshはpdkshからフォークしている
> posh (0.0.1) unstable; urgency=low
> * Initial release. (copied from pdksh 5.2.14-6). closes: bug#150431.
そしてシンプルな(笑)解決方法をありがとう
(if書くのはもっと面倒だった)
もっとバッドノウハウあったら教えてくれ!
550デフォルトの名無しさん (ワッチョイ 5b64-74J5)
2018/11/07(水) 22:18:01.95ID:XzpCa+6s0 >>549
あー。分かってると思うがこれは俺が考えた方法じゃない。
古いGNU grepでegrepコマンドを
https://git.savannah.gnu.org/cgit/grep.git/tree/src/Makefile.am?h=v2.5.1#n23
↑こうやって作ってたのを見掛けてさ。
これはすごい方法だと思って自分のシェルスクリプトに取り入れた。
でもPOSIX 2013でset -uが有効のときでも空の変数$@および変数$*がエラーにならない
っていうことが決定されたのでもう不必要。
http://pubs.opengroup.org/onlinepubs/9699919799.2013edition/utilities/V3_chap02.html#tag_18_25_18
あー。分かってると思うがこれは俺が考えた方法じゃない。
古いGNU grepでegrepコマンドを
https://git.savannah.gnu.org/cgit/grep.git/tree/src/Makefile.am?h=v2.5.1#n23
↑こうやって作ってたのを見掛けてさ。
これはすごい方法だと思って自分のシェルスクリプトに取り入れた。
でもPOSIX 2013でset -uが有効のときでも空の変数$@および変数$*がエラーにならない
っていうことが決定されたのでもう不必要。
http://pubs.opengroup.org/onlinepubs/9699919799.2013edition/utilities/V3_chap02.html#tag_18_25_18
551デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 00:40:04.66ID:rJTiWJ810 >>550
modernishでも言及されてた。時代遅れのワークアラウンドだってw
でも現存するシェルに蘇っておるのじゃよ
昔の人には有名な回避策なのかな?
https://github.com/modernish/modernish/blob/master/README.md
> BUG_PARONEARG: When IFS is empty on bash 3.x and 4.x (i.e. field splitting is off),
> ${1+"$@"} is counted as a single argument instead of each positional parameter as
> separate arguments. To avoid this bug, simply use "$@" instead. (${1+"$@"}
> is an obsolete workaround for a fatal shell bug, FTL_UPP.)
modernishでも言及されてた。時代遅れのワークアラウンドだってw
でも現存するシェルに蘇っておるのじゃよ
昔の人には有名な回避策なのかな?
https://github.com/modernish/modernish/blob/master/README.md
> BUG_PARONEARG: When IFS is empty on bash 3.x and 4.x (i.e. field splitting is off),
> ${1+"$@"} is counted as a single argument instead of each positional parameter as
> separate arguments. To avoid this bug, simply use "$@" instead. (${1+"$@"}
> is an obsolete workaround for a fatal shell bug, FTL_UPP.)
552デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/08(木) 06:54:13.32ID:RnVV1kHy0 modernishおもしろいね。
modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_05
ここには確かに開き丸括弧を前置してもいいとあるけど一般的には省略されるでしょ。
なにかこれも旧時代のシェルの不具合への回避策なのかな。
それこそGNU Bash 3.xで動かない,とか。
modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_05
ここには確かに開き丸括弧を前置してもいいとあるけど一般的には省略されるでしょ。
なにかこれも旧時代のシェルの不具合への回避策なのかな。
それこそGNU Bash 3.xで動かない,とか。
553デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 21:39:50.16ID:rJTiWJ810 >>552
やっとmodernishに興味を持ってくれた人がw
まあ俺もバグ情報とか参考になるなって程度にしか見てないんだけど
> modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
それ見た時、何この文法?modernishでそこまで拡張できるの?って驚いたw
単なる普通の文法だったわけだけど
> それこそGNU Bash 3.xで動かない,とか。
少なくともbash 2.03では開き括弧なくて動くよ
やっとmodernishに興味を持ってくれた人がw
まあ俺もバグ情報とか参考になるなって程度にしか見てないんだけど
> modernishプロジェクトはcase文の条件の先頭に開き丸括弧を付けてるのか。
それ見た時、何この文法?modernishでそこまで拡張できるの?って驚いたw
単なる普通の文法だったわけだけど
> それこそGNU Bash 3.xで動かない,とか。
少なくともbash 2.03では開き括弧なくて動くよ
554デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 21:43:11.48ID:rJTiWJ810 話変わるけど、 foo | bar みたいなコマンドで
fooからたくさん出力されるけど、barの処理が遅いってとき
fooからの出力ってブロックされるのかな?
なんか20〜30行ぐらいでブロックされるような
出力の停止、遅延が起きてる気がする
メモリにバッファリングするだろうから、それが溢れないような処置として
そういう仕様は理解できるけど、どこかに書いてあるのかな?
シェルの仕様っぽい気がするけど、OSも絡んでいそうな気もする
fooからたくさん出力されるけど、barの処理が遅いってとき
fooからの出力ってブロックされるのかな?
なんか20〜30行ぐらいでブロックされるような
出力の停止、遅延が起きてる気がする
メモリにバッファリングするだろうから、それが溢れないような処置として
そういう仕様は理解できるけど、どこかに書いてあるのかな?
シェルの仕様っぽい気がするけど、OSも絡んでいそうな気もする
555デフォルトの名無しさん (ワッチョイ 418a-ANGR)
2018/11/08(木) 21:57:11.56ID:M53t5TPP0 >>554
タネンバウム先生の本は読んでるんだよね?
タネンバウム先生の本は読んでるんだよね?
556デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 21:59:18.34ID:rJTiWJ810 >>555
読んでないよ。どれ読めばいい?
読んでないよ。どれ読めばいい?
557デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/08(木) 22:12:14.64ID:RnVV1kHy0 全然かわいくないアライグマの表紙の本じゃない?
558デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 22:21:06.03ID:rJTiWJ810 お、再現した
i=0
while :; do
i=$((i+1))
echo test$i
echo log$i>&2
done | while read line; do
echo $line
sleep 3
done
パイプの前で無限ループで標準出力と標準エラー出力に高速に出力してるとき
パイプの後ろの遅い標準入力から入力の処理によって
パイプの前の標準エラー出力への出力がブロックされてる
7400行(64KB程度?)ぐらいまでは、パイプの後ろの処理を待つことなく高速に
標準エラー出力に出力するが、それ移行は1行ずつ出力するようになった。
i=0
while :; do
i=$((i+1))
echo test$i
echo log$i>&2
done | while read line; do
echo $line
sleep 3
done
パイプの前で無限ループで標準出力と標準エラー出力に高速に出力してるとき
パイプの後ろの遅い標準入力から入力の処理によって
パイプの前の標準エラー出力への出力がブロックされてる
7400行(64KB程度?)ぐらいまでは、パイプの後ろの処理を待つことなく高速に
標準エラー出力に出力するが、それ移行は1行ずつ出力するようになった。
559デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/08(木) 22:23:20.00ID:rJTiWJ810560デフォルトの名無しさん (ワッチョイ db9f-9t8X)
2018/11/09(金) 04:14:42.04ID:hZOut+vv0561デフォルトの名無しさん (ワッチョイ 2b80-KpfW)
2018/11/09(金) 04:37:21.46ID:WTWdJdbs0 パイプは、入力が来るまで、ブロックされる
562デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/09(金) 05:22:03.56ID:3ZHBVzZ50 いわゆる普通のプログラミング言語(PythonやCやJavaScript)に対して,シェルスクリプトを作る上で気をつけてることってある?
例えば「局所変数や局所関数が宣言できないのでなるべく使わない」とかさ。
例えば「局所変数や局所関数が宣言できないのでなるべく使わない」とかさ。
563デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 08:16:02.70ID:UVRb8J0Z0564デフォルトの名無しさん (ワッチョイ dbe7-Llh/)
2018/11/09(金) 08:22:51.21ID:PBD+wepW0 パイプはカットすればいい
565デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 08:36:27.28ID:UVRb8J0Z0 >>562
個人的な特殊な状況下で気をつけてることならたくさんあるんだけどな
パイプを(なるべく)使わないとかwww
そうさなぁ、例えば意図せぬエラーで落ちるように、set -eを使う場合は
挙動をよく理解して使うこととかかな
set -eは戻り値がエラーになった時点で中断される
set -e
foo() { echo foo begin; bar; echo foo end; }
bar() { echo bar begin; baz; echo bar end; }
baz() { echo baz; false; }
foo
これを実行すると、foo -> bar -> baz の呼び出しの流れが、bazのfalseで中断されて
foo begin
bar begin
baz
と表示されるんだが
foo の代わりに if foo; then :; fi と実行すると
なんと、foo end も bar end も表示されるんだよ
つまり foo を if や && や || と組み合わせて使うと、エラー中断機能が無効化される
だから、比較関数みたいに if foo; then という使い方を想定している関数は
中でしっかりエラーチェックをしておくこと
他の言語の例外みたいに考えてはいけない
個人的な特殊な状況下で気をつけてることならたくさんあるんだけどな
パイプを(なるべく)使わないとかwww
そうさなぁ、例えば意図せぬエラーで落ちるように、set -eを使う場合は
挙動をよく理解して使うこととかかな
set -eは戻り値がエラーになった時点で中断される
set -e
foo() { echo foo begin; bar; echo foo end; }
bar() { echo bar begin; baz; echo bar end; }
baz() { echo baz; false; }
foo
これを実行すると、foo -> bar -> baz の呼び出しの流れが、bazのfalseで中断されて
foo begin
bar begin
baz
と表示されるんだが
foo の代わりに if foo; then :; fi と実行すると
なんと、foo end も bar end も表示されるんだよ
つまり foo を if や && や || と組み合わせて使うと、エラー中断機能が無効化される
だから、比較関数みたいに if foo; then という使い方を想定している関数は
中でしっかりエラーチェックをしておくこと
他の言語の例外みたいに考えてはいけない
566デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 08:39:06.36ID:UVRb8J0Z0 ↑ これが理由で、set -eは使うな派もいるらしいねw
>>562
> 例えば「局所変数や局所関数が宣言できないのでなるべく使わない」とかさ。
俺は訳あってそうしてるけど、特定のシェルに限って良いのなら
localもしくはtypesetで局所変数使えるよ
ただし、他の言語と違ってレキシカルスコープじゃなくて
ダイナミックスコープなので注意が必要
これも気をつけていることかな
>>562
> 例えば「局所変数や局所関数が宣言できないのでなるべく使わない」とかさ。
俺は訳あってそうしてるけど、特定のシェルに限って良いのなら
localもしくはtypesetで局所変数使えるよ
ただし、他の言語と違ってレキシカルスコープじゃなくて
ダイナミックスコープなので注意が必要
これも気をつけていることかな
567デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 08:44:20.66ID:UVRb8J0Z0 あと他の言語でも同じだけどshellcheckは基本やね
ダブルクォートでくくるとか、shellcheckで警告出るものは
ここでグダグダ書かないよ。
ダブルクォートでくくるとか、shellcheckで警告出るものは
ここでグダグダ書かないよ。
568デフォルトの名無しさん (アウアウウー Sa05-ahuQ)
2018/11/09(金) 09:08:37.30ID:JsSTi+Gxa569デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 09:16:09.65ID:UVRb8J0Z0570デフォルトの名無しさん (アウアウカー Sa9d-f/7Y)
2018/11/09(金) 09:18:07.88ID:FKBIIb3sa 明らかにそんなレベルの回答求めてないよねっていう語りたがり
571デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 09:24:33.15ID:UVRb8J0Z0 ん? あぁ、質問はコレね
> メモリにバッファリングするだろうから、それが溢れないような処置として
> そういう仕様は理解できるけど、どこかに書いてあるのかな?
>
> シェルの仕様っぽい気がするけど、OSも絡んでいそうな気もする
> メモリにバッファリングするだろうから、それが溢れないような処置として
> そういう仕様は理解できるけど、どこかに書いてあるのかな?
>
> シェルの仕様っぽい気がするけど、OSも絡んでいそうな気もする
572デフォルトの名無しさん (アウアウウー Sa05-ahuQ)
2018/11/09(金) 09:31:46.72ID:JsSTi+Gxa どう考えてもOSの仕様だろう。
573デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/09(金) 09:40:49.31ID:3ZHBVzZ50574デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 09:55:47.54ID:UVRb8J0Z0575デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/09(金) 10:07:47.85ID:3ZHBVzZ50 ああ。たしかにパイプ越しに変数を参照させようと思ったらexportして環境変数にしなくちゃらんもんな。
576デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 10:31:29.63ID:UVRb8J0Z0 > ああ。たしかにパイプ越しに変数を参照させようと思ったらexportして環境変数にしなくちゃらんもんな。
もうちょっと説明すると
foo() {
output | bar | baz
}
fooで見えてる変数を、bar, bazに見せるのは簡単なんだよ。
exportしなくても見せられる。
outputが出力する1行をbarが解析して変数に入れたとして、その変数を
bazで見ることはできない(barでexportしても無理)
bazが複数行の入力を集計した結果の変数をfooで見ることが出来ない。とかね
1データを1行に詰め込めればパイプ経由でのデータ受け渡しは可能だが
それができないデータだと難しい
他の言語でやれって? それをシェルスクリプトでやらなきゃいけないというのが個人的な特殊な状況下というわけ
もうちょっと説明すると
foo() {
output | bar | baz
}
fooで見えてる変数を、bar, bazに見せるのは簡単なんだよ。
exportしなくても見せられる。
outputが出力する1行をbarが解析して変数に入れたとして、その変数を
bazで見ることはできない(barでexportしても無理)
bazが複数行の入力を集計した結果の変数をfooで見ることが出来ない。とかね
1データを1行に詰め込めればパイプ経由でのデータ受け渡しは可能だが
それができないデータだと難しい
他の言語でやれって? それをシェルスクリプトでやらなきゃいけないというのが個人的な特殊な状況下というわけ
577デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/09(金) 17:10:16.74ID:3ZHBVzZ50 シェルスクリプトでそのコマンドが実行された行数を取得する方法ってあるかな。
#!/usr/bin/env bashにすれば${LINENO}変数にその位置が格納されてるので簡単なんだけど
やっぱりもうすこし汎用的な方法で実現したい。
#!/usr/bin/env bashにすれば${LINENO}変数にその位置が格納されてるので簡単なんだけど
やっぱりもうすこし汎用的な方法で実現したい。
578デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 19:41:43.60ID:UVRb8J0Z0 >>577
LINENOしかないよ。ただしご存知の通りLINENOは使えないシェルがある。
dashなんか機能的には搭載されてるがdebianなどでは無効にされてるというw
更にシェルによっては関数呼び出しを行った時にソースコードの行数ではなく
関数の頭からの行数になっていて、それも0から始まるものと1から始まるものがある
まともに使えるのはbashだけかな
LINENOしかないよ。ただしご存知の通りLINENOは使えないシェルがある。
dashなんか機能的には搭載されてるがdebianなどでは無効にされてるというw
更にシェルによっては関数呼び出しを行った時にソースコードの行数ではなく
関数の頭からの行数になっていて、それも0から始まるものと1から始まるものがある
まともに使えるのはbashだけかな
579デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/09(金) 20:27:42.80ID:3ZHBVzZ50 >>578
だよね〜。ファイルの中での自分の位置を調べるのはシェルスクリプトでは無理っぽいね。
Cのassert()関数みたいなのを自作したかったんだけど 機能が落ちるのは嫌だな(もういいけど)
ああ ちなみに
> 関数呼び出しを行った時にソースコードの行数ではなく
> 関数の頭からの行数になっていて
これGNU Bashのことを言ってるのなら関数じゃなくて別名にすればO.K.だよ
だよね〜。ファイルの中での自分の位置を調べるのはシェルスクリプトでは無理っぽいね。
Cのassert()関数みたいなのを自作したかったんだけど 機能が落ちるのは嫌だな(もういいけど)
ああ ちなみに
> 関数呼び出しを行った時にソースコードの行数ではなく
> 関数の頭からの行数になっていて
これGNU Bashのことを言ってるのなら関数じゃなくて別名にすればO.K.だよ
580デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/09(金) 21:02:47.30ID:UVRb8J0Z0 >>579
シェルスクリプトの世界にJavaScriptのトランスパイラ技術が導入されて
ソースコードの一行一行にLINENOを設定するコードを埋め込めば
解決できると思うんだが、流石にそれをやろうとする人はいないかなw
> これGNU Bashのことを言ってるのなら関数じゃなくて別名にすればO.K.だよ
alias?うーん、なんか別の問題がでそう。
でもbashじゃなかったと思う。
前に調べたときのコードを見てみたが、
関数の頭からの行数になるのはzsh, dash, busybox ashで
zshは0から始まる。他は1から始まる。bashとkshはソースコードの行数で取れる。
バージョンは詳しく調べてないから多分古いやつは使えなかったりすると思う
なので他のシェルでエラーが起きたら、bashで実行してエラーの行番号を調べたりしているw
シェルスクリプトの世界にJavaScriptのトランスパイラ技術が導入されて
ソースコードの一行一行にLINENOを設定するコードを埋め込めば
解決できると思うんだが、流石にそれをやろうとする人はいないかなw
> これGNU Bashのことを言ってるのなら関数じゃなくて別名にすればO.K.だよ
alias?うーん、なんか別の問題がでそう。
でもbashじゃなかったと思う。
前に調べたときのコードを見てみたが、
関数の頭からの行数になるのはzsh, dash, busybox ashで
zshは0から始まる。他は1から始まる。bashとkshはソースコードの行数で取れる。
バージョンは詳しく調べてないから多分古いやつは使えなかったりすると思う
なので他のシェルでエラーが起きたら、bashで実行してエラーの行番号を調べたりしているw
581デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/10(土) 09:07:56.28ID:lBOHSSIo0 たとえばシェルアーカイブってPOSIXシェルでも可能だよね。
ああいう感じで自分が含まれるファイルを自分で走査できるんなら
行位置も取得できないかなぁと思ったんだよね……。
しつこいけどシェルスクリプト版のassert()関数が欲しい っていうか作りたいんだよねぇ
ああいう感じで自分が含まれるファイルを自分で走査できるんなら
行位置も取得できないかなぁと思ったんだよね……。
しつこいけどシェルスクリプト版のassert()関数が欲しい っていうか作りたいんだよねぇ
582デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 09:34:29.76ID:8OkJCHKT0 >>581
assertだけなら簡単かもしれないな。
assert関数の中で全てを処理するのは難しいと思う。自分のスクリプト名でさえ取得できない場合があるから
仮に取得できたとしても、何かしらのマーカーがないとどのassertかが区別できない。
(全ててのassertに区別できるマーカーを入れるっていうのなら可能だけどw)
前提としてLINENOが取得できないのはどうしようもないのでコード変換を行なう
foo() {
asesrt [ i -gt 0 ]
}
みたいなコードがあったら以下みたいに、行番号を埋め込むプログラムを作る
(ファイル名もあったほうが良いかもしれない)
foo() {
asesrt 2 [ i -gt 0 ]
}
これはPOSIXシェルスクリプトの範囲でもできる。一行づつ読んでパターンにマッチしたら変換するだけ
(複数行文字列やヒアドキュメントがあったら面倒だけど、対応してませんでもいいと思う)
あとは以上の変換処理を行って実行するラッパースクリプトを作って実行する
変換したコードはevalもしくはシェルにパイプで流し込むことで実行できる。
assertだけなら簡単かもしれないな。
assert関数の中で全てを処理するのは難しいと思う。自分のスクリプト名でさえ取得できない場合があるから
仮に取得できたとしても、何かしらのマーカーがないとどのassertかが区別できない。
(全ててのassertに区別できるマーカーを入れるっていうのなら可能だけどw)
前提としてLINENOが取得できないのはどうしようもないのでコード変換を行なう
foo() {
asesrt [ i -gt 0 ]
}
みたいなコードがあったら以下みたいに、行番号を埋め込むプログラムを作る
(ファイル名もあったほうが良いかもしれない)
foo() {
asesrt 2 [ i -gt 0 ]
}
これはPOSIXシェルスクリプトの範囲でもできる。一行づつ読んでパターンにマッチしたら変換するだけ
(複数行文字列やヒアドキュメントがあったら面倒だけど、対応してませんでもいいと思う)
あとは以上の変換処理を行って実行するラッパースクリプトを作って実行する
変換したコードはevalもしくはシェルにパイプで流し込むことで実行できる。
583デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 09:39:54.31ID:8OkJCHKT0 あー、そうか、assertか、ならデバッグ時のみしか有効じゃなくていいな。
なら、普通にスクリプトを実行したときは、
何もしないassert関数になって、
debug.sh script.sh みたいにしたら、
コード変換を行ってから実行すれば良いのか
意外と自然な感じで作れそうw
なら、普通にスクリプトを実行したときは、
何もしないassert関数になって、
debug.sh script.sh みたいにしたら、
コード変換を行ってから実行すれば良いのか
意外と自然な感じで作れそうw
584デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 09:49:06.14ID:8OkJCHKT0 assert失敗時に強制的に停止させるのはkill $$で行けるかな?
サブシェル内でも一応停止できるようだけど
サブシェル内でも一応停止できるようだけど
585デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/10(土) 16:43:37.38ID:lBOHSSIo0 色々考えてくれてマジでありがたい
確かにassert()関数はデバッグの時だけ有効になればいいから外部からスクリプトファイルを操作するという方法も
なんら不自然ではないな。
C言語のようにNDEBUG変数の有無によって処理を分けようとしてたけど
そっちのほうが柔軟な処理ができるのでいいね。
ていうかC言語と違ってシェルスクリプトのなかで安全・確実に変数を取り扱うのは厄介だから
寧ろNDEBUG変数は害悪ですらあるなw
確かにassert()関数はデバッグの時だけ有効になればいいから外部からスクリプトファイルを操作するという方法も
なんら不自然ではないな。
C言語のようにNDEBUG変数の有無によって処理を分けようとしてたけど
そっちのほうが柔軟な処理ができるのでいいね。
ていうかC言語と違ってシェルスクリプトのなかで安全・確実に変数を取り扱うのは厄介だから
寧ろNDEBUG変数は害悪ですらあるなw
586デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 19:36:31.81ID:8OkJCHKT0 >>585
何もしないassert関数と書いたが、コメントの形でassertを入れるのはどうだろう?
これなら関数呼び出しすらないので、(わずかな)パフォーマンス低下も発生しないし
仮にスクリプト内でassert関数を使っていても問題ない
assert有効時は、長い名前に変換すれば良い
何もしないassert関数と書いたが、コメントの形でassertを入れるのはどうだろう?
これなら関数呼び出しすらないので、(わずかな)パフォーマンス低下も発生しないし
仮にスクリプト内でassert関数を使っていても問題ない
assert有効時は、長い名前に変換すれば良い
587デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 19:38:01.66ID:8OkJCHKT0 あと、デバッグモード、assert関数有効時だけど、終了ステータスを変えてしまうことに注意な
foo() {
false
# assert [ なんちゃら ]
echo $?
}
という場合、本来はechoで1と表示されるけど、単純にこのように変換してしまうと、
assert有効時に$?がassertの結果になってしまう
だから変換後はこんな感じかな? ||:を使うことでset -e状態でも落ちなくできる
foo() {
false
assertooooo 3 [ なんちゃら ] ||:
echo $?
}
assertooooo() {
EXIT_STATUS_BACKUP=$?
LINE_NUMBER=$1
shift
if "$@"; then
return $EXIT_STATUS_BACKUP
else
echo "エラー $LINE_NUMBER" >&2
exit 1
fi
}
foo() {
false
# assert [ なんちゃら ]
echo $?
}
という場合、本来はechoで1と表示されるけど、単純にこのように変換してしまうと、
assert有効時に$?がassertの結果になってしまう
だから変換後はこんな感じかな? ||:を使うことでset -e状態でも落ちなくできる
foo() {
false
assertooooo 3 [ なんちゃら ] ||:
echo $?
}
assertooooo() {
EXIT_STATUS_BACKUP=$?
LINE_NUMBER=$1
shift
if "$@"; then
return $EXIT_STATUS_BACKUP
else
echo "エラー $LINE_NUMBER" >&2
exit 1
fi
}
588デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 19:42:53.17ID:8OkJCHKT0 > 仮にスクリプト内でassert関数を使っていても問題ない
ちょっとわかりづらかったな
スクリプトでassertという名前の関数を別の用途で使っていた場合ってことね
ちょっとわかりづらかったな
スクリプトでassertという名前の関数を別の用途で使っていた場合ってことね
589デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 19:44:37.42ID:8OkJCHKT0 うぬ、ここはkillにするんだった
else
echo "エラー $LINE_NUMBER" >&2
kill $$
fi
else
echo "エラー $LINE_NUMBER" >&2
kill $$
fi
590デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 19:49:50.91ID:8OkJCHKT0 (ま、あとは . ドットコマンド で読み込んだ外部スクリプトはどうするか問題があるんだがなw)
591デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 20:03:55.71ID:8OkJCHKT0 あー、バカだ
assertooooo 3 [ なんちゃら ] ||:
じゃなくて
assertooooo 3 [ なんちゃら ] &&:
だった
上はset -eでも落ちなくし、かつ終了ステータスを問答無用で0にする方法(エラーの時 : を実行する)
下がset -eでも落ちなくし、かつ終了ステータスはそのまま保つ方法
assertooooo 3 [ なんちゃら ] ||:
じゃなくて
assertooooo 3 [ なんちゃら ] &&:
だった
上はset -eでも落ちなくし、かつ終了ステータスを問答無用で0にする方法(エラーの時 : を実行する)
下がset -eでも落ちなくし、かつ終了ステータスはそのまま保つ方法
592デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/10(土) 20:17:00.01ID:lBOHSSIo0 >>590
例えば
ファイルの名前がwhizprog.shだったとして
test "$( ps -p $$ -o 'comm=')" = 'whizprog.sh'
↑これが失敗・失敗しないで判定できるんじゃね?
尤もこれはシバン#!/bin/shというPOSIX未定義の構文を使ったばあいで
シバンを書いてないと使えない手だけど。
例えば
ファイルの名前がwhizprog.shだったとして
test "$( ps -p $$ -o 'comm=')" = 'whizprog.sh'
↑これが失敗・失敗しないで判定できるんじゃね?
尤もこれはシバン#!/bin/shというPOSIX未定義の構文を使ったばあいで
シバンを書いてないと使えない手だけど。
593デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 20:22:22.65ID:8OkJCHKT0 >>592
ん? assert実行するためのソースコード書き換えの話だよ
debug.sh script.sh で読み込んだ、script.shの書き換えは簡単だけど、
その script.sh から . コマンドで読み込まれるコードまでは書き換えられない
だから . コマンドを検出して再帰的に・・・面倒なんだよなw
余談だが、
> test "$( ps -p $$ -o 'comm=')" = 'whizprog.sh'
これはPOSIX準拠なのだろうが、busyboxではpsはwしか使えないw
ps w
ん? assert実行するためのソースコード書き換えの話だよ
debug.sh script.sh で読み込んだ、script.shの書き換えは簡単だけど、
その script.sh から . コマンドで読み込まれるコードまでは書き換えられない
だから . コマンドを検出して再帰的に・・・面倒なんだよなw
余談だが、
> test "$( ps -p $$ -o 'comm=')" = 'whizprog.sh'
これはPOSIX準拠なのだろうが、busyboxではpsはwしか使えないw
ps w
594デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/10(土) 20:50:01.93ID:lBOHSSIo0 >>593
ああなるほど そんなことまでは考えてなかった。
正直,あなたに教えてもらった方法で大満足です。ありがとう。(欲を言えば行番号を自分で……しつこいねw)
とりあえずこんな感じに落ち着きました↓
#!/bin/sh
assert()
{
exec >&2
eval "test ${2}" || {
printf '%s: %d: %s\n' "${0}" ${1} "${3-"Assertion ${2} failed."}"
exit 1
}
}
main()
{
set -eu
umask 0022
export PATH="$( command -p getconf PATH ):${PATH}"
assert 18 '"a" = "b"' && :
exit $?
}
main "$@"
ああなるほど そんなことまでは考えてなかった。
正直,あなたに教えてもらった方法で大満足です。ありがとう。(欲を言えば行番号を自分で……しつこいねw)
とりあえずこんな感じに落ち着きました↓
#!/bin/sh
assert()
{
exec >&2
eval "test ${2}" || {
printf '%s: %d: %s\n' "${0}" ${1} "${3-"Assertion ${2} failed."}"
exit 1
}
}
main()
{
set -eu
umask 0022
export PATH="$( command -p getconf PATH ):${PATH}"
assert 18 '"a" = "b"' && :
exit $?
}
main "$@"
595デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 21:06:21.14ID:8OkJCHKT0 update.sh script.sh でassert行の行番号を更新して上書き保存するってのもありかもw
それなら.コマンドの先も対応できる。いちいち更新しないといけないのが面倒だけど
それなら.コマンドの先も対応できる。いちいち更新しないといけないのが面倒だけど
596デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/10(土) 21:44:08.29ID:lBOHSSIo0 更新するコマンドを別に作るんじゃなくてデバッグ時に更新も行うようにすれば(結局 手間は同じだけど)
だってデバッグする時ってその直前に必ず行番号やらを更新したいでしょう。
だってデバッグする時ってその直前に必ず行番号やらを更新したいでしょう。
597デフォルトの名無しさん (アウアウカー Sa9d-f/7Y)
2018/11/10(土) 21:51:38.21ID:wKJLu9V5a だんだんそもそもやりたかったことから離れてる雰囲気だけは感じた
598デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/10(土) 22:33:00.25ID:8OkJCHKT0599デフォルトの名無しさん (ワッチョイ 93b3-Mdza)
2018/11/10(土) 23:15:08.44ID:hLxIIZfE0 もうシェル自体に手を入れてデバッグモードみたいなのを実装した方がいいんじゃね?
600デフォルトの名無しさん (ワッチョイ b903-wpdm)
2018/11/10(土) 23:18:28.98ID:7gTt1pZ+0 もうシェルでなにしたいんやおまえ
601デフォルトの名無しさん (アウアウカー Sa9d-f/7Y)
2018/11/10(土) 23:41:45.94ID:wKJLu9V5a シェルブリットバーストを撃ちたい
602デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/10(土) 23:58:52.52ID:lBOHSSIo0 >>599
一応POSIXでsh -xは定められてる
一応POSIXでsh -xは定められてる
603デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/11(日) 00:03:09.99ID:Tyd11AGx0 sh -xまじ使えねぇ
なぜ行番号を出すようにしなかったのか
なぜ行番号を出すようにしなかったのか
604デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/11(日) 00:16:53.30ID:Tyd11AGx0 >>600
assertじゃないの?
assertじゃないの?
605デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/11(日) 00:30:20.21ID:PRctJ18Z0 >>603
ほ ん と そ れ
そして今調べて気が付いたがsh -xじゃねーなw
set -xだわ。
> The -a, -b, -C, -e, -f, -m, -n, -o option, -u, -v, and -x options
> are described as part of the set utility in Special Built-In Utilities.
> The option letters derived from the set special built-in
> shall also be accepted with a leading <plus-sign> ( '+' ) instead of a leading <hyphen-minus>
> (meaning the reverse case of the option as described in this volume of POSIX.1-2017).
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html#tag_20_117_04
ほ ん と そ れ
そして今調べて気が付いたがsh -xじゃねーなw
set -xだわ。
> The -a, -b, -C, -e, -f, -m, -n, -o option, -u, -v, and -x options
> are described as part of the set utility in Special Built-In Utilities.
> The option letters derived from the set special built-in
> shall also be accepted with a leading <plus-sign> ( '+' ) instead of a leading <hyphen-minus>
> (meaning the reverse case of the option as described in this volume of POSIX.1-2017).
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html#tag_20_117_04
606デフォルトの名無しさん (ワッチョイ b903-wpdm)
2018/11/11(日) 00:55:22.01ID:TQKm/8h90 >>604
なんでワイに聞くねんwバカなんかおまえ?
なんでワイに聞くねんwバカなんかおまえ?
607デフォルトの名無しさん (ブーイモ MMab-/quP)
2018/11/11(日) 00:56:50.21ID:AsOVz6G5M それを質問の意味で受け取るとか日本語大丈夫?
608デフォルトの名無しさん (ワッチョイ b903-wpdm)
2018/11/11(日) 01:00:58.12ID:TQKm/8h90 日本語が大丈夫ってどおゆう意味や?
609デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/11(日) 01:05:43.58ID:Tyd11AGx0 おちつけ、今はまだ慌れるときじゃない。
610デフォルトの名無しさん (ワッチョイ b903-wpdm)
2018/11/11(日) 01:09:59.72ID:TQKm/8h90 慌れるて日本語あるんか?ちょっと落ち着けやw
611デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/11(日) 02:43:07.51ID:Tyd11AGx0 りっしんべんが余計だった
612デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/11(日) 12:28:16.92ID:PRctJ18Z0 C言語ではなくシェルスクリプトでシグナルって活用してる?
kill(1)ユーティリティの-s KILLオプションくらいしか使ったことがないので
いまいち便利さが分からない。
利用者定義シグナルSIGUSER1とか 使いこなせたらシェルスクリプトでできることの幅が広がりそう
kill(1)ユーティリティの-s KILLオプションくらいしか使ったことがないので
いまいち便利さが分からない。
利用者定義シグナルSIGUSER1とか 使いこなせたらシェルスクリプトでできることの幅が広がりそう
613デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/11(日) 12:33:00.83ID:Tyd11AGx0 CTRL-Cされたときとかプログラム終了時に
作業ファイルを削除することぐらいかなぁ
あとはシグナルじゃないけど、bashの疑似シグナル
ERRとかDEBUGとかで遊んだことある
サービスなんかだとシグナル送ったら設定ファイル再読込したり
ddだったら進捗状況表示したりするね
作業ファイルを削除することぐらいかなぁ
あとはシグナルじゃないけど、bashの疑似シグナル
ERRとかDEBUGとかで遊んだことある
サービスなんかだとシグナル送ったら設定ファイル再読込したり
ddだったら進捗状況表示したりするね
614デフォルトの名無しさん (ワッチョイ db9f-ki2E)
2018/11/11(日) 22:34:54.73ID:0F8Q4Ddx0 >>612
終了処理をちゃんとやらないといけないような処理の場合に trap 使ってシグナルに対して
特定の変数を 1 にするだけとか、そういうやり方で終了処理後にその変数見て 1 になって
いたら exit みたいな感じでシグナル利用するな。
後は普通に kill で他のプロセス終了させたい場合。pkill 使う事もある。
終了処理をちゃんとやらないといけないような処理の場合に trap 使ってシグナルに対して
特定の変数を 1 にするだけとか、そういうやり方で終了処理後にその変数見て 1 になって
いたら exit みたいな感じでシグナル利用するな。
後は普通に kill で他のプロセス終了させたい場合。pkill 使う事もある。
615デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/12(月) 12:58:25.45ID:JkRQG90v0 実行してるシェルスクリプトに行番号を付けるのさ,
PS4変数にn=$((n+1))みたいなのを入れてset -xとやればうまくいくかな と思ったんだが無理っぽいな。
どっかで無限ループして何も出力されないw
PS4変数にn=$((n+1))みたいなのを入れてset -xとやればうまくいくかな と思ったんだが無理っぽいな。
どっかで無限ループして何も出力されないw
616デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/13(火) 19:40:03.28ID:0Ele5WZ80 算術式のなかにコマンド展開を突っ込むのってPOSIX違反かしら
echo $(($(< ./file.txt wc -l)-1))←こういうの。
echo $(($(< ./file.txt wc -l)-1))←こういうの。
617デフォルトの名無しさん (ワッチョイ 0123-kOF1)
2018/11/13(火) 20:47:22.69ID:tvSD0Nan0 >>616
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_04
これを読む限りは特に規定されてるようには見えない
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_04
これを読む限りは特に規定されてるようには見えない
618デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/14(水) 15:25:56.02ID:P8pvRdrO0619デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/14(水) 15:29:13.15ID:Da4Ohzbn0 えぇ・・・
俺普通にこんなの使ってんだけど?
value=$(( ${value:-0} + 1 ))
普通に展開されるんじゃないの?
俺普通にこんなの使ってんだけど?
value=$(( ${value:-0} + 1 ))
普通に展開されるんじゃないの?
620デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/14(水) 16:18:09.15ID:P8pvRdrO0 >>619
まあ俺も使い捨てのスクリプトでは使うけど
ただPOSIX 2017では
x=3; x=$((x+1))
↑これすら正常に動くとは定義されてないんだよね
ただ単に
x=3のとき$((x))は$(($x))と「同じ値になる」とだけ。
だから例示されるスクリプトでも
x=$(($x + 1))
みたいに書かれてる。
まあ俺も使い捨てのスクリプトでは使うけど
ただPOSIX 2017では
x=3; x=$((x+1))
↑これすら正常に動くとは定義されてないんだよね
ただ単に
x=3のとき$((x))は$(($x))と「同じ値になる」とだけ。
だから例示されるスクリプトでも
x=$(($x + 1))
みたいに書かれてる。
621デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/14(水) 16:40:42.71ID:Da4Ohzbn0 >>620
> x=$(($x + 1))
shellcheckではそれ不要だから外せって言われるよ?
shellcheckが完璧だとは思わないけど、
あえてそうしてるんだからPOSIXだと思うんだけどなぁ
> x=$(($x + 1))
shellcheckではそれ不要だから外せって言われるよ?
shellcheckが完璧だとは思わないけど、
あえてそうしてるんだからPOSIXだと思うんだけどなぁ
622デフォルトの名無しさん (ワッチョイ 9164-TRt+)
2018/11/14(水) 16:46:17.02ID:P8pvRdrO0 >>621
shellcheckはそれに関しては間違ってると言えるな
なぜなら もう言ったが
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
↑ここで
x=$(($x-1))とはっきり書かれてるんだよ。
shellcheckはそれに関しては間違ってると言えるな
なぜなら もう言ったが
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
↑ここで
x=$(($x-1))とはっきり書かれてるんだよ。
623デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/14(水) 17:07:17.10ID:Da4Ohzbn0 >>616
あ、大丈夫みたいだよ。
コマンドも展開されるって書いてある
$((expression))
The shell shall expand all tokens in the expression
for parameter expansion, command substitution, and quote removal.
あ、大丈夫みたいだよ。
コマンドも展開されるって書いてある
$((expression))
The shell shall expand all tokens in the expression
for parameter expansion, command substitution, and quote removal.
624デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/14(水) 17:18:05.78ID:Da4Ohzbn0 あ、なるほど。わかった。
${a} って書いたときの、aの部分が式なんだ。$は含まれない。それと同じで
$((a)) もaの部分が式で>>623に書いてあるように、先に展開される仕様だから
$(($a))だと先に$aの部分が文字列として展開されて$((123))のように解釈される
だから https://github.com/koalaman/shellcheck/wiki/SC2004 に書いてあるように
> $ a='1+1'
> $ echo $(($a * 5)) # becomes 1+1*5
> 6
これだと、式が評価される前に文字列として展開されちゃうから変な計算になるが
> $ echo $((a * 5)) # evaluates as (1+1)*5
> 10
${a}と同じように$((a))と書くと、ちゃんと算術演算が行われるんだ
ということで、やっぱり$(($a))は間違いで$((a))が正しいようだね
${a} って書いたときの、aの部分が式なんだ。$は含まれない。それと同じで
$((a)) もaの部分が式で>>623に書いてあるように、先に展開される仕様だから
$(($a))だと先に$aの部分が文字列として展開されて$((123))のように解釈される
だから https://github.com/koalaman/shellcheck/wiki/SC2004 に書いてあるように
> $ a='1+1'
> $ echo $(($a * 5)) # becomes 1+1*5
> 6
これだと、式が評価される前に文字列として展開されちゃうから変な計算になるが
> $ echo $((a * 5)) # evaluates as (1+1)*5
> 10
${a}と同じように$((a))と書くと、ちゃんと算術演算が行われるんだ
ということで、やっぱり$(($a))は間違いで$((a))が正しいようだね
625デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/14(水) 18:02:30.17ID:Da4Ohzbn0 間違いっていうのは仕様違反って意味じゃなくて
算術演算をするなら$をつけないのが正しいって意味ね。
算術演算の前に$とかコマンドが展開されるっていうのも
仕様なのでそれも書いたとおりに動作する
算術演算をするなら$をつけないのが正しいって意味ね。
算術演算の前に$とかコマンドが展開されるっていうのも
仕様なのでそれも書いたとおりに動作する
626デフォルトの名無しさん (オッペケ Srcd-3Pmj)
2018/11/14(水) 19:06:25.03ID:vF6ts/2/r 大きなファイルがいくつも入ったディレクトリのmvして分かったけど
ファイルがいくつあっても全部のcpが終わったあとにrmされるんだね
てっきり1ファイル毎かと思ってた
ファイルがいくつあっても全部のcpが終わったあとにrmされるんだね
てっきり1ファイル毎かと思ってた
627デフォルトの名無しさん (アウアウウー Sa05-pmE1)
2018/11/14(水) 19:23:07.48ID:bryEJhFFa >>626
途中で中止した時に移動先を削除するだけで済むからじゃないかな。
途中で中止した時に移動先を削除するだけで済むからじゃないかな。
628デフォルトの名無しさん (ワッチョイ 9164-30bX)
2018/11/14(水) 19:34:11.25ID:P8pvRdrO0 >>625
んー。でも俺には
> If the shell variable x contains a value that forms a valid integer constant,
> optionally including a leading or ,
> then the arithmetic expansions "$((x))" and "$(($x))" shall return the same value.
は$((x))の「時だけ」$(($x))と等しいと読めるがな。
いずれにしても算術展開で算術計算をする際に変数を使いたいときは
$(( ($x) + 1 ))
にしてるわ。どっかで$(( x + 1 ))がエラーになるのが怖いので。
んー。でも俺には
> If the shell variable x contains a value that forms a valid integer constant,
> optionally including a leading or ,
> then the arithmetic expansions "$((x))" and "$(($x))" shall return the same value.
は$((x))の「時だけ」$(($x))と等しいと読めるがな。
いずれにしても算術展開で算術計算をする際に変数を使いたいときは
$(( ($x) + 1 ))
にしてるわ。どっかで$(( x + 1 ))がエラーになるのが怖いので。
629デフォルトの名無しさん (アウアウウー Sa05-Vzv6)
2018/11/14(水) 21:35:28.76ID:tEjpeAN9a630デフォルトの名無しさん (ブーイモ MMb3-D3se)
2018/11/14(水) 21:50:05.93ID:D6nmDs23M $(())が展開できるものは限定されていて、$((x+1))が意図通りに展開される根拠は$((x))と$(($x))が等しいって書いてある一文しかない。
これは$(())の中だけはx=$xであると解釈できなくもないけど、算術演算をするなら$をつけないのが正しいとは読めないな。
これは$(())の中だけはx=$xであると解釈できなくもないけど、算術演算をするなら$をつけないのが正しいとは読めないな。
631デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/14(水) 22:59:44.88ID:Da4Ohzbn0 > $((x+1))が意図通りに展開される根拠は$((x))と$(($x))が等しいって書いてある一文しかない。
一つあれば十分じゃん。逆に展開されない根拠はないんだし
そもそも ${expression} と $((expression)) という記述があるんだから
expressionの中は同じ意味のはずだろう
一つあれば十分じゃん。逆に展開されない根拠はないんだし
そもそも ${expression} と $((expression)) という記述があるんだから
expressionの中は同じ意味のはずだろう
632デフォルトの名無しさん (ワッチョイ 9398-Nrm4)
2018/11/14(水) 23:06:12.49ID:Da4Ohzbn0 > どっかで$(( x + 1 ))がエラーになるのが怖いので。
それがエラーになるなら、とっくに検出してるだろうな。
複数のシェルで確認してるからさ
それ関連で注意が必要なのは $(($#-1))
zshだと81になる。
それがエラーになるなら、とっくに検出してるだろうな。
複数のシェルで確認してるからさ
それ関連で注意が必要なのは $(($#-1))
zshだと81になる。
633デフォルトの名無しさん (ワッチョイ 2105-jVda)
2018/11/15(木) 07:34:42.91ID:CPG8nmHa0 >>631
いや算術演算するときは$をつけないのが正しいとは何処にも書いてないけど
いや算術演算するときは$をつけないのが正しいとは何処にも書いてないけど
634デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/15(木) 08:48:01.92ID:sJsqi8La0 というか,shellcheckでの検査結果うんぬんよりも本家POSIXの記述のほうが優先して考慮されるべきだと思うのだが。
635デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 10:49:23.03ID:gWaB1LhD0 本家POSIXに$((x))が動くと書いてあるだろ
636デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 11:23:09.13ID:gWaB1LhD0 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
に書いてあるだろ
> Arithmetic expansion provides a mechanism for evaluating an arithmetic expression and substituting its value.
> The format for arithmetic expansion shall be as follows:
>
> $((expression))
>
> The expression shall be treated as if it were in double-quotes, except that a double-quote inside
> the expression is not treated specially. The shell shall expand all tokens in the expression for
> parameter expansion, command substitution, and quote removal.
まず、$(( )) の中にある。これがexpressionだ。
expand all tokens in the expression 式の中にある以下のトークンの展開、
for parameter expansion, command substitution, and quote removal.
パラメータ展開、コマンド置換、クォートの削除
> Next, the shell shall treat this as an arithmetic expression and substitute the value of the expression.
その次(Next)に この式を arithmetic expression (算術式)として扱う
つまりだ。パラメータ展開( $(($x))の$xの展開 )が行われるまでは、まだ算術式として扱う前なんだよ
そもそもだな。 x=123を見て分かる通り。変数名はxだぞ。$xじゃない。
他の言語では変数名が$で始まるものがあるが、シェルスクリプトにおいて、
$は、パラメータ展開、コマンド置換、算術展開等を行うための記号だって書いてあるだろ?
特殊変数の説明だって、$@じゃなくて@、$*じゃなくて*、$#じゃなくて#、$$じゃなくて$ と書いており
変数名とは最初の$は含まれない部分だってことが読み取れるだろ
に書いてあるだろ
> Arithmetic expansion provides a mechanism for evaluating an arithmetic expression and substituting its value.
> The format for arithmetic expansion shall be as follows:
>
> $((expression))
>
> The expression shall be treated as if it were in double-quotes, except that a double-quote inside
> the expression is not treated specially. The shell shall expand all tokens in the expression for
> parameter expansion, command substitution, and quote removal.
まず、$(( )) の中にある。これがexpressionだ。
expand all tokens in the expression 式の中にある以下のトークンの展開、
for parameter expansion, command substitution, and quote removal.
パラメータ展開、コマンド置換、クォートの削除
> Next, the shell shall treat this as an arithmetic expression and substitute the value of the expression.
その次(Next)に この式を arithmetic expression (算術式)として扱う
つまりだ。パラメータ展開( $(($x))の$xの展開 )が行われるまでは、まだ算術式として扱う前なんだよ
そもそもだな。 x=123を見て分かる通り。変数名はxだぞ。$xじゃない。
他の言語では変数名が$で始まるものがあるが、シェルスクリプトにおいて、
$は、パラメータ展開、コマンド置換、算術展開等を行うための記号だって書いてあるだろ?
特殊変数の説明だって、$@じゃなくて@、$*じゃなくて*、$#じゃなくて#、$$じゃなくて$ と書いており
変数名とは最初の$は含まれない部分だってことが読み取れるだろ
637デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/15(木) 11:44:50.73ID:sJsqi8La0 >>636
そのすぐあとに
x=$(($x - 1))
という記述があるんですが。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
そのすぐあとに
x=$(($x - 1))
という記述があるんですが。
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
638デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 12:00:52.72ID:gWaB1LhD0 >>637
あるからなんだよ?
パラメータ展開が行われるから
x=$(($x - 1)) は x=$((100 - 1)) となって動くだろうさ
それは x=$((x - 1)) がだめな理由になってない
あるからなんだよ?
パラメータ展開が行われるから
x=$(($x - 1)) は x=$((100 - 1)) となって動くだろうさ
それは x=$((x - 1)) がだめな理由になってない
639デフォルトの名無しさん (ワッチョイ 9564-uG0O)
2018/11/15(木) 12:27:06.72ID:sJsqi8La0640デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 12:34:01.42ID:gWaB1LhD0 shellcheckは間違いだから不要と言ってるんじゃなくて、
意味がないから不要って言ってるんだよ。
お前コードチェックツールで変数が使われていませんって
指摘されたら、文法上は間違ってねーよって文句言うのかよ?
意味がないから不要って言ってるんだよ。
お前コードチェックツールで変数が使われていませんって
指摘されたら、文法上は間違ってねーよって文句言うのかよ?
641デフォルトの名無しさん (アウアウカー Sa85-57oK)
2018/11/15(木) 12:36:27.53ID:zXViJGdda ファイッ
642デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 12:36:35.34ID:gWaB1LhD0 > shellcheckの「後者にしろ」っていう判定は絶対におかしい。
後者にしろって言う判定は、前者が間違ってるって話じゃなくて、
後者もOK、だから後者はPOSIX違反ではない(POSIX違反を提案するわけがない)って話だよ
もうちょっと落ち着けよ。お前否定されたらすぐカッとなるだろw
後者にしろって言う判定は、前者が間違ってるって話じゃなくて、
後者もOK、だから後者はPOSIX違反ではない(POSIX違反を提案するわけがない)って話だよ
もうちょっと落ち着けよ。お前否定されたらすぐカッとなるだろw
643デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 12:41:58.45ID:gWaB1LhD0 > つまりx=$(($x + 1))の「$x」が不要という主張は完全に間違いってことだ。
> x = $(($x - 1))とx = $((x - 1))のどっちが正しいかなんて言ってねえよ。
後者が動くのであれば
>「$x」が不要という主張は完全に間違い
という主張の方が間違ってる。
そして後者は実際に動く
> x = $(($x - 1))とx = $((x - 1))のどっちが正しいかなんて言ってねえよ。
後者が動くのであれば
>「$x」が不要という主張は完全に間違い
という主張の方が間違ってる。
そして後者は実際に動く
644デフォルトの名無しさん (ワッチョイ 9564-uG0O)
2018/11/15(木) 13:09:09.63ID:sJsqi8La0 前者も実際に動くんですがそれは
645デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 13:35:59.93ID:gWaB1LhD0 だから前者が動かないなんていてないだろ
前者に$(($x -1))の$xの$が意味がないから
(POSIX準拠で問題がない)後者の方が良いって話であって
たまにいるんだよな。誰かにより良いコードの提案をされたら
俺の書いたコードが間違っているっていうんか、仕様どおりだ!って怒るやつ
仕様違反だとか間違ってるかどうかの話なんかしてない
(正しいコードの範囲で)より良いコードにしましょうってことなのに
前者に$(($x -1))の$xの$が意味がないから
(POSIX準拠で問題がない)後者の方が良いって話であって
たまにいるんだよな。誰かにより良いコードの提案をされたら
俺の書いたコードが間違っているっていうんか、仕様どおりだ!って怒るやつ
仕様違反だとか間違ってるかどうかの話なんかしてない
(正しいコードの範囲で)より良いコードにしましょうってことなのに
646デフォルトの名無しさん (ワッチョイ 9564-uG0O)
2018/11/15(木) 14:51:03.70ID:sJsqi8La0 すまん。怒らせるつもりは毛頭なかったんだわ。
ただ,「標準でははこうなってますよ」と示しただけ。
まあちょっと俺の言い方もキツかったな。
言い訳させてもらうと,今までPOSIXの仕様書も読まずに
$(())算術展開は``に書き改めるべきとか,その割に[[文を使ってたりだとか
そういう人間と多く議論してきて,こっちもかなり厳密さを求めるようになってしまっていた。
正直なところ仕様違反でもほとんどの環境で動くなら,別にそっちを使ってもいいかもね。
ただ,「標準でははこうなってますよ」と示しただけ。
まあちょっと俺の言い方もキツかったな。
言い訳させてもらうと,今までPOSIXの仕様書も読まずに
$(())算術展開は``に書き改めるべきとか,その割に[[文を使ってたりだとか
そういう人間と多く議論してきて,こっちもかなり厳密さを求めるようになってしまっていた。
正直なところ仕様違反でもほとんどの環境で動くなら,別にそっちを使ってもいいかもね。
647デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 14:58:36.45ID:gWaB1LhD0 だから仕様違反じゃないつってるだろうが
なんでこいつ理解能力無いんだろう?
冷静なふりして、冷静じゃないだろ
なんでこいつ理解能力無いんだろう?
冷静なふりして、冷静じゃないだろ
648デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/15(木) 15:08:37.91ID:gWaB1LhD0 $(($x - 1)) と $((x - 1)) のどちらも仕様違反じゃないのに
$(($x - 1)) が動くってことは、 $((x - 1)) は仕様違反に違いニダ!って
どういう思考回路なんだろ?
$(($x - 1)) と $((x - 1)) は前者が先に$xのパラメータ展開が行われるため動作に違いがある
https://github.com/koalaman/shellcheck/wiki/SC2004 に書いてあるとおり。
それはおそらく意図しないものだろうから警告される。
お前がPOSIXの仕様を読んでいない相手と議論してきたとか知らんが、
お前なんかよりも shellcheck の作者の方がよっぽどPOSIXの仕様に詳しいだろうよ
なにせシェルスクリプトの構文解析機を作ってるし、
世界中から間違いがあったら指摘される立場にあるんだから
$(($x - 1)) が動くってことは、 $((x - 1)) は仕様違反に違いニダ!って
どういう思考回路なんだろ?
$(($x - 1)) と $((x - 1)) は前者が先に$xのパラメータ展開が行われるため動作に違いがある
https://github.com/koalaman/shellcheck/wiki/SC2004 に書いてあるとおり。
それはおそらく意図しないものだろうから警告される。
お前がPOSIXの仕様を読んでいない相手と議論してきたとか知らんが、
お前なんかよりも shellcheck の作者の方がよっぽどPOSIXの仕様に詳しいだろうよ
なにせシェルスクリプトの構文解析機を作ってるし、
世界中から間違いがあったら指摘される立場にあるんだから
649デフォルトの名無しさん (ブーイモ MMf1-ed7b)
2018/11/15(木) 20:59:56.50ID:8sDmawlrM またvoid君かよ
650デフォルトの名無しさん (アウアウウー Sa91-AAco)
2018/11/16(金) 18:15:57.23ID:4Z/2Zn+la Windows用の busybox.exe なんてものがあることをたった今知った。
こんなのあったんだな。
まあしかしよくよく考えてみればWindows用のgccとかのコンパイラでコンパイルすれば良いだけだからさほど凄いことではないか。
こんなのあったんだな。
まあしかしよくよく考えてみればWindows用のgccとかのコンパイラでコンパイルすれば良いだけだからさほど凄いことではないか。
651デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/16(金) 20:52:55.20ID:0Fk/0vf10 case "$(<なにかの処理>)" in
'A'|'aaa') echo 'B' ;;
*) echo "$(<なにかの処理>)" ;;
esac
みたいな文でさ,<なにかの処理>を(できれば変数とか使わずに)一つにまとめたいんだけど
できるかな。
"$(<なにかの処理>)"の結果が'A'か'aaa'の時のみ'B'を出力して,それ以外の場合はその処理のまんまを出力したい。
RESULT="$(<なにかの処理>)"
case "$RESULT" in
'A'|'aaa') echo 'B' ;;
*) echo "$RESULT" ;;
esac
でもいいんだけどな〜んか無駄がある気がするんだよね……近い場所で二回同じ変数使ってるっていうのが。
'A'|'aaa') echo 'B' ;;
*) echo "$(<なにかの処理>)" ;;
esac
みたいな文でさ,<なにかの処理>を(できれば変数とか使わずに)一つにまとめたいんだけど
できるかな。
"$(<なにかの処理>)"の結果が'A'か'aaa'の時のみ'B'を出力して,それ以外の場合はその処理のまんまを出力したい。
RESULT="$(<なにかの処理>)"
case "$RESULT" in
'A'|'aaa') echo 'B' ;;
*) echo "$RESULT" ;;
esac
でもいいんだけどな〜んか無駄がある気がするんだよね……近い場所で二回同じ変数使ってるっていうのが。
652デフォルトの名無しさん (アウアウウー Sa91-AAco)
2018/11/16(金) 21:08:59.95ID:4Z/2Zn+la 気のせい
653デフォルトの名無しさん (ブーイモ MM2e-lnvm)
2018/11/16(金) 23:08:25.02ID:pv33BTTMM 算術展開で$付けるのはナンセンスだからやめたほうがいい
654デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/16(金) 23:43:45.38ID:HodhQ/sE0 いい感じのバカっぽさw
655デフォルトの名無しさん (ブーイモ MM2e-lnvm)
2018/11/17(土) 00:11:39.03ID:dLBGWOhBM >>654
お前の書き込みがな
お前の書き込みがな
656デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/17(土) 00:41:14.93ID:eQWBxdMf0 なんか悔しかったんかなw
657デフォルトの名無しさん (ワッチョイ ca98-9Fzi)
2018/11/17(土) 01:07:52.12ID:LhPQgZnG0 >>651
変数を使わないの書き方の基本の一つは引数(パラメータ)を使うことだよ
引数を変数の代わりとして使う。そのやり方に2パターンある
・パターン1 関数を作る(呼び出し先の関数の引数にする)
foo() {
case "$1" in
'A'|'aaa') echo 'B' ;;
*) echo "$1" ;;
esac
}
foo "$(<なにかの処理>)"
・パターン2 引数を再設定する(自分自身の引数にする)
set -- "$(<なにかの処理>)"
case "$1" in
'A'|'aaa') echo 'B' ;;
*) echo "$1" ;;
esac
パターン2はこのままだと自分自身の引数がなくなってしまうが、
set -- "$(<なにかの処理>)" "$@"
とすることで、残しておくことが可能。以降は引数の番号をずらして
扱うかshiftで元に戻すなりするか、引数の個数が固定なら、
set -- "$@" "$(<なにかの処理>)" と逆にしてもよい
余談だが、そんなコードを書くぐらいなら素直に変数を使えばいいと思うかもしれないが、
シェルスクリプトの変数がグローバル変数なのに対して、
引数は(レキシカルスコープ的な)ローカル変数になってるという重要な違いがある
localやtypesetを使った変数のローカル化はダイナミックスコープなのでそれとも違う
変数を使わないの書き方の基本の一つは引数(パラメータ)を使うことだよ
引数を変数の代わりとして使う。そのやり方に2パターンある
・パターン1 関数を作る(呼び出し先の関数の引数にする)
foo() {
case "$1" in
'A'|'aaa') echo 'B' ;;
*) echo "$1" ;;
esac
}
foo "$(<なにかの処理>)"
・パターン2 引数を再設定する(自分自身の引数にする)
set -- "$(<なにかの処理>)"
case "$1" in
'A'|'aaa') echo 'B' ;;
*) echo "$1" ;;
esac
パターン2はこのままだと自分自身の引数がなくなってしまうが、
set -- "$(<なにかの処理>)" "$@"
とすることで、残しておくことが可能。以降は引数の番号をずらして
扱うかshiftで元に戻すなりするか、引数の個数が固定なら、
set -- "$@" "$(<なにかの処理>)" と逆にしてもよい
余談だが、そんなコードを書くぐらいなら素直に変数を使えばいいと思うかもしれないが、
シェルスクリプトの変数がグローバル変数なのに対して、
引数は(レキシカルスコープ的な)ローカル変数になってるという重要な違いがある
localやtypesetを使った変数のローカル化はダイナミックスコープなのでそれとも違う
658デフォルトの名無しさん (ブーイモ MM2e-lnvm)
2018/11/17(土) 01:38:27.92ID:dLBGWOhBM >>656
お前が?w
お前が?w
659デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/17(土) 09:28:35.93ID:XLrbbNN30660デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/17(土) 18:51:09.82ID:ikDL4PRg0 ちょっと力を貸してほしい
https://paste.ubuntu.com/p/hx6cFRKJKm/
今、↑こういう引数処理を書いている。
動作としては
$ ./argprs.sh -abc VAR -pqr FILE --long-opt --opt-req-par="foo bar" -- --not-opt
短いオプション1: a; 'VAR'
短いオプション2: b
短いオプション3: c
短いオプション4: p
短いオプション5: q
短いオプション6: r
被演算子1: FILE
長いオプション1: long-opt
長いオプション2: opt-req-par; 'foo bar'
被演算子2: --not-opt
こういう出力ができるはず。つまり-aと--opt-req-parはパラメータを取って、--以降はオプションとして解釈されないっていうやつ。
ところが俺の知識量では短いオプションを解析する部分をすごく冗長にしか書けない。いちいちループを回すせいで遅いし。
動作自体はこれでいいので、短いオプションをもうちょっとうまく解析する方法とかないかな。
https://paste.ubuntu.com/p/hx6cFRKJKm/
今、↑こういう引数処理を書いている。
動作としては
$ ./argprs.sh -abc VAR -pqr FILE --long-opt --opt-req-par="foo bar" -- --not-opt
短いオプション1: a; 'VAR'
短いオプション2: b
短いオプション3: c
短いオプション4: p
短いオプション5: q
短いオプション6: r
被演算子1: FILE
長いオプション1: long-opt
長いオプション2: opt-req-par; 'foo bar'
被演算子2: --not-opt
こういう出力ができるはず。つまり-aと--opt-req-parはパラメータを取って、--以降はオプションとして解釈されないっていうやつ。
ところが俺の知識量では短いオプションを解析する部分をすごく冗長にしか書けない。いちいちループを回すせいで遅いし。
動作自体はこれでいいので、短いオプションをもうちょっとうまく解析する方法とかないかな。
661デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/17(土) 19:14:04.69ID:DG9kgnl30 なんで、aのあとにVARくるんだ? 仕様がおかしくないか?
VARが単体の値もしくは、-cの値っていうのならまだわかるんだが
VARが単体の値もしくは、-cの値っていうのならまだわかるんだが
662デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/17(土) 19:19:32.18ID:eQWBxdMf0 エクセルマクラーと同じ病気やね
663デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/17(土) 19:49:25.15ID:DG9kgnl30 tarで試したが、これで動くのかよ・・・
tar czvf a.tar.gz a
tar fczv a.tar.gz a
パラメータ取る短いオプションが複数あったとき
どう解釈するのが普通なんだろ
tar czvf a.tar.gz a
tar fczv a.tar.gz a
パラメータ取る短いオプションが複数あったとき
どう解釈するのが普通なんだろ
664デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/17(土) 20:09:39.20ID:DG9kgnl30 getoptやgetoptsは短いオプションがパラメータを取るとき、
短いオプション以降がパラメータとみなされるようだ
-abcde で cがパラメータを取るとき、
-a -b -c de と解釈される
実装によってバラバラなのは当然だろうが
こっちのほうが楽だろうな
>>660の仕様だと、aとcがパラメータを取るとき
-abcde VAR をどう解釈して良いのかわからない
-abcde VAR1 VAR2 とすりゃいいのかもしれんが、
これは人間にとってわかりやすいんだろうか?
短いオプション以降がパラメータとみなされるようだ
-abcde で cがパラメータを取るとき、
-a -b -c de と解釈される
実装によってバラバラなのは当然だろうが
こっちのほうが楽だろうな
>>660の仕様だと、aとcがパラメータを取るとき
-abcde VAR をどう解釈して良いのかわからない
-abcde VAR1 VAR2 とすりゃいいのかもしれんが、
これは人間にとってわかりやすいんだろうか?
665デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/17(土) 20:18:41.59ID:eQWBxdMf0 バカは考えるだけムダやぞw
666デフォルトの名無しさん (ワッチョイ ad23-H6Qh)
2018/11/17(土) 20:23:56.08ID:UtANxJrV0 >>663
tarはハイフン無しでオプションを書くといい感じに並べ替えてくれる
tarはハイフン無しでオプションを書くといい感じに並べ替えてくれる
667デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/17(土) 20:45:00.33ID:ikDL4PRg0 つまり
-aVAR
-xyza VAR
みたいなのは許容して
-axyz VAR
は許容しないようにすればいいのかな。
まあ結局一文字オプションを扱う方法はくっそ遅いルーチンなのだがw
-aVAR
-xyza VAR
みたいなのは許容して
-axyz VAR
は許容しないようにすればいいのかな。
まあ結局一文字オプションを扱う方法はくっそ遅いルーチンなのだがw
668660 (ワッチョイ 56be-JwVn)
2018/11/17(土) 21:16:27.44ID:ikDL4PRg0 こうしてみました。
短いオプションの解析ルーチンの遅さは改善してませんが
値を取るオプションの解釈を皆さんから提示された方式に変えました。
https://paste.ubuntu.com/p/n7m8qZHwMb/
短いオプションの解析ルーチンの遅さは改善してませんが
値を取るオプションの解釈を皆さんから提示された方式に変えました。
https://paste.ubuntu.com/p/n7m8qZHwMb/
669デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/17(土) 21:33:05.69ID:eQWBxdMf0 >>668
提示てwバカにされとんのやぞおまえw
提示てwバカにされとんのやぞおまえw
670デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/17(土) 22:38:36.24ID:ikDL4PRg0 こういういったシェルスクリプトを書くの大変なので自動的に生成してくれるのがあればいいですけどね。
Pythonのdocoptみたいな。
Pythonのdocoptみたいな。
671デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/17(土) 22:57:50.85ID:eQWBxdMf0672デフォルトの名無しさん (ワッチョイ 5633-wOWl)
2018/11/17(土) 23:25:40.65ID:4Do7jDVB0 ふつーに、getopts でええやん!
入力補完を使ったら、別にコマンドが長くてもわかりやすさ優先でかまへんわ。
入力補完を使ったら、別にコマンドが長くてもわかりやすさ優先でかまへんわ。
673デフォルトの名無しさん (ワッチョイ 8680-vjqa)
2018/11/17(土) 23:58:26.07ID:2WlUsnTW0 Ruby にも、OptionParser, ARGV.getopts などのモジュールがあるので、自作などしない
674デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 00:47:33.69ID:tOYW/MHy0675デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 01:05:23.45ID:tOYW/MHy0676デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 01:17:46.87ID:tOYW/MHy0 余計な変数を消したり、被演算子の部分を外出ししたりした
https://paste.ubuntu.com/p/p7VwzJZ8Hv/
あとオレがリファクタリングするときによくやるんだが、
(他人の)リファクタリングする前のコードは長いことが多い
全体を把握しやすくするためにあえて一行にしたりして短くしている。
最終的にこのような書き方をするというわけではなくて一時的な処置
https://paste.ubuntu.com/p/p7VwzJZ8Hv/
あとオレがリファクタリングするときによくやるんだが、
(他人の)リファクタリングする前のコードは長いことが多い
全体を把握しやすくするためにあえて一行にしたりして短くしている。
最終的にこのような書き方をするというわけではなくて一時的な処置
677デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 01:19:40.72ID:tOYW/MHy0 あと、これもしたな。こんな部分、あとでどうとでもなるんだからここでやることじゃない
長いオプション1: long-opt
長いオプション2: opt-req-par; 'foo bar'
↓
長いオプション1: --long-opt
長いオプション2: --opt-req-par; 'foo bar'
長いオプション1: long-opt
長いオプション2: opt-req-par; 'foo bar'
↓
長いオプション1: --long-opt
長いオプション2: --opt-req-par; 'foo bar'
678デフォルトの名無しさん (ワッチョイ 86cc-sJSV)
2018/11/18(日) 01:21:35.58ID:dx8aUZPH0 caseの後の変数はダブルコーテーションで括らなくていいって知ってた?
679デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 01:26:08.97ID:tOYW/MHy0 長いオプションの部分をフラットにした。
https://paste.ubuntu.com/p/Y4nTQBnTFw/
あとはクソめんどくさい一文字の部分だな。
どうするか考えとらんのだがw
仕様は変えるかもしれん。
https://paste.ubuntu.com/p/Y4nTQBnTFw/
あとはクソめんどくさい一文字の部分だな。
どうするか考えとらんのだがw
仕様は変えるかもしれん。
680デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 01:27:00.28ID:tOYW/MHy0 >>678
うん。だから徐々に消してるよw
うん。だから徐々に消してるよw
681デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 01:28:24.11ID:tOYW/MHy0 あ、いくつかパっと見でわかるミスがw
まあ途中のコードは参考だから
俺がどうやってリファクタリングしているか
まあ途中のコードは参考だから
俺がどうやってリファクタリングしているか
682デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 02:04:33.63ID:tOYW/MHy0 とりあえずは大まかな仕様は変えてない
https://paste.ubuntu.com/p/SQFnqmCJs2/
変数をなくそうか、でもそうすると再帰ありの関数を追加するか
setを使わないといけなくてごちゃごちゃする。
いろいろ悩んだがとりあえずそのままにしている。
cutの呼び出しはなくしたので速くなってるはず。
といっても、この程度だとLinuxなら体感できないはずなんだがWSLでやってる?
1文字オプションの分解の所がやはり面倒だな。
知らないオプションはエラーにするようにすれば、
1文字を抜き出す必要はなくなるかもしれないが
https://paste.ubuntu.com/p/SQFnqmCJs2/
変数をなくそうか、でもそうすると再帰ありの関数を追加するか
setを使わないといけなくてごちゃごちゃする。
いろいろ悩んだがとりあえずそのままにしている。
cutの呼び出しはなくしたので速くなってるはず。
といっても、この程度だとLinuxなら体感できないはずなんだがWSLでやってる?
1文字オプションの分解の所がやはり面倒だな。
知らないオプションはエラーにするようにすれば、
1文字を抜き出す必要はなくなるかもしれないが
683デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 02:13:58.54ID:tOYW/MHy0 >>670
> Pythonのdocoptみたいな。
あと一応あるで
https://github.com/docopt/docopts
goバイナリでオプション解析して、シェルスクリプトで
evalできるコードを出力して、そのコードで環境変数を
設定するという仕組みで、純粋なシェルスクリプト実装ではないけど
> Pythonのdocoptみたいな。
あと一応あるで
https://github.com/docopt/docopts
goバイナリでオプション解析して、シェルスクリプトで
evalできるコードを出力して、そのコードで環境変数を
設定するという仕組みで、純粋なシェルスクリプト実装ではないけど
684デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 02:21:13.13ID:tOYW/MHy0 ちなみにオプション解析の部分は一般的に最初に一回だけ行う部分なので
被らないようにしたり、無理して変数をなくす必要はないんだけどね
被らないようにしたり、無理して変数をなくす必要はないんだけどね
685デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/18(日) 17:17:51.79ID:Fz4U8sel0 >>674
オプションの番号は,競合するオプションが指定された時に後者を優先する目的です。
rm -i -f
としたときに「確認する」のではなく「強制的に消し」たいので。
alias rm='\rm -i'
の状態でrm -fとしたときは確認オプションが有効になるんじゃなくて強制的に消去したいよね?
オプションの番号は,競合するオプションが指定された時に後者を優先する目的です。
rm -i -f
としたときに「確認する」のではなく「強制的に消し」たいので。
alias rm='\rm -i'
の状態でrm -fとしたときは確認オプションが有効になるんじゃなくて強制的に消去したいよね?
686デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/18(日) 17:19:37.66ID:Fz4U8sel0687デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/18(日) 17:23:02.81ID:Fz4U8sel0 連投すまん。
ちなみにどうやら汎用性のあるシェルスクリプトではローカル変数というのはsetを使わない限り実現できないようで,
そしてsetは今まさに解析すべき引数郡がが格納されているので安易に書き換えられない。
だからPythonの慣例を参考にして前後にアンダースコアを二つ続けて(無意味だけど)ローカル変数であることを示してるつもり。
ちなみにどうやら汎用性のあるシェルスクリプトではローカル変数というのはsetを使わない限り実現できないようで,
そしてsetは今まさに解析すべき引数郡がが格納されているので安易に書き換えられない。
だからPythonの慣例を参考にして前後にアンダースコアを二つ続けて(無意味だけど)ローカル変数であることを示してるつもり。
688デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/18(日) 17:35:21.66ID:Fz4U8sel0 ${numbar:-0}←これすごいアイデアですね。
シェルスクリプトの冒頭でnumber=0とかで初期化しなくても、
「カウンターを初期化するのは値が設定されてないときである」ことを利用して変数展開を行なうのか。
シェルスクリプトの冒頭でnumber=0とかで初期化しなくても、
「カウンターを初期化するのは値が設定されてないときである」ことを利用して変数展開を行なうのか。
689デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 17:59:50.57ID:tOYW/MHy0 >>685
> オプションの番号は,競合するオプションが指定された時に後者を優先する目的です。
それなら変数に入れておけば良いんだよ。
競合するオプションなら、変数を同じにしておけば良い
基本的に「オプションの解析」では変数に値を入れるのみ
その場で処理はしない。変数に入れた値が後者で上書きされるから
必然的に後者が優先される
> その通り。WSLでやってる。なるほどLinuxネイティブではcutを一文字ごとに呼び出しても十分早いのかな?
time dash -c 'i=0; while [ $i -lt 1000 ]; do echo a | cut -c 1 > /dev/null; i=$((i+1)); done'
Linuxでこれを実行すると約1秒。WSLでこれを実行すると15秒。fork(サブプロセス生成)が行われるとこれだけの差がでる
元々forkは遅いのだが、WSL上だと更に輪をかけて遅くなるのがわかる
これをforkなしのシェルだけで実行できる同等のコードに置き換えるとWSLで50ミリ秒に減る。Linuxだと20ミリ秒にへる
time dash -c 'i=0; while [ $i -lt 1000 ]; do v=abc; v=${v%"${v#?}"}; echo $v >/dev/null ; i=$((i+1)); done'
もっともforkなしのコードは万能ではなく、文字列の最初の一文字を取るために「文字列の最初の一文字を取り除いた残り」を
求めてから、全体から抜き取っているために、文字列が長くなると極端に遅くなる。
文字列を1文字ずつ処理するコードを書いたとして、1000文字〜1万文字程度が限界。(数秒〜数十秒かかる)
それ以上の長さの文字列を1文字ずつ処理するコードを書くならsedあたりで1文字ずつに分解して処理したほうが良いだろう
POSIX準拠しなくていいなら${v:0:1} を使ったほうが速いと思う(計測はしてない)
だけど一般的なオプション程度の長さであれば十分速い。少なくともcutを使うよりも遅くなることはないだろう
> オプションの番号は,競合するオプションが指定された時に後者を優先する目的です。
それなら変数に入れておけば良いんだよ。
競合するオプションなら、変数を同じにしておけば良い
基本的に「オプションの解析」では変数に値を入れるのみ
その場で処理はしない。変数に入れた値が後者で上書きされるから
必然的に後者が優先される
> その通り。WSLでやってる。なるほどLinuxネイティブではcutを一文字ごとに呼び出しても十分早いのかな?
time dash -c 'i=0; while [ $i -lt 1000 ]; do echo a | cut -c 1 > /dev/null; i=$((i+1)); done'
Linuxでこれを実行すると約1秒。WSLでこれを実行すると15秒。fork(サブプロセス生成)が行われるとこれだけの差がでる
元々forkは遅いのだが、WSL上だと更に輪をかけて遅くなるのがわかる
これをforkなしのシェルだけで実行できる同等のコードに置き換えるとWSLで50ミリ秒に減る。Linuxだと20ミリ秒にへる
time dash -c 'i=0; while [ $i -lt 1000 ]; do v=abc; v=${v%"${v#?}"}; echo $v >/dev/null ; i=$((i+1)); done'
もっともforkなしのコードは万能ではなく、文字列の最初の一文字を取るために「文字列の最初の一文字を取り除いた残り」を
求めてから、全体から抜き取っているために、文字列が長くなると極端に遅くなる。
文字列を1文字ずつ処理するコードを書いたとして、1000文字〜1万文字程度が限界。(数秒〜数十秒かかる)
それ以上の長さの文字列を1文字ずつ処理するコードを書くならsedあたりで1文字ずつに分解して処理したほうが良いだろう
POSIX準拠しなくていいなら${v:0:1} を使ったほうが速いと思う(計測はしてない)
だけど一般的なオプション程度の長さであれば十分速い。少なくともcutを使うよりも遅くなることはないだろう
690デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/18(日) 18:05:11.85ID:tOYW/MHy0 >>668
今回は長いコードが邪魔だったので使ったけど、
例えばnumberが環境変数としてexportされていたりしたら
おかしいことになるので最初に初期化するほうが良いけどね
毎回パラメータ展開してるからわずかとはいえ遅くなるだろうし
それよりも、所見では使い道がわからない
${var:+value}の方が凄いアイデア
シェルを作った人はよくもまあこんな応用例が
高いものを作ったもんだと思うよ
今回は長いコードが邪魔だったので使ったけど、
例えばnumberが環境変数としてexportされていたりしたら
おかしいことになるので最初に初期化するほうが良いけどね
毎回パラメータ展開してるからわずかとはいえ遅くなるだろうし
それよりも、所見では使い道がわからない
${var:+value}の方が凄いアイデア
シェルを作った人はよくもまあこんな応用例が
高いものを作ったもんだと思うよ
691デフォルトの名無しさん (ワッチョイ 56be-JwVn)
2018/11/18(日) 23:06:30.15ID:Fz4U8sel0 test <string>は<string>が非空に限り成功するのね。これも知らんかったわ……。
692デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/21(水) 17:53:42.80ID:OLor19Fe0 しつこくてすまん。
シェルスクリプトの引数解析の話なんだが
(-cが引数を取るオプションとして)
「$ somecmd -c -- --not-a-opt」
っていうコマンドラインにおいて,
・「--」を-cオプションの引数として見るか
・「--」はいかなる場所(オプションの引数の位置だとしても)においても
以降が被演算子であることを示すものであると見るか
どっちが自然だろう。GNU getoptは前者の解析結果を出すけど恐らく内部的には後者の解釈で
エラーになる。
シェルスクリプトの引数解析の話なんだが
(-cが引数を取るオプションとして)
「$ somecmd -c -- --not-a-opt」
っていうコマンドラインにおいて,
・「--」を-cオプションの引数として見るか
・「--」はいかなる場所(オプションの引数の位置だとしても)においても
以降が被演算子であることを示すものであると見るか
どっちが自然だろう。GNU getoptは前者の解析結果を出すけど恐らく内部的には後者の解釈で
エラーになる。
693デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/21(水) 18:33:47.11ID:UM5ff+tU0 引数取るなら何であれ引数に決まってるだろ
どうでもいいけどさ、その被演算子ってのやめてくんない?
演算子なんて登場してないんだから
どうでもいいけどさ、その被演算子ってのやめてくんない?
演算子なんて登場してないんだから
694デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/21(水) 18:55:25.78ID:OLor19Fe0 operandって被演算子のことだと思うんだけど。
まあ「--」を引数と見るってことね。ありがとう。
まあ「--」を引数と見るってことね。ありがとう。
695デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/21(水) 19:16:12.30ID:UM5ff+tU0 だからそのoperandが出てこないって話
696デフォルトの名無しさん (ワンミングク MM5a-sJSV)
2018/11/21(水) 20:33:17.21ID:cLxfY5McM697デフォルトの名無しさん (ワッチョイ 8698-9Fzi)
2018/11/21(水) 21:01:13.07ID:UM5ff+tU0698デフォルトの名無しさん (ワッチョイ 9564-ddua)
2018/11/21(水) 21:31:00.38ID:OLor19Fe0 ああ。ほんとだ。The Open Groupの文書を参考にする限り
somecmd -c XXX FILE
とあった場合被演算子はFILEでXXXはオプション引数だね。勘違いしてた。
somecmd -c XXX FILE
とあった場合被演算子はFILEでXXXはオプション引数だね。勘違いしてた。
699デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 12:14:20.49ID:I8hvszb00 Qiitaで知ったけどこの構文便利だね。
${VAL+:} false
↑これで$VAL変数が空文字だろうが定義されてさえいれば真,そうでなけば偽。
今まで[ -n ]と[ "x$VAL" = "$VAL:-x" ]とか組み合わせてたけどこれでスッキリ解決。
コマンド呼び出しも少なくなるから微妙に処理速度も上がるだろうし。
ただ難点は,test構文を用いた方法より遥かに難読になること。${VAL+:} false←これで何をやってるかなんて注釈がないと分からん。
${VAL+:} false
↑これで$VAL変数が空文字だろうが定義されてさえいれば真,そうでなけば偽。
今まで[ -n ]と[ "x$VAL" = "$VAL:-x" ]とか組み合わせてたけどこれでスッキリ解決。
コマンド呼び出しも少なくなるから微妙に処理速度も上がるだろうし。
ただ難点は,test構文を用いた方法より遥かに難読になること。${VAL+:} false←これで何をやってるかなんて注釈がないと分からん。
700デフォルトの名無しさん (ワッチョイ cf98-/G1A)
2018/11/24(土) 12:41:53.30ID:emfrr2Lm0701デフォルトの名無しさん (アウアウカー Sa87-fvbk)
2018/11/24(土) 14:04:21.10ID:jPqivsUqa 定義されてるかどうかってどういう時に用いるんだ
C言語やってた頃は二重インポート防ぐためとかやってたけど同じような感じ?
C言語やってた頃は二重インポート防ぐためとかやってたけど同じような感じ?
702デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 14:31:59.62ID:I8hvszb00 >>700
「一般的」かどうかは知らない。それともその形式がより多く使われているという根拠があるのかな?
いずれにしてもコロンコマンド(と変数展開)がシェルのビルトインとしてPOSIXで定められているのに対して
testコマンドはPOSIXにおいては外部コマンド。尤もBashやZshではシェルに組み込まれてるけど。
外部コマンドを呼び出すのとシェルの内部でコマンドを展開するとでは後者のほうが早いよ。
君にとっては「Qittaクオリティ」でも,速度が優秀なのは君が提示したほうじゃなく「Qittaクオリティ」の方。
「一般的」かどうかは知らない。それともその形式がより多く使われているという根拠があるのかな?
いずれにしてもコロンコマンド(と変数展開)がシェルのビルトインとしてPOSIXで定められているのに対して
testコマンドはPOSIXにおいては外部コマンド。尤もBashやZshではシェルに組み込まれてるけど。
外部コマンドを呼び出すのとシェルの内部でコマンドを展開するとでは後者のほうが早いよ。
君にとっては「Qittaクオリティ」でも,速度が優秀なのは君が提示したほうじゃなく「Qittaクオリティ」の方。
703デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 14:49:43.89ID:I8hvszb00 dashでも[はシェル組込だね。実際testユーティリティを外部コマンドに頼ってるシェルって今現在存在しているのだろうか。
Heirloom shellあたりだとありえそう(試してないけど)
Heirloom shellあたりだとありえそう(試してないけど)
704デフォルトの名無しさん (ワッチョイ cf98-/G1A)
2018/11/24(土) 15:54:11.31ID:emfrr2Lm0 > 「一般的」かどうかは知らない。それともその形式がより多く使われているという根拠があるのかな?
ぐぐればコレばっかり見つかるはずだが?
> testコマンドはPOSIXにおいては外部コマンド。尤もBashやZshではシェルに組み込まれてるけど。
全てのシェルで [ はビルトインだ
シェルに組み込まれていないというものがあれば教えてくれ
ぐぐればコレばっかり見つかるはずだが?
> testコマンドはPOSIXにおいては外部コマンド。尤もBashやZshではシェルに組み込まれてるけど。
全てのシェルで [ はビルトインだ
シェルに組み込まれていないというものがあれば教えてくれ
705デフォルトの名無しさん (ワッチョイ cf98-/G1A)
2018/11/24(土) 16:18:05.53ID:emfrr2Lm0 falseコマンドはPOSIXでシェルのビルトインではない
もっともどのシェルでもビルトインになっているが
もっともどのシェルでもビルトインになっているが
706デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 17:26:54.56ID:I8hvszb00 >>704
> ググればこればっかり
ほう,それは知らなかった。pws=0にしたGoogle検索英語版では${VAR+:}が多いように見受けられるな。
> 全てのシェルで[はビルトイン
test(1)ユーティリティは,あくまでPOSIXにおいて組込ユーティリティじゃないという話。
根拠はこれ: http://pubs.opengroup.org/onlinepubs/9699919799/idx/sbi.html
> シェルに組み込まれていないというものがあれば教えてくれ
ご査収ください→https://www.unix.com/man-page/v7/1/sh/#neo-man-page-output
> ググればこればっかり
ほう,それは知らなかった。pws=0にしたGoogle検索英語版では${VAR+:}が多いように見受けられるな。
> 全てのシェルで[はビルトイン
test(1)ユーティリティは,あくまでPOSIXにおいて組込ユーティリティじゃないという話。
根拠はこれ: http://pubs.opengroup.org/onlinepubs/9699919799/idx/sbi.html
> シェルに組み込まれていないというものがあれば教えてくれ
ご査収ください→https://www.unix.com/man-page/v7/1/sh/#neo-man-page-output
707デフォルトの名無しさん (ワッチョイ e398-/G1A)
2018/11/24(土) 17:36:50.26ID:b7tmfxF40 >>706
falseがビルトインって話じゃなかったの?w
falseがビルトインって話じゃなかったの?w
708デフォルトの名無しさん (ワッチョイ e398-/G1A)
2018/11/24(土) 17:38:22.47ID:b7tmfxF40 > ほう,それは知らなかった。pws=0にしたGoogle検索英語版では${VAR+:}が多いように見受けられるな。
"${VAR+:}"で検索したけど5件しかなかったよ?
"${VAR+x}"だと約 3,410,000 件
"${VAR+:}"で検索したけど5件しかなかったよ?
"${VAR+x}"だと約 3,410,000 件
709デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 17:41:59.00ID:I8hvszb00 ちなみに「すべてのシェル」と言うくらいなのだから,
主要でありPOSIX互換を謳うGNU Bash, Zsh, Debian Almquist shell(dash), yash, MirOS ksh(mksh)くらいについては知らべてるとは思うものの,
POSIXの記述を知らないようなので,
一応,これら5つのシェルがtest(1)ユーティリティを組込コマンドにしているという根拠を以下に挙げておこう。
GNU Bash: https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins
Zsh: http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#Shell-Builtin-Commands
dash: http://man7.org/linux/man-pages/man1/dash.1.html
yash: https://yash.osdn.jp/doc/ja/#alpha-order
mksh: https://www.mirbsd.org/htman/i386/man1/mksh.htm
主要でありPOSIX互換を謳うGNU Bash, Zsh, Debian Almquist shell(dash), yash, MirOS ksh(mksh)くらいについては知らべてるとは思うものの,
POSIXの記述を知らないようなので,
一応,これら5つのシェルがtest(1)ユーティリティを組込コマンドにしているという根拠を以下に挙げておこう。
GNU Bash: https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins
Zsh: http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#Shell-Builtin-Commands
dash: http://man7.org/linux/man-pages/man1/dash.1.html
yash: https://yash.osdn.jp/doc/ja/#alpha-order
mksh: https://www.mirbsd.org/htman/i386/man1/mksh.htm
710デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 17:44:33.96ID:I8hvszb00711デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 17:47:23.27ID:I8hvszb00 ちなみにfalse(1)ユーティリティもPOSIXにおいてシェル組込みとして定められている訳ではない。
712デフォルトの名無しさん (ワッチョイ ffb3-8s0F)
2018/11/24(土) 17:49:01.92ID:362BcdsM0 となると処理速度的にはどっちが良いの?
713デフォルトの名無しさん (ワッチョイ e398-/G1A)
2018/11/24(土) 17:50:38.66ID:b7tmfxF40 いや、俺が言ったことを復唱されてもこまるんだがw
ちなみにビルトインかどうかはPATHを空にして実行できるかどうかでわかるよ
builtinやtypeがないシェルもあるからね
ちなみにビルトインかどうかはPATHを空にして実行できるかどうかでわかるよ
builtinやtypeがないシェルもあるからね
714デフォルトの名無しさん (ワッチョイ e398-/G1A)
2018/11/24(土) 17:51:02.76ID:b7tmfxF40 >>712
大差なし
大差なし
715デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 18:05:17.83ID:I8hvszb00 >>712
大差ないけど,ただ,もしもPOSIXで定めらていないのを理由にしてtest(1)ユーティリティを組み込んでいないシェルがあったとして
そのシェルにおいては変数展開(これは確実にシェルが仕事する)のほうがtest(1)ユーティリティをforkしてexecするより若干早いので
速度は${VAR+:}のほうが上。
大差ないけど,ただ,もしもPOSIXで定めらていないのを理由にしてtest(1)ユーティリティを組み込んでいないシェルがあったとして
そのシェルにおいては変数展開(これは確実にシェルが仕事する)のほうがtest(1)ユーティリティをforkしてexecするより若干早いので
速度は${VAR+:}のほうが上。
716デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 18:06:48.53ID:I8hvszb00 >>713
typeはPOSIXで定められているので,もしないシェルがあればPOSIX互換ではない。
つまり「ビルトインコマンド」なんていう概念はないかもしれないので,そんなことを調べるのは無駄に思えるな。
typeはPOSIXで定められているので,もしないシェルがあればPOSIX互換ではない。
つまり「ビルトインコマンド」なんていう概念はないかもしれないので,そんなことを調べるのは無駄に思えるな。
717デフォルトの名無しさん (ワッチョイ e398-/G1A)
2018/11/24(土) 19:13:13.38ID:b7tmfxF40 へー、poshはPOSIX互換じゃなかったのか
>Debian Policy に準拠した普通のシェル
>posh は、pdksh の軽装版であり、Debian ポリシーの準拠を目指し、 いくつかの特別な機能を付け加えたものです。
>
>警告: Debian の /bin/sh スクリプトの多くは、実際はポリシーに準拠していると は限りませんので、
>posh を /bin/sh として使うと破損箇所が判明するかもしれま せん。
って書いてある割に大したことないな
>Debian Policy に準拠した普通のシェル
>posh は、pdksh の軽装版であり、Debian ポリシーの準拠を目指し、 いくつかの特別な機能を付け加えたものです。
>
>警告: Debian の /bin/sh スクリプトの多くは、実際はポリシーに準拠していると は限りませんので、
>posh を /bin/sh として使うと破損箇所が判明するかもしれま せん。
って書いてある割に大したことないな
718デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/24(土) 20:44:49.31ID:I8hvszb00 まあ ここまでPOSIX POSIX連呼しときながらアレだけども,
別にシェルってPOSIX shに準拠してる必要性なんてまったくないよなw
poshも「POSIX互換じゃないシェル」として,便利に使えるようになればそれでいい。
実際,俺は使っていないものの,同級生にはfishを勧めてる。
別にシェルってPOSIX shに準拠してる必要性なんてまったくないよなw
poshも「POSIX互換じゃないシェル」として,便利に使えるようになればそれでいい。
実際,俺は使っていないものの,同級生にはfishを勧めてる。
719デフォルトの名無しさん (アウアウカー Sa87-fvbk)
2018/11/24(土) 20:55:10.29ID:32uSmIhta ポジクッス警察がいるから多少はね?
720デフォルトの名無しさん (ワッチョイ e398-/G1A)
2018/11/24(土) 20:57:06.31ID:b7tmfxF40 それじゃ俺も言っておかなきゃいかんのか?
まあ ここまでPOSIX POSIX連呼しときながらアレだけども,
別にシェルってPOSIX shに準拠してる必要性なんてまったくなくて
POSIXに準拠していなくても、現実にPOSIX互換の標準シェルとして
デフォルトシェルで採用されているのであればそれに対応すべきだと思っている
だから、dash、(busybox)ash、bash、ksh あたりは対応必須で
zsh、posh、yash、あたりは優先度が低い。mksh、pdkshは
デフォルトシェルとして採用されている事例があるのかわからんが
まあ ここまでPOSIX POSIX連呼しときながらアレだけども,
別にシェルってPOSIX shに準拠してる必要性なんてまったくなくて
POSIXに準拠していなくても、現実にPOSIX互換の標準シェルとして
デフォルトシェルで採用されているのであればそれに対応すべきだと思っている
だから、dash、(busybox)ash、bash、ksh あたりは対応必須で
zsh、posh、yash、あたりは優先度が低い。mksh、pdkshは
デフォルトシェルとして採用されている事例があるのかわからんが
721デフォルトの名無しさん (ワッチョイ e398-/G1A)
2018/11/24(土) 20:58:50.94ID:b7tmfxF40 俺は現実主義なんでね。標準とか仕様がどうこうよりも
現実としてそれは選択肢にならないのであれば、選択肢にならないし
非標準でも選択肢としてなり得るのならそれを使う
現実としてそれは選択肢にならないのであれば、選択肢にならないし
非標準でも選択肢としてなり得るのならそれを使う
722デフォルトの名無しさん (ブーイモ MM1f-XNyg)
2018/11/24(土) 23:48:23.42ID:u7Q7GReoM ポジコレ棒で葬ってやんよ
723デフォルトの名無しさん (ワッチョイ 8fbe-pqc8)
2018/11/25(日) 07:40:30.00ID:rsPEFWOD0 もっと面白い書き込みして、どうぞ。
724デフォルトの名無しさん (ワッチョイ ffb3-8s0F)
2018/11/25(日) 12:05:00.87ID:Yow09MRJ0 >>715
その前提条件で言えば false も組み込みじゃないかもしれないのだから同じじゃないの?
変数が定義されていれば false は実行されないけど、未定義かどうかを確認したいから
実行するわけで。
ただ、fork and exec に関して言えば test コマンドが 1.1ms, false コマンド は 0.8ms 程度
(コマンドバイナリのテキストセクションがメモリキャッシュされている場合で、実行環境は
Intel Xeon E3-1220 3.1GHz/Linux kernel 4.15.0/glibc 2.27)。何千回も実行する様なケース
なら違いが分かるかも。
その前提条件で言えば false も組み込みじゃないかもしれないのだから同じじゃないの?
変数が定義されていれば false は実行されないけど、未定義かどうかを確認したいから
実行するわけで。
ただ、fork and exec に関して言えば test コマンドが 1.1ms, false コマンド は 0.8ms 程度
(コマンドバイナリのテキストセクションがメモリキャッシュされている場合で、実行環境は
Intel Xeon E3-1220 3.1GHz/Linux kernel 4.15.0/glibc 2.27)。何千回も実行する様なケース
なら違いが分かるかも。
725デフォルトの名無しさん (ワッチョイ d398-/G1A)
2018/11/25(日) 12:16:11.88ID:wMoGqmE60 POSIXでビルトインの方が速いって決まってるんだっけ?
726デフォルトの名無しさん (ワッチョイ e323-G2K7)
2018/11/25(日) 12:29:43.54ID:nRWf72Y30 >>725
外部コマンドはforkが発生するから結果的にビルトインの方が速い
外部コマンドはforkが発生するから結果的にビルトインの方が速い
727デフォルトの名無しさん (ワッチョイ d398-/G1A)
2018/11/25(日) 12:32:22.92ID:wMoGqmE60 いやPOSIXでどうなっているかの話だよ
728デフォルトの名無しさん (ワッチョイ ffd2-8s0F)
2018/11/25(日) 13:54:00.21ID:eaHucPl10 なんやこのバカwwww
729デフォルトの名無しさん (ワッチョイ e323-G2K7)
2018/11/25(日) 14:01:17.29ID:nRWf72Y30 >>727
下のページをざっと見る限り規定されてないように思う
オーバヘッドがある分遅いのは自明だからPOSIXが云々は関係ない話だとは思う
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
下のページをざっと見る限り規定されてないように思う
オーバヘッドがある分遅いのは自明だからPOSIXが云々は関係ない話だとは思う
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
730デフォルトの名無しさん (ワッチョイ c364-m15j)
2018/11/25(日) 18:36:53.00ID:74eaLfxV0 多分,なんでもPOSIX POSIXと言うので,からかってやろうとしたんだろう。
「お前の主張は全部POSIXに起源があるのか?」ってな。
まあ結果としてはネタにマジレスの嵐だった訳だがw
「お前の主張は全部POSIXに起源があるのか?」ってな。
まあ結果としてはネタにマジレスの嵐だった訳だがw
731デフォルトの名無しさん (オッペケ Sr47-ZXAZ)
2018/11/26(月) 12:25:16.95ID:RdZe26lCr 必死すぎる言い訳のせいで逆にひかれてしまったパターンw
732デフォルトの名無しさん (アメ MMe7-9KmN)
2018/11/26(月) 12:32:05.28ID:mqDjQZG/M とっても惹かれます
733デフォルトの名無しさん (ワッチョイ cf98-/G1A)
2018/11/26(月) 12:44:40.04ID:sgq1LDCF0 スプラッターやめろ
734デフォルトの名無しさん (ワッチョイ c336-CvEX)
2018/11/26(月) 17:46:57.26ID:M+tccdiG0 echoでログを残そうとしています。
echo "メッセージ" > ログファイル
で、ログファイルはNASに保存しようと考えているのですが
NASがなんらかの原因で見えない場合、bashだと無視して処理を続けるのに
cshだと、echoのとこで止まってしまいます。
止まらないようにする方法とかないですか?
echo "メッセージ" > ログファイル
で、ログファイルはNASに保存しようと考えているのですが
NASがなんらかの原因で見えない場合、bashだと無視して処理を続けるのに
cshだと、echoのとこで止まってしまいます。
止まらないようにする方法とかないですか?
735デフォルトの名無しさん (ドコグロ MMc7-I6zH)
2018/11/26(月) 20:45:32.63ID:dIk0IZ2NM736デフォルトの名無しさん (ワッチョイ 6f9f-KQkZ)
2018/11/27(火) 00:51:26.43ID:IxTjeZ9T0737デフォルトの名無しさん (ワッチョイ 638a-OaPJ)
2018/11/27(火) 02:59:30.28ID:vfcz+SK40 なぜかアホの子ってnfsをローカルファイルシステムと同様に信用しちゃうよね
738デフォルトの名無しさん (ドコグロ MMdf-I6zH)
2018/11/27(火) 07:15:38.13ID:EYppSGpIM 唐突にお前の仲間の話しされても困る
739デフォルトの名無しさん (オッペケ Sr47-U4w/)
2018/11/28(水) 08:43:07.23ID:lgqPOMnJr740デフォルトの名無しさん (ワッチョイ 638a-OaPJ)
2018/11/28(水) 09:03:44.81ID:6Gc6vrWs0 NFS特有のエラーがあるとは思いもしなかったりするんだよな。
挙げ句の果てにファイルロックがうまく動かないとか言い出す。
挙げ句の果てにファイルロックがうまく動かないとか言い出す。
741デフォルトの名無しさん (ワッチョイ d398-/G1A)
2018/11/28(水) 12:41:41.17ID:V/2Czdkr0 所詮、ネットワークを介したファイル共有だからね
ディスクはアクセスできない = 故障 と考えていいけど
ネットワークは一時的な切断やエラー、大きな遅延が想定される
だからリトライやタイムアウトといった処理を行う
通常のディスクアクセスを行うコードは、こういった
ネットワーク特有の事象について考慮されてない場合が多い
だから(NFSの設定により)ネットワーク通信が正常に完了
できるまで待ち続ける(プログラムはタイムアウトしないのでフリーズした状態)
もしくは一時的な接続不良でエラー終了したりする
ディスクはアクセスできない = 故障 と考えていいけど
ネットワークは一時的な切断やエラー、大きな遅延が想定される
だからリトライやタイムアウトといった処理を行う
通常のディスクアクセスを行うコードは、こういった
ネットワーク特有の事象について考慮されてない場合が多い
だから(NFSの設定により)ネットワーク通信が正常に完了
できるまで待ち続ける(プログラムはタイムアウトしないのでフリーズした状態)
もしくは一時的な接続不良でエラー終了したりする
742デフォルトの名無しさん (ワッチョイ c364-m15j)
2018/11/28(水) 20:10:37.32ID:N04UITTm0 シェルスクリプトの関数の名前の直後の括弧って あれはshに
「これは関数の名前ですよ」って教えるためのものっていう認識でOK?
foo() {
echo foo
}
↑こういうのの「()」。なんかCやらと同じように引数の指定とかができたらいいのにと
初心者ながら思ったんだけど そういう訳でもなさそうだし。
「これは関数の名前ですよ」って教えるためのものっていう認識でOK?
foo() {
echo foo
}
↑こういうのの「()」。なんかCやらと同じように引数の指定とかができたらいいのにと
初心者ながら思ったんだけど そういう訳でもなさそうだし。
743デフォルトの名無しさん (アウアウカー Sa87-fvbk)
2018/11/28(水) 20:12:50.29ID:aLWNsKMba えっ
744デフォルトの名無しさん (アウアウウー Sa27-ml8p)
2018/11/28(水) 20:22:26.38ID:wHjpMIAFa 引数は $1, $2 とかで受け取る。
呼び出す側は普通のコマンド実行のように書く。
呼び出す側は普通のコマンド実行のように書く。
745デフォルトの名無しさん (ブーイモ MMe7-X8Q6)
2018/11/28(水) 20:31:09.87ID:Vqd4vFOqM746デフォルトの名無しさん (ワッチョイ db64-VZvV)
2018/11/29(木) 13:01:23.15ID:Msn7clch0 >>745
なるほど。
「(」はサブシェルの開始だと思ってたけど
そうでもないんだね……。
シェルの構文ってちょっと難しいことすると途端に複雑怪奇になるな(俺の頭の問題かも知れんがw)
対話的な利用を前提にした設計だから仕方無いとは言え、Pythonみたいに対話状態でもバッチ状態でも扱いやすくできなかったのかな。
なるほど。
「(」はサブシェルの開始だと思ってたけど
そうでもないんだね……。
シェルの構文ってちょっと難しいことすると途端に複雑怪奇になるな(俺の頭の問題かも知れんがw)
対話的な利用を前提にした設計だから仕方無いとは言え、Pythonみたいに対話状態でもバッチ状態でも扱いやすくできなかったのかな。
747デフォルトの名無しさん (ワッチョイ 5f98-r3MB)
2018/11/29(木) 13:04:56.47ID:lCOis1qI0 小学生が政治語ってるのを聞いてる気分だ
748デフォルトの名無しさん (ワッチョイ db64-VZvV)
2018/11/29(木) 14:34:26.85ID:Msn7clch0 「どうして解散するですか?」
749デフォルトの名無しさん (ワッチョイ 9ab3-uhYH)
2018/11/29(木) 15:57:37.21ID:QFUJhwUI0 Python を使えばいいんじゃないかな
750デフォルトの名無しさん (ワッチョイ 5f98-r3MB)
2018/11/29(木) 16:07:41.49ID:lCOis1qI0 Pythonは構文が複雑怪奇すぎる
かっこは関数呼び出しの引数の開始だと思っていたのに
関数を定義するときにも使うらしい
とかいうだろうな
かっこは関数呼び出しの引数の開始だと思っていたのに
関数を定義するときにも使うらしい
とかいうだろうな
751デフォルトの名無しさん (アメ MMff-egAi)
2018/11/29(木) 16:11:55.77ID:qd4rCcG0M wwwww
752デフォルトの名無しさん (アウアウウー Sa47-2q9Y)
2018/11/29(木) 19:19:50.88ID:8tueZiBHa そしてあらゆる言語が気に入らず、新たな言語がまた一つ作られるのであった。
753デフォルトの名無しさん (アメ MMff-egAi)
2018/11/29(木) 19:39:24.56ID:qd4rCcG0M − 世界には1,400もの競合するプログラミング言語があった −
「1,400だって!? バカげてる! み全ての用途をうまくこなす統一言語の開発が必要だ!」
「そのとおりだわ!」
やがて…
− 世界には1,401もの競合するプログラミング言語があった −
https://imgs.xkcd.com/comics/standards.png
「1,400だって!? バカげてる! み全ての用途をうまくこなす統一言語の開発が必要だ!」
「そのとおりだわ!」
やがて…
− 世界には1,401もの競合するプログラミング言語があった −
https://imgs.xkcd.com/comics/standards.png
754デフォルトの名無しさん (ワッチョイ 838a-qnZY)
2018/11/29(木) 20:23:55.28ID:DaeVxseX0 >>753
男女の仲違いでもう2個増えるんだろ?
男女の仲違いでもう2個増えるんだろ?
755デフォルトの名無しさん (アウアウカー Sa43-WtRx)
2018/11/29(木) 20:25:46.41ID:dRsmoy+za 新しいのを作るんじゃなくて既存のを潰さないとな
756デフォルトの名無しさん (ワッチョイ 9ad2-uhYH)
2018/11/29(木) 20:45:38.03ID:C+POVdju0 (中二なんかな・・・)
757デフォルトの名無しさん (ワッチョイ db64-VZvV)
2018/11/29(木) 21:43:22.71ID:Msn7clch0 中二だろうがなんだろうが良いソフトウェアを作ってくれればそれでいい。
758デフォルトの名無しさん (ワッチョイ 9ad2-uhYH)
2018/11/29(木) 22:17:13.73ID:C+POVdju0 >>757
そおやってすぐ他人に頼ろうとするからいつまでたってもクズなんやおまえ
そおやってすぐ他人に頼ろうとするからいつまでたってもクズなんやおまえ
759デフォルトの名無しさん (ワッチョイ db64-VZvV)
2018/11/30(金) 01:40:39.33ID:ZZJKHSVT0 ワロタ
760デフォルトの名無しさん (ワッチョイ b69f-BnCY)
2018/11/30(金) 08:21:31.28ID:ShAjvwZw0 目的を見失ってるよね
道具であるはずの言語そのものを作り出すってのは
だからって、なんでもアセンブラってわけにもいかないが
道具であるはずの言語そのものを作り出すってのは
だからって、なんでもアセンブラってわけにもいかないが
761デフォルトの名無しさん (アウアウウー Sa47-2q9Y)
2018/11/30(金) 09:15:03.33ID:vx8Iixcxa タイヤは永遠に発明され続ける。
762デフォルトの名無しさん (アウアウカー Sa43-WtRx)
2018/11/30(金) 09:32:04.72ID:n+1J2GMZa (車輪じゃね?)
763デフォルトの名無しさん (アウアウウー Sa47-2q9Y)
2018/11/30(金) 09:38:04.79ID:vx8Iixcxa あ、そうか。まあどっちでもいいが。
764デフォルトの名無しさん (ワッチョイ 838a-qnZY)
2018/11/30(金) 09:40:18.92ID:5+dLrTA80 現代だって刀鍛冶とかいるじゃん
765デフォルトの名無しさん (ワッチョイ 2398-r3MB)
2018/11/30(金) 09:53:55.88ID:pEng5xY00 発明、改良と生産は違う
タイヤ、車輪で行われてるのは、発明ではなくて生産
発明こそ行われなくとも、小規模な改良は続いている
刀鍛冶も生産だろう。改良している人がいるのかは知らんが。
様々なデザインの洋服など、改良しているわけじゃないが
新しいものを作るっていうのはなんというべきだろうね
生産なんだが古い、新しいという概念はある。
だけど好みの違いでしか無いので改良とも違う
多くのものは改良されて続けているが、改良するためには
まず生産能力が必要。同じものを作れなければ改良はできないだろう
タイヤ、車輪で行われてるのは、発明ではなくて生産
発明こそ行われなくとも、小規模な改良は続いている
刀鍛冶も生産だろう。改良している人がいるのかは知らんが。
様々なデザインの洋服など、改良しているわけじゃないが
新しいものを作るっていうのはなんというべきだろうね
生産なんだが古い、新しいという概念はある。
だけど好みの違いでしか無いので改良とも違う
多くのものは改良されて続けているが、改良するためには
まず生産能力が必要。同じものを作れなければ改良はできないだろう
766デフォルトの名無しさん (ワッチョイ 2398-r3MB)
2018/11/30(金) 10:02:51.33ID:pEng5xY00 今の言語は最高とまでは言えない。
いつしか高級言語への進化が止まって、
単なる改良しか行われなくなってしまった
高級言語を超える、超高級言語が必要
俺にはそのアイデアがあるが、なにぶん能力がないw
目的は、超高級言語の開発だが、そのためには
まず言語が作れるようにならないといけないだろうな
ちなみに超高級言語のアイデアとは、現在設計書として
自然文で書いてあるものをプログラム言語として
記述可能にしようというもの。今の言語はモジュールやクラス構造までは
プログラム言語で記述できるが、プロジェクト全体の構造までは記述できない
例えば、Railsなどのフレームワークのmodelsやcontrollersといったディレクトリ構造は
プロジェクトで決まっているにもかからわず、ドキュメントで書くしかない。
だからmodelsに置くべきものをcontrollersにおいたり、modelsではやっては
いけないような処理をやることが出来てしまう。コンパイルエラーにも実行時エラーにもならない
いつしか高級言語への進化が止まって、
単なる改良しか行われなくなってしまった
高級言語を超える、超高級言語が必要
俺にはそのアイデアがあるが、なにぶん能力がないw
目的は、超高級言語の開発だが、そのためには
まず言語が作れるようにならないといけないだろうな
ちなみに超高級言語のアイデアとは、現在設計書として
自然文で書いてあるものをプログラム言語として
記述可能にしようというもの。今の言語はモジュールやクラス構造までは
プログラム言語で記述できるが、プロジェクト全体の構造までは記述できない
例えば、Railsなどのフレームワークのmodelsやcontrollersといったディレクトリ構造は
プロジェクトで決まっているにもかからわず、ドキュメントで書くしかない。
だからmodelsに置くべきものをcontrollersにおいたり、modelsではやっては
いけないような処理をやることが出来てしまう。コンパイルエラーにも実行時エラーにもならない
767デフォルトの名無しさん (アウアウカー Sa43-WtRx)
2018/11/30(金) 11:38:14.68ID:n+1J2GMZa 3行で
768デフォルトの名無しさん (アウアウウー Sa47-2q9Y)
2018/11/30(金) 12:29:51.33ID:vx8Iixcxa 超
高級言語が
必要
高級言語が
必要
769デフォルトの名無しさん (オッペケ Sr3b-xhs3)
2018/11/30(金) 12:30:21.78ID:+/lt4tPpr タイヤと
車輪は
同じもの
車輪は
同じもの
770デフォルトの名無しさん (アウアウウー Sa47-2q9Y)
2018/11/30(金) 12:47:31.33ID:vx8Iixcxa も
う
止めよう
う
止めよう
771デフォルトの名無しさん (ワッチョイ 9ab3-uhYH)
2018/11/30(金) 13:04:32.40ID:iEacaeBh0 実は
CASEツール
です
CASEツール
です
772デフォルトの名無しさん (ワッチョイ db64-VZvV)
2018/11/30(金) 15:46:57.55ID:ZZJKHSVT0 それずっと前にKnuthが実践してた文芸作譜と同じじゃね?
そしてアレは超絶面倒な作業。
そしてアレは超絶面倒な作業。
774デフォルトの名無しさん (ブーイモ MM26-6Zjp)
2018/12/01(土) 01:32:04.95ID:3WCvWAVjM 言語に縛られてるから駄目なんだよ
とか言ってみる
とか言ってみる
775デフォルトの名無しさん (ワッチョイ 9ab3-uhYH)
2018/12/01(土) 02:53:09.42ID:7CoKqMj50 「縛られるのが好き」ってプログラマ、結構多いんですよ
とか言ってみる
とか言ってみる
776デフォルトの名無しさん (オッペケ Sr3b-xhs3)
2018/12/01(土) 07:47:52.11ID:U3mK8vlPr 下ネタはもっと堂々と言わな逆にいやらしく感じるで
777デフォルトの名無しさん (ワッチョイ be33-4HQR)
2018/12/01(土) 10:18:14.73ID:Ly5JuDld0 全部縛ってヤってなんぼだと思うんです。
とか言ってみる。
とか言ってみる。
778デフォルトの名無しさん (ワッチョイ 2398-r3MB)
2018/12/01(土) 10:47:37.07ID:Km1sjdO20 お前らくだらない話ばっかり盛り上がるな
779デフォルトの名無しさん (オッペケ Sr3b-xhs3)
2018/12/01(土) 12:34:48.97ID:U3mK8vlPr さほど盛り上がっとらんやろw
人と関われよw
人と関われよw
780デフォルトの名無しさん (ワッチョイ 9a1d-C0zt)
2018/12/02(日) 02:44:47.66ID:+c90NOTB0 まあ 使える言語は多いほうが手広いわな
781デフォルトの名無しさん (オッペケ Sr3b-OA46)
2018/12/02(日) 17:31:01.53ID:OYZHkh2Or782デフォルトの名無しさん (ワッチョイ 76e7-97PR)
2018/12/02(日) 18:30:06.74ID:RWr+AACs0 自由に安くやってが最も困る。
783デフォルトの名無しさん (ワッチョイ db64-VZvV)
2018/12/04(火) 18:22:49.34ID:VVlGsdy50 find(1)ユーティリティの速度に関しての疑問なんだけど
https://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAO
ここに
「検査 -name を -type の前に置いているのは、すべてのファイルに対して stat(2) システムコールを行う無駄を省くためである。」
とある。これは「find(1)は-nameのほうが-typeより処理速度が速い」ということを言っているよね。
実のところ手元ではfindが優秀すぎるのか知らんが-nameを-typeより前に書いても後に書いても速度に変化はなかった。
が 基本的にはfindで複数の条件を指定するときは-nameを先頭あたりに置いたほうがいいのかな。
findのソースコードを見てないので推測になるが-permや-newerもstat(2)を実行してるぽいので-nameより遅い筈。
https://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAO
ここに
「検査 -name を -type の前に置いているのは、すべてのファイルに対して stat(2) システムコールを行う無駄を省くためである。」
とある。これは「find(1)は-nameのほうが-typeより処理速度が速い」ということを言っているよね。
実のところ手元ではfindが優秀すぎるのか知らんが-nameを-typeより前に書いても後に書いても速度に変化はなかった。
が 基本的にはfindで複数の条件を指定するときは-nameを先頭あたりに置いたほうがいいのかな。
findのソースコードを見てないので推測になるが-permや-newerもstat(2)を実行してるぽいので-nameより遅い筈。
784デフォルトの名無しさん (ワッチョイ 83b3-C+j/)
2018/12/04(火) 18:56:51.46ID:bTQB60BC0 statが遅いと言うのも幻想
785デフォルトの名無しさん (ブーイモ MMba-X2R9)
2018/12/04(火) 19:07:42.58ID:HBlgjyZNM 最近のファイルシステムはreaddirでタイプが取得できるよ
786デフォルトの名無しさん (ワッチョイ 938a-+wPc)
2018/12/06(木) 00:12:43.36ID:pQ33EIUW0 >>783
http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAE
-Olevel
1
これはデフォルトの最適化レベルであり、伝統的な動作に当たる。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (たとえば、 -name や -regex) が先に実行されるようにする。
http://linuxjm.osdn.jp/html/GNU_findutils/man1/find.1.html#lbAE
-Olevel
1
これはデフォルトの最適化レベルであり、伝統的な動作に当たる。 式を並べ替えるとき、ファイル名にのみ基づいた検査 (たとえば、 -name や -regex) が先に実行されるようにする。
787デフォルトの名無しさん (ワッチョイ 9164-5svG)
2018/12/06(木) 09:10:09.33ID:cC0kDT7D0788デフォルトの名無しさん (ワッチョイ 9164-5svG)
2018/12/06(木) 15:10:37.27ID:cC0kDT7D0 引数に一律にコマンドで操作を施したあと、それらをもう一度引数として扱うにはどうすればいいかな
$ a.sh arg1 arg2 arg3
みたいに起動されたとして$1,2,3にはarg1,2,3が入ってる。
これを$(echo $1 | tr '[:lower:]' '[:upper:]')みたいなコマンド置換を使ってARG1,2,3みたいに変形させる。
問題はこの後にa.shの中の別のコマンドに
somecmd "$@"
のような形でARG1,2,3を与えたいってこと。
while [ $# -eq 0 ]とshiftを使う普通のやりかたではループを抜けた後に$@が空になってしまう。
どうにかして引数の構造を維持したいんだけども……。
$ a.sh arg1 arg2 arg3
みたいに起動されたとして$1,2,3にはarg1,2,3が入ってる。
これを$(echo $1 | tr '[:lower:]' '[:upper:]')みたいなコマンド置換を使ってARG1,2,3みたいに変形させる。
問題はこの後にa.shの中の別のコマンドに
somecmd "$@"
のような形でARG1,2,3を与えたいってこと。
while [ $# -eq 0 ]とshiftを使う普通のやりかたではループを抜けた後に$@が空になってしまう。
どうにかして引数の構造を維持したいんだけども……。
789デフォルトの名無しさん (ワッチョイ e1e1-eDAb)
2018/12/06(木) 16:06:47.11ID:59uVculK0 >>788
eval set -- $(printf ' "$(printf "%%s" "$%d" | tr "[:lower:]" "[:upper:]")"' $(seq $#))
eval set -- $(printf ' "$(printf "%%s" "$%d" | tr "[:lower:]" "[:upper:]")"' $(seq $#))
790デフォルトの名無しさん (ワッチョイ 9164-5svG)
2018/12/06(木) 16:38:57.36ID:cC0kDT7D0 >>789
ありがとう。
ありがとう。
791デフォルトの名無しさん (ワッチョイ e19b-IYXC)
2018/12/12(水) 21:07:46.42ID:7+bnD1C/0 ここかどうかわからんのだけど、メールの添付ファイルのテキストCSV部分を切り出してDB格納しようと思ったら、
シェルスクリプトでヘッダから切り出すしかない?
シェルスクリプトでヘッダから切り出すしかない?
792デフォルトの名無しさん (ワッチョイ 5b76-3SjK)
2018/12/12(水) 21:36:28.16ID:xr4it+i10 そういう専用ツールがないんだったらそうだろうな
793デフォルトの名無しさん (ワッチョイ f398-2dqZ)
2018/12/13(木) 19:34:10.52ID:Nc8J2Ufn0 >>550
別件でググっていたら、言及しているドキュメント見つけた
${1+"$@"} で動かないシェルもあるようだ
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
> 最も有名なシェルの移植性の問題の一つは,`"$@"'との関連です.位置に 依存する引数が無いとき,
> POSIXでは`"$@"'を何もないことと 等価になっていますが,オリジナルのUnixバージョン7の
> Bourneシェルはその代 わりに`""'として扱い,この動作はDigital Unix 5.0のようにそれ以降の 実装でも提供されています.
>
> この移植性の問題を回避する伝統的な方法は,`${1+"$@"}'を使用する ことです.
> 残念ながら,この手法はMac OS Xでも使用されている,Zsh (3.x と 4.x)では動作しません.
> Bourneシェルをエミュレートしているとき,Zshは `${1+"$@"}'で単語の分離を実行します.
別件でググっていたら、言及しているドキュメント見つけた
${1+"$@"} で動かないシェルもあるようだ
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/autoconf-2.59/autoconf-ja_10.html
> 最も有名なシェルの移植性の問題の一つは,`"$@"'との関連です.位置に 依存する引数が無いとき,
> POSIXでは`"$@"'を何もないことと 等価になっていますが,オリジナルのUnixバージョン7の
> Bourneシェルはその代 わりに`""'として扱い,この動作はDigital Unix 5.0のようにそれ以降の 実装でも提供されています.
>
> この移植性の問題を回避する伝統的な方法は,`${1+"$@"}'を使用する ことです.
> 残念ながら,この手法はMac OS Xでも使用されている,Zsh (3.x と 4.x)では動作しません.
> Bourneシェルをエミュレートしているとき,Zshは `${1+"$@"}'で単語の分離を実行します.
794デフォルトの名無しさん (ワッチョイ 2364-kyah)
2018/12/16(日) 07:48:44.86ID:AoQUSXZn0 Bashってシングルクォートの内部でない限りバックスラッシュでシングルクオートを直接エスケープできるんだな。
マニュアルにも書いてないけど他人のスクリプト見て発見した。
$ squo=\'
$ echo $squo
'
↑こうできる。Bashは楽でいいなぁ
マニュアルにも書いてないけど他人のスクリプト見て発見した。
$ squo=\'
$ echo $squo
'
↑こうできる。Bashは楽でいいなぁ
795デフォルトの名無しさん (ワッチョイ 2b23-Ufcq)
2018/12/16(日) 09:07:44.57ID:rkLF3tWt0 >>794
水を差すようで悪いがposixで規定されているから他のシェルでも同じになる
水を差すようで悪いがposixで規定されているから他のシェルでも同じになる
796デフォルトの名無しさん (アウアウカー Sa6b-+gtp)
2018/12/16(日) 09:55:51.26ID:0jv0YmXXa なぜそれを特別に思ったのかわからんけど他は出来なかったりするの?
797デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/17(月) 19:35:33.43ID:41bJ0tdVa \ はエスケープだし使う事はあるので特に目新しい感じはしない。
sambaでファイルサーバ作ってWindowsからもファイルが書かれるような状況だとファイル名にスペースだの括弧だの普通に入れられてLinuxでログインしている端末からだとエスケープせざるを得なかったりする。
俺の場合はそれで一文字だけエスケープはよく使う。
sambaでファイルサーバ作ってWindowsからもファイルが書かれるような状況だとファイル名にスペースだの括弧だの普通に入れられてLinuxでログインしている端末からだとエスケープせざるを得なかったりする。
俺の場合はそれで一文字だけエスケープはよく使う。
798デフォルトの名無しさん (ワッチョイ 1e98-2dqZ)
2018/12/17(月) 21:17:48.10ID:lO+98ZHR0 Linuxで普通にファイル名にスペース入れられるんだから
sambaとかwindowsは全く関係ないけどね
sambaとかwindowsは全く関係ないけどね
799デフォルトの名無しさん (ワッチョイ 8376-2T4x)
2018/12/17(月) 23:45:58.91ID:LS1nUj7m0 CUI使いとGUI使いの違いだな
CUIでわざわざくそめんどくさいスペースなんぞを好き好んでは使わない。GUIではふつーにわかりやすくもなるから使う、普通に入れるのはあたりまえ
CUIでわざわざくそめんどくさいスペースなんぞを好き好んでは使わない。GUIではふつーにわかりやすくもなるから使う、普通に入れるのはあたりまえ
800デフォルトの名無しさん (ワッチョイ af03-Gl1U)
2018/12/17(月) 23:52:42.27ID:oCmK2PVR0 めんどくさくないけど?エアプなんキミ?
801デフォルトの名無しさん (ワッチョイ 2b1d-UKyl)
2018/12/17(月) 23:54:51.53ID:faSovs330 有志のコードに
ファイル名が空白入りだと事故るものがあったような?
自分は
安全とって全部アンダーバー変換しておく
ファイル名が空白入りだと事故るものがあったような?
自分は
安全とって全部アンダーバー変換しておく
802デフォルトの名無しさん (ワッチョイ 8376-2T4x)
2018/12/18(火) 00:10:28.35ID:DLVg/wUV0 >>800
めんどくさいめんどくさくないはまあ人次第だけどな
CUIでなんやかんやキーボード打ってる時に、エスケープしたり"や'囲ったり、そもそもスペースはもろもろコマンドでデリミッターだったりで、めんどくさいと思うけどな
人次第ではあるが、そゆのが想像できなずにエアプと言えるのがエアプっぽいと思わなくもない
めんどくさいめんどくさくないはまあ人次第だけどな
CUIでなんやかんやキーボード打ってる時に、エスケープしたり"や'囲ったり、そもそもスペースはもろもろコマンドでデリミッターだったりで、めんどくさいと思うけどな
人次第ではあるが、そゆのが想像できなずにエアプと言えるのがエアプっぽいと思わなくもない
803デフォルトの名無しさん (ワッチョイ 8b8a-j0aa)
2018/12/18(火) 01:24:02.71ID:2j/3pVMu0 >>801
有志って言ってもタダの素人だっただけの話じゃん
有志って言ってもタダの素人だっただけの話じゃん
804デフォルトの名無しさん (ワッチョイ 069f-ez/E)
2018/12/18(火) 03:02:35.05ID:HuP+yDtL0 >>798
もちろんファイル名には / 以外は何でもありだが Linux だけ使ってると普通はあまりそういうファイル作らないじゃない。一々エスケープしなきゃならないしシェルスクリプトで扱いづらいし。
まあ趣味の問題ではあるけどな。
もちろんファイル名には / 以外は何でもありだが Linux だけ使ってると普通はあまりそういうファイル作らないじゃない。一々エスケープしなきゃならないしシェルスクリプトで扱いづらいし。
まあ趣味の問題ではあるけどな。
805デフォルトの名無しさん (ワッチョイ 1e98-2dqZ)
2018/12/18(火) 03:52:25.12ID:aYYQx5Ta0 libreofficeから「報告書 2018-12-18」という名前で保存することの何が面倒なのか?
806デフォルトの名無しさん (ワッチョイ 3b9b-W8uN)
2018/12/18(火) 05:00:11.76ID:CtnsxEVc0 うわあ
807デフォルトの名無しさん (ワッチョイ 1e98-2dqZ)
2018/12/18(火) 05:48:13.89ID:aYYQx5Ta0 ファイル名にスペースが使えるOSが悪いんだって言いたいのかな?w
808デフォルトの名無しさん (ワッチョイ af03-PsFA)
2018/12/18(火) 06:17:30.36ID:mQMHvFDr0809デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/18(火) 09:37:03.21ID:92SsvGE7a >>805
ああ。WindowsみたいにGUIメインで使ってるの?それだけだったら面倒じゃないかもね。
ああ。WindowsみたいにGUIメインで使ってるの?それだけだったら面倒じゃないかもね。
810デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 10:24:35.01ID:H+ovSSRq0 >>808
なにをいいたいのかイミフすぎだな、プロフェッショナルwすぎて
補完時にもバックスラッシュ打たなきゃならんだろ?打たなくていい環境なの?そういう環境もあるんだよ
なんかただ馬鹿にしたいだけのお人か?しょうもない
なにをいいたいのかイミフすぎだな、プロフェッショナルwすぎて
補完時にもバックスラッシュ打たなきゃならんだろ?打たなくていい環境なの?そういう環境もあるんだよ
なんかただ馬鹿にしたいだけのお人か?しょうもない
811デフォルトの名無しさん (アウアウカー Sa6b-+gtp)
2018/12/18(火) 12:13:46.40ID:bhmdNwABa なんで自分以外みんな非効率って思ってるのここの人たち
最強は俺だから落ち着けよ
最強は俺だから落ち着けよ
812デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/18(火) 12:15:53.17ID:92SsvGE7a Tabキー押すと自動で保管したり変換したりしてくれる場合は楽かも。
楽ってだけで見た目エスケープだらけの見辛い状態にはなるが。
楽ってだけで見た目エスケープだらけの見辛い状態にはなるが。
813デフォルトの名無しさん (オッペケ Sra3-Gl1U)
2018/12/18(火) 12:25:17.53ID:Lulkb9OFr >>810
はいはいエアプさんはそろそろお昼寝の時間でちゅよ〜w
はいはいエアプさんはそろそろお昼寝の時間でちゅよ〜w
814デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 15:34:29.41ID:kLOm0zeN0 アホすぎなレスで笑うww
815デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 15:42:44.01ID:DOEC5j1K0 こいつらプログラム言語はシェルスクリプトしか使ったこと無いんか?
シェルスクリプトは珍しく引数の文字列をクォート(もしくはダブルクォート)で
くくるのが必須じゃない言語だが他の言語は殆どクォートでくくるんだぞ
"foobar" も "foo bar" も入力のしやすさに大差ないだろ
エスケープが必要なのは \ 等であってスペースはエスケープ不要なごく普通の文字なんだが
いつものことだが(シェルスクリプト以外の)経験の差を感じるよな
シェルスクリプトは珍しく引数の文字列をクォート(もしくはダブルクォート)で
くくるのが必須じゃない言語だが他の言語は殆どクォートでくくるんだぞ
"foobar" も "foo bar" も入力のしやすさに大差ないだろ
エスケープが必要なのは \ 等であってスペースはエスケープ不要なごく普通の文字なんだが
いつものことだが(シェルスクリプト以外の)経験の差を感じるよな
816デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:01:13.36ID:kLOm0zeN0 何をお怒りか存じませんが、括らなくてもいいから括らないのが普通になるんでございますよ。当然括るのが必須なら括るのが普通。シェルスクリプトでもスクリプトファイル書くときは変数展開では普通に括るし
コマンド叩くときにはいつも括ってるの??
コマンド叩くときにはいつも括ってるの??
817デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:03:24.94ID:kLOm0zeN0 >スクリプトファイル書くときは
ああ、ワンライナーなんぞでもだな。ここんとこ間違い/不要
ああ、ワンライナーなんぞでもだな。ここんとこ間違い/不要
818デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 16:21:43.27ID:DOEC5j1K0819デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:24:38.45ID:kLOm0zeN0820デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 16:28:29.69ID:DOEC5j1K0821デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 16:33:56.90ID:kLOm0zeN0822デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 16:56:33.71ID:DOEC5j1K0 アホすぎなレスで笑うww
823デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/18(火) 17:14:23.03ID:92SsvGE7a WindowsだとC言語とかでパスの区切りが \ になってて毎回 \\ と入れなきゃいけないのも面倒だな。
実は / でも大丈夫だったりはするが。
実は / でも大丈夫だったりはするが。
824デフォルトの名無しさん (ワッチョイ 1e81-wsuD)
2018/12/18(火) 17:18:15.10ID:1JLRyxNd0 今はパスにスペース入れるのも普通だし、対応もできるけど
トラブルのもとは根絶したいから、自分は使わない、それだけ
トラブルのもとは根絶したいから、自分は使わない、それだけ
825デフォルトの名無しさん (ワッチョイ 4676-2T4x)
2018/12/18(火) 17:24:06.70ID:kLOm0zeN0 >>822
ww ざんねんなこって。いろいろとw
ww ざんねんなこって。いろいろとw
826デフォルトの名無しさん (ワッチョイ 1e81-wsuD)
2018/12/18(火) 17:31:06.24ID:1JLRyxNd0 パスをコマンドの引数にする必要がある場合、
例えば、hogecommand --foo_option="filepath=[パス],otheroption=bar" なんていうのがある時、
パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
シングルクォートが使えるシェルならいいが、Windowsのように使えないものもあるから、
バックスラッシュなどでエスケープしたり、コマンドが以下の様な別の区切り文字を用意していたりする。
--foo_option=[filepath="/path/with space/",otheroption=bar]
対処方法がなかなか見つからないこともあり、面倒くさいので、
自分からすすんでスペースを入れようとは思わない。
例えば、hogecommand --foo_option="filepath=[パス],otheroption=bar" なんていうのがある時、
パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
シングルクォートが使えるシェルならいいが、Windowsのように使えないものもあるから、
バックスラッシュなどでエスケープしたり、コマンドが以下の様な別の区切り文字を用意していたりする。
--foo_option=[filepath="/path/with space/",otheroption=bar]
対処方法がなかなか見つからないこともあり、面倒くさいので、
自分からすすんでスペースを入れようとは思わない。
827デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 17:46:09.05ID:DOEC5j1K0 × パスにスペースが入っていると、コマンド自体がパースするときに一工夫がいる。
○ コマンドの引数の形式を適当に決めると、パースするときに一工夫がいるようになってしまう。
○ コマンドの引数の形式を適当に決めると、パースするときに一工夫がいるようになってしまう。
828デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 17:50:36.86ID:DOEC5j1K0 ちなみに気づいていないようだから言うと
>>826はパスにスペースが入っていると困る問題ではない
hogecommand --foo_option="filepath=/path/with space/,otheroption=bar"
,でsplitして、○○=を消せばいいだけだから何も困らない
この例で困るのは、パスにカンマが含まれている場合であって
スペースではない
>>826はパスにスペースが入っていると困る問題ではない
hogecommand --foo_option="filepath=/path/with space/,otheroption=bar"
,でsplitして、○○=を消せばいいだけだから何も困らない
この例で困るのは、パスにカンマが含まれている場合であって
スペースではない
829デフォルトの名無しさん (ワッチョイ 1e81-wsuD)
2018/12/18(火) 18:16:22.51ID:1JLRyxNd0 >>828
ああ、わるい、オプションの階層が一段階足らなかった。
hogeコマンドが、別のライブラリ(foo)のオプションを呼ぶような場合に、
hogecommand --hoge_option=foo_option="filepath=[パス],otheroption=bar"
hogecommand --hoge_option "--foo_option filepath=[パス],otheroption=bar"
こんなパターンがあって、そのままではやはりパースに一工夫が必要で面倒くさい。
ちなみに、上はmpv、下はyoutube-dlで使われている。
ああ、わるい、オプションの階層が一段階足らなかった。
hogeコマンドが、別のライブラリ(foo)のオプションを呼ぶような場合に、
hogecommand --hoge_option=foo_option="filepath=[パス],otheroption=bar"
hogecommand --hoge_option "--foo_option filepath=[パス],otheroption=bar"
こんなパターンがあって、そのままではやはりパースに一工夫が必要で面倒くさい。
ちなみに、上はmpv、下はyoutube-dlで使われている。
830デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 18:19:12.99ID:DOEC5j1K0 別のコマンドを呼び出すなら、別のコマンドにそのまま渡せばよかろう?
hogecommand --foo_option="どんな内容でも"
betsucommand どんな内容でも
はい。おしまい
hogecommand --foo_option="どんな内容でも"
betsucommand どんな内容でも
はい。おしまい
831デフォルトの名無しさん (ワッチョイ 2364-kyah)
2018/12/18(火) 18:24:29.26ID:n1+CJQ+h0 ちなみにファイル名により柔軟なのはWindowsよりも寧ろLinux(というかUnix系)だぞ。
Windowsは「con」とか「aux」とかも駄目だしバックスラッシュやコロンが含まれても駄目。
Unix系のOSは「\0(空文字)」と「/(スラッシュ)」だけが不適合で,あとは全ての文字をファイル名として
使用できる。
Windowsは「con」とか「aux」とかも駄目だしバックスラッシュやコロンが含まれても駄目。
Unix系のOSは「\0(空文字)」と「/(スラッシュ)」だけが不適合で,あとは全ての文字をファイル名として
使用できる。
832デフォルトの名無しさん (ワッチョイ 2b1d-UKyl)
2018/12/18(火) 18:35:11.65ID:/rMHixhE0 開業コードもつかえるのはまれにネタになる
833デフォルトの名無しさん (ワッチョイ 8b8a-j0aa)
2018/12/18(火) 22:33:16.76ID:2j/3pVMu0 >>810
今時はWindowsのコマンドプロンプトだって必要に応じてエスケープしてくれるぞ?
今時はWindowsのコマンドプロンプトだって必要に応じてエスケープしてくれるぞ?
834デフォルトの名無しさん (ワッチョイ 8b8a-j0aa)
2018/12/18(火) 22:34:34.10ID:2j/3pVMu0835デフォルトの名無しさん (JP 0H8b-O0Yg)
2018/12/18(火) 22:57:59.19ID:uKKjGArEH >>834
消す前に作れねーだろ
消す前に作れねーだろ
836デフォルトの名無しさん (ワッチョイ af03-Gl1U)
2018/12/18(火) 22:59:29.33ID:mQMHvFDr0 消せるわこのエアプw
837デフォルトの名無しさん (ワッチョイ 2364-kyah)
2018/12/18(火) 23:44:21.87ID:n1+CJQ+h0 名前に\0を含むファイルは作れないと思うけど。
少なくともPOSIXでは禁止されているし,http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_170
ext4でも作成できない。
……「エアプ」はどっちだろう。
少なくともPOSIXでは禁止されているし,http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_170
ext4でも作成できない。
……「エアプ」はどっちだろう。
838デフォルトの名無しさん (ワッチョイ 9f98-2dqZ)
2018/12/18(火) 23:56:48.31ID:DOEC5j1K0 正直ファイル名に\0が使えようが使えまいが
シェルスクリプトで\0が扱えないのでどうでもいい
シェルスクリプトで\0が扱えないのでどうでもいい
839デフォルトの名無しさん (ワッチョイ 469f-3Kg9)
2018/12/19(水) 04:45:08.43ID:gf1Tua9E0 エアプってなんなん?
840デフォルトの名無しさん (ブーイモ MM47-LjuL)
2018/12/19(水) 07:27:20.06ID:+7lasSiAM ¥x00
841デフォルトの名無しさん (オッペケ Sra3-Gl1U)
2018/12/19(水) 12:42:42.59ID:guVdMf63r >>839
おまえらの事やんw
おまえらの事やんw
842デフォルトの名無しさん (ワッチョイ 9b9f-q1e7)
2018/12/20(木) 00:17:43.13ID:6pIAvd2J0 Airぷ
843デフォルトの名無しさん (ブーイモ MMeb-6EUo)
2018/12/20(木) 00:39:10.52ID:0M5ZFUn5M for i in {0..255}; do touch "./hoge$(printf "\x$(printf "%02x" $i)")foo"; done
844デフォルトの名無しさん (ワッチョイ 2323-OVaG)
2018/12/22(土) 13:28:39.38ID:t1Sp89dZ0 エロ動画サーフィンで広告サイトが開いてしまったら、
デスクトップのシェルスクリプトにドラッグアンドドロップすることで
そのサイトのIPアドレスをHOSTSファイルに追加する
デスクトップのシェルスクリプトにドラッグアンドドロップすることで
そのサイトのIPアドレスをHOSTSファイルに追加する
845デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/22(土) 13:59:19.13ID:aa5NQG9N0 なんていうことをしていたら、hostsファイルの行数が
数千行になってしまった
数千行になってしまった
846デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 08:08:03.20ID:W0WvAA710 sedだと簡単に動く一文字以上の半角スペースを一文字スペースに置換するコレ
echo "$strings" | sed -E 's/ {1,}/ /g'
bashだとどーしてもうまく動かず次のように[]で囲ってやるとなんとか全連続スペースじゃなく一部
だけが置換できた。
${strings// [ \{1,\}]/ }
それ以上どうしようもなかったので、次のような関数を作った
function Rep2One(){
local str=$1
local chr=$2
while :
do
str="${str//$chr$chr/$chr}"
if [[ ! $str =~ $chr$chr ]]; then
break
fi
done
echo "$str"
}
srings=`Rep2One "$strings" " "`
これで任意の2文字以上の連続を1文字に置換できたが、
sedみたいに一発でかっこよく記述できない?
至る所でbashからsedやgrep起動してたんだが、
bashのなかでできることはbashだけでやった方が大分速いことがわかったんで
なんとかbashの正規表現だけでやりたい
echo "$strings" | sed -E 's/ {1,}/ /g'
bashだとどーしてもうまく動かず次のように[]で囲ってやるとなんとか全連続スペースじゃなく一部
だけが置換できた。
${strings// [ \{1,\}]/ }
それ以上どうしようもなかったので、次のような関数を作った
function Rep2One(){
local str=$1
local chr=$2
while :
do
str="${str//$chr$chr/$chr}"
if [[ ! $str =~ $chr$chr ]]; then
break
fi
done
echo "$str"
}
srings=`Rep2One "$strings" " "`
これで任意の2文字以上の連続を1文字に置換できたが、
sedみたいに一発でかっこよく記述できない?
至る所でbashからsedやgrep起動してたんだが、
bashのなかでできることはbashだけでやった方が大分速いことがわかったんで
なんとかbashの正規表現だけでやりたい
847デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 08:14:34.77ID:yUjQiXy10 なんでそんなに正規表現に拘るのかわからん
#!/bin/sh
while IFS= read -r line; do
echo $line
done
#!/bin/sh
while IFS= read -r line; do
echo $line
done
848デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 12:09:04.04ID:W0WvAA710849デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 12:13:13.41ID:W0WvAA710 結局、bashの正規表現は2文字以上全置換を記述できないんですかね?
bashの正規表現でわからないことがいろいろあるんですよ。
文頭置換したいとき'^'に相当するのはどう書くかとか?
bashの正規表現でわからないことがいろいろあるんですよ。
文頭置換したいとき'^'に相当するのはどう書くかとか?
850デフォルトの名無しさん (ワッチョイ 9b9f-q1e7)
2018/12/23(日) 13:58:44.05ID:nNQ759QC0851デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 14:09:56.35ID:yUjQiXy10 >>848
IFSで指定しろ
IFSで指定しろ
852デフォルトの名無しさん (ワッチョイ 9b9f-q1e7)
2018/12/23(日) 14:18:28.55ID:nNQ759QC0 でもってこれ。bash のパス名展開。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBG
この中に +(pattern-list) というのがある。
なので例えばこんなことも出来る。
a="a b c d" # ← 複数のスペースを適当に入れた文字列を a にセット
b="${a//+( )/ }" # ← 全ての1文字以上のスペースを1文字のスペースに変換して b にセット
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBG
この中に +(pattern-list) というのがある。
なので例えばこんなことも出来る。
a="a b c d" # ← 複数のスペースを適当に入れた文字列を a にセット
b="${a//+( )/ }" # ← 全ての1文字以上のスペースを1文字のスペースに変換して b にセット
853デフォルトの名無しさん (ワッチョイ 3564-Xnhl)
2018/12/23(日) 15:08:28.31ID:eEMSqKaq0854デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 15:10:20.98ID:yUjQiXy10 外部コマンドを呼び出している以上
遅くなることに変わりはない
遅くなることに変わりはない
855デフォルトの名無しさん (ワッチョイ 3564-Xnhl)
2018/12/23(日) 16:10:20.07ID:eEMSqKaq0 「awkやsedを使う方法より」
856デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 16:20:58.12ID:yUjQiXy10 「awkやsedを使う方法より若干高速
と言ったって外部コマンドを呼び出している以上
遅くなることに変わりはない」
と言ったって外部コマンドを呼び出している以上
遅くなることに変わりはない」
857デフォルトの名無しさん (アメ MM59-wUZI)
2018/12/23(日) 16:57:53.53ID:snCJQSVKM awkやsedより遅いの?違うでしょ?日本語勉強しなよ。
858デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 17:02:15.89ID:yUjQiXy10 bashだけでやるより遅いって話をしてる所に
awkやsedよりも早いって言うことに意味がないと言ってる
awkやsedよりも早いって言うことに意味がないと言ってる
859デフォルトの名無しさん (アウアウカー Sa51-qjIk)
2018/12/23(日) 17:12:57.88ID:jos3UrGDa まーた始まったよ(パリポリ
860デフォルトの名無しさん (ワッチョイ 23b3-yIz5)
2018/12/23(日) 17:15:39.87ID:YhyQsVDP0 )ソ)
ッλ ノ(.,ノ)
(゙- ..::.::. . (
(ソ. .彡⌒ミ. )ソ)
).::'; (´・ω・`) ス (
ソ .::;';'(つ ⊂)::;';'`〜、.
( :;';' |__∧_| ::;';' ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
さ あ 禿 げ 上 が っ て ま い り ま し た
ッλ ノ(.,ノ)
(゙- ..::.::. . (
(ソ. .彡⌒ミ. )ソ)
).::'; (´・ω・`) ス (
ソ .::;';'(つ ⊂)::;';'`〜、.
( :;';' |__∧_| ::;';' ヽ)
`'~`'''`'`'`~'~~`~~'`'`''''"`'`'`''`''''"`'``'~`''`'~`'''`'`'`~
さ あ 禿 げ 上 が っ て ま い り ま し た
861デフォルトの名無しさん (ワッチョイ 7d98-5YD5)
2018/12/23(日) 17:15:41.10ID:yUjQiXy10 しーかたないねー(パリポリ
862デフォルトの名無しさん (ワッチョイ 2b92-kOkb)
2018/12/23(日) 17:46:37.96ID:eD9rxy9Z0 あ?やんのかこら
863デフォルトの名無しさん (ワッチョイ cdac-q4pV)
2018/12/23(日) 17:47:26.96ID:GvU/LsqE0 >>857
質問者の意図を汲み取りましょうw
質問者の意図を汲み取りましょうw
864デフォルトの名無しさん (ワッチョイ 4b8a-KS/H)
2018/12/23(日) 20:07:54.91ID:0+7qAFFh0 今時汲み取り式なんて・・・
865デフォルトの名無しさん (ワッチョイ 4b9e-5YD5)
2018/12/23(日) 20:36:12.95ID:W0WvAA710 >>852
ほんと感謝します
ようやくすっきりしました。
そのサイトにも行き着いていたのですが、ちゃんと読めていませんでした
ありがとうございました。
>>853
trコマンドは知ってますし、今回も使いました。
今回の処理は結局、全処理c++で書き直したりもしてるんで、
他のツール使えばできるとかの情報は全く必要なく
あくまでもbash単体で処理するにはどうするかということでここで質問しました
bashでの正規表現に関する情報があまりなくて、
20年ほど前に買ったオライリーのbash本にも正規表現の記載が一切なく
bashの正規表現に制限があるならそれを教えてもらうことも目的でここで聞きました。
ほんと感謝します
ようやくすっきりしました。
そのサイトにも行き着いていたのですが、ちゃんと読めていませんでした
ありがとうございました。
>>853
trコマンドは知ってますし、今回も使いました。
今回の処理は結局、全処理c++で書き直したりもしてるんで、
他のツール使えばできるとかの情報は全く必要なく
あくまでもbash単体で処理するにはどうするかということでここで質問しました
bashでの正規表現に関する情報があまりなくて、
20年ほど前に買ったオライリーのbash本にも正規表現の記載が一切なく
bashの正規表現に制限があるならそれを教えてもらうことも目的でここで聞きました。
866デフォルトの名無しさん (ワッチョイ 9be7-omPw)
2018/12/26(水) 09:38:30.84ID:GigxKnwz0 watchで表示更新時間ごとに変数の加算は出来ませんか?
867デフォルトの名無しさん (ワッチョイ 3598-5YD5)
2018/12/26(水) 11:17:37.79ID:SKc2oSlY0 無理。自分でwatchを実装しろ
868デフォルトの名無しさん (ワッチョイ 3598-5YD5)
2018/12/26(水) 11:19:29.41ID:SKc2oSlY0 訂正 自分でシェルスクリプト版watchを実装しろ
869デフォルトの名無しさん (ワッチョイ c6be-DhLY)
2018/12/30(日) 08:42:00.02ID:btIksil/0 区切り文字を指定して文字列を分割するときに
区切り文字が一種類の場合はcut(1)とかを使うし
区切り文字がBREで表わされるような場合はAWKを使うけど
各フィールド毎に特定の区切り文字があるような時はどうすればいいかな。
今やろうとしていることはISO 8601形式の日付を空白区切りに分解することで
2018-12-30T08:36:50+09:00
↑こういう文字列を
2018 12 30 08 36 50 + 09 00
↑こういう空白区切りに分解したい。
その為には「第1,2,3フィールドはハイフン,第4フィールドは文字T,第5,6,7フィールドはコロンで分割する」
っていう具合の処理を考えないといけない。
正直,sedを使えばいいんだけど,もうちょっとスマートな方法があれば教えてほしい……。
sedだと↓
sed -n -e 's/\([[:digit:]]\{4\}\)-\([[:digit:]]\{2\}\)-\([[:digit:]]\{2\}\)T\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)\([+-]\)\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)/D:\1\2\3\4\5\6\7\8'"'"'\9/1p'
↑こんなことになるw
区切り文字が一種類の場合はcut(1)とかを使うし
区切り文字がBREで表わされるような場合はAWKを使うけど
各フィールド毎に特定の区切り文字があるような時はどうすればいいかな。
今やろうとしていることはISO 8601形式の日付を空白区切りに分解することで
2018-12-30T08:36:50+09:00
↑こういう文字列を
2018 12 30 08 36 50 + 09 00
↑こういう空白区切りに分解したい。
その為には「第1,2,3フィールドはハイフン,第4フィールドは文字T,第5,6,7フィールドはコロンで分割する」
っていう具合の処理を考えないといけない。
正直,sedを使えばいいんだけど,もうちょっとスマートな方法があれば教えてほしい……。
sedだと↓
sed -n -e 's/\([[:digit:]]\{4\}\)-\([[:digit:]]\{2\}\)-\([[:digit:]]\{2\}\)T\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)\([+-]\)\([[:digit:]]\{2\}\):\([[:digit:]]\{2\}\)/D:\1\2\3\4\5\6\7\8'"'"'\9/1p'
↑こんなことになるw
870デフォルトの名無しさん (ワッチョイ 5523-ewg4)
2018/12/30(日) 10:20:55.12ID:Ob5186rT0871デフォルトの名無しさん (ワッチョイ 5523-ewg4)
2018/12/30(日) 10:23:20.84ID:Ob5186rT0 >>870
書き込んでから気づいたがこれだと+の周りが処理できないな
書き込んでから気づいたがこれだと+の周りが処理できないな
872デフォルトの名無しさん (ワッチョイ c6be-DhLY)
2018/12/30(日) 10:40:37.85ID:btIksil/0873デフォルトの名無しさん (ワッチョイ 1aa2-Iy/R)
2018/12/30(日) 10:53:56.67ID:MMB+AHvh0 sed 's/+/ + /;s/[-:T]/ /g'
では??
では??
874デフォルトの名無しさん (ワッチョイ 7598-4fyn)
2018/12/30(日) 11:01:57.94ID:/wKH6dhf0875デフォルトの名無しさん (ワッチョイ 1aa2-Iy/R)
2018/12/30(日) 11:08:31.89ID:MMB+AHvh0 タイムゾーンはマイナスありか
876デフォルトの名無しさん (ワッチョイ 1aa2-Iy/R)
2018/12/30(日) 11:25:42.74ID:MMB+AHvh0 sed 's/-/ /;s/-/ /;s/\([+-]\)/ \1 /;s/[:T]/ /g'
なんか泥臭いけど
なんか泥臭いけど
877デフォルトの名無しさん (ワッチョイ 7598-4fyn)
2018/12/30(日) 11:28:51.37ID:/wKH6dhf0 #!/bin/sh
t="2018-12-30T08:36:50+09:00"
IFS="-T:+"
set -- $t
case ${t%?????} in
*+) echo $1 $2 $3 $4 $5 $6 + $7 $8 ;;
*-) echo $1 $2 $3 $4 $5 $6 - $7 $8 ;;
esac
t="2018-12-30T08:36:50+09:00"
IFS="-T:+"
set -- $t
case ${t%?????} in
*+) echo $1 $2 $3 $4 $5 $6 + $7 $8 ;;
*-) echo $1 $2 $3 $4 $5 $6 - $7 $8 ;;
esac
878デフォルトの名無しさん (ワッチョイ 7598-4fyn)
2018/12/30(日) 11:32:49.36ID:/wKH6dhf0 date -d "2018-12-30T08:36:50-09:00" "+%Y 略" (飽きた)
879デフォルトの名無しさん (ワッチョイ c628-DhLY)
2018/12/30(日) 11:48:16.88ID:btIksil/0 >>874
それだとアメリカとかのタイムゾーン-03:00に対応できなくね?
それだとアメリカとかのタイムゾーン-03:00に対応できなくね?
881デフォルトの名無しさん (ワッチョイ da01-XpDg)
2018/12/30(日) 16:00:37.71ID:yEx+bcWd0 GNU grep の場合
$ echo '2018-12-30T08:36:50+09:00' | grep -Po '([0-9]{2,4}|(?<=:[0-9]{2})(\+|-))' | xargs
$ echo '2018-12-30T08:36:50+09:00' | grep -Po '([0-9]{2,4}|(?<=:[0-9]{2})(\+|-))' | xargs
882デフォルトの名無しさん (ワッチョイ c628-DhLY)
2018/12/30(日) 16:49:11.50ID:btIksil/0883デフォルトの名無しさん (ワッチョイ 7d14-4fyn)
2018/12/30(日) 18:51:33.10ID:iF2NHAVN0 t="2018-12-30T08:36:50+09:00"
echo "${t:0:4} ${t:5:2} ${t:8:2} ${t:11:2} ${t:14:2} ${t:17:2} ${t:19:1} ${t:20:2} ${t:23:2}"
echo "${t:0:4} ${t:5:2} ${t:8:2} ${t:11:2} ${t:14:2} ${t:17:2} ${t:19:1} ${t:20:2} ${t:23:2}"
884デフォルトの名無しさん (ワッチョイ 6995-/SJz)
2019/01/01(火) 13:16:40.82ID:0CXB5czV0 :digit:より0-9のほうが打件数少ないのはなんなんだ
885デフォルトの名無しさん (アウアウカー Sa4d-uI7W)
2019/01/01(火) 13:57:25.01ID:WRhsD0vEa 単に意味を優先した表現方法があるだけやろ
886デフォルトの名無しさん (ワッチョイ 2b28-DsDM)
2019/01/05(土) 11:12:13.83ID:dE0KuiGH0 本当に一部のシステムでの話だけど
[:digit:]がロケールの数値表現にも合致する場合がある
「1」とか。
[:digit:]がロケールの数値表現にも合致する場合がある
「1」とか。
887デフォルトの名無しさん (アウアウエー Sae3-hlMv)
2019/01/07(月) 14:59:50.50ID:01rSRjtda test.txtの内容が
hoge
fuga
puge
で、
sed -i -e s/hoge\n// test.txt
とやったのに『hoge(改行コード)』が消えてくれないたすけて
test.txtの一行目を削除 → 2行目が一行目に、
みたいにトコロテンしたい
hoge
fuga
puge
で、
sed -i -e s/hoge\n// test.txt
とやったのに『hoge(改行コード)』が消えてくれないたすけて
test.txtの一行目を削除 → 2行目が一行目に、
みたいにトコロテンしたい
888デフォルトの名無しさん (アウアウエー Sae3-hlMv)
2019/01/07(月) 15:08:57.37ID:01rSRjtda 自己解決・・・
sed -i -e ':a;N;$!ba;s/hoge\n//' test.txt
ってやったらできました・・何この呪文。。
sed -i -e ':a;N;$!ba;s/hoge\n//' test.txt
ってやったらできました・・何この呪文。。
889デフォルトの名無しさん (ワッチョイ 1301-7MGl)
2019/01/07(月) 15:30:19.88ID:RynyI9pj0 sed -i -e '/hoge/d' test.txt じゃダメなん?
890デフォルトの名無しさん (アウアウエー Sae3-hlMv)
2019/01/07(月) 15:36:38.32ID:01rSRjtda891デフォルトの名無しさん (アウアウウー Sa9d-KJeM)
2019/01/07(月) 19:03:53.04ID:fnTlHl64a grep -v もよろしく
892デフォルトの名無しさん (アウアウカー Sa55-lCiY)
2019/01/07(月) 19:52:44.45ID:fRqqYmWxa 一行目を消したいのかhogeを消したいのか
893デフォルトの名無しさん (ワッチョイ 8b14-RM76)
2019/01/07(月) 19:54:56.69ID:52D4hsE60 全部消したい。何もかも
894デフォルトの名無しさん (ワッチョイ 0bda-KUhf)
2019/01/07(月) 20:31:04.88ID:Opohu4pM0 要らない
何も
消してしまおう
何も
消してしまおう
895デフォルトの名無しさん (アウアウウー Sa9d-KJeM)
2019/01/08(火) 09:33:22.38ID:LJT6VvGba そんなあなたに rm
896デフォルトの名無しさん (ワッチョイ 4d00-XG35)
2019/01/10(木) 04:57:31.17ID:yVo/NDAD0 ネットワーク通信(特にhttpクライアント)に関するコマンドって
大きくwgetとcurlとfetchなんかがあるけどもみんなはなに使ってます?
大抵のLinuxにはwgetが、MacとWindowsにはcurlが初期搭載されてるので
そのどっちかだとは思う。
大きくwgetとcurlとfetchなんかがあるけどもみんなはなに使ってます?
大抵のLinuxにはwgetが、MacとWindowsにはcurlが初期搭載されてるので
そのどっちかだとは思う。
897デフォルトの名無しさん (ワッチョイ d663-aYY/)
2019/01/10(木) 09:31:04.31ID:d7ZwxpvN0 スクリプトの場合はオプションが面倒くさくいのは関係ないから
個人的には自由度の高いcurl一択かな
直接コマンド打ってダウンロードするときはaria2cを使ったりする
個人的には自由度の高いcurl一択かな
直接コマンド打ってダウンロードするときはaria2cを使ったりする
898デフォルトの名無しさん (アウアウウー Sa89-JzEj)
2019/01/10(木) 10:00:22.11ID:jQehovm3a 昔から使ったていたというだけの理由で wget
899デフォルトの名無しさん (ワッチョイ 4d14-Fjw0)
2019/01/10(木) 11:40:29.86ID:DS8wsvUQ0 wgetが入っていればwget、curlが入っていればcurl
両方入っているなら、ファイルにしたいときはwget、出力結果を見たいときはcurl
両方入っているなら、ファイルにしたいときはwget、出力結果を見たいときはcurl
900デフォルトの名無しさん (ワッチョイ d62c-NvUN)
2019/01/10(木) 16:56:41.32ID:jhx89QXs0 PowerShell では、Invoke-WebRequest のalias が、curl, wget
get-alias (gal) で表示できる
get-alias (gal) で表示できる
901デフォルトの名無しさん (ワッチョイ 4d00-XG35)
2019/01/10(木) 18:31:34.76ID:yVo/NDAD0 >>900
え、それつまり
$ curl ...
としたときのオプションは実はcurlのじゃなくて
Invoke-WebRequestに向けたオプションってこと?
そんなに互換性があるオプション体系だとは思わないのだけど
なぜエイリアスにしてあるんだろう……。
え、それつまり
$ curl ...
としたときのオプションは実はcurlのじゃなくて
Invoke-WebRequestに向けたオプションってこと?
そんなに互換性があるオプション体系だとは思わないのだけど
なぜエイリアスにしてあるんだろう……。
902デフォルトの名無しさん (ブーイモ MM71-peLi)
2019/01/10(木) 20:31:11.75ID:UUY7OixDM 呼ばれたときの名前によって処理を切り替えてるんじゃないの?知らんけど
903デフォルトの名無しさん (ブーイモ MMbe-jcBd)
2019/01/10(木) 22:34:40.34ID:qJAnpZ0RM cURL以外使わん
904デフォルトの名無しさん (ワッチョイ 4d00-XG35)
2019/01/11(金) 03:35:07.12ID:tAdCcMWb0 bashで「=」という文字をコマンドにすることってできますかね。
「=」を「bc -l <<<」に割り当てて
$ = '4 / 5.1'
みたいな簡易電卓として使いたいなと思ったんだけど
alias =='bc -l <<<'やfunction = { bc -l <<< "$1" }はダメ……。
一応GNU Bashの「コマンドに使っていい文字」ではあるんだけど、使えない
「=」を「bc -l <<<」に割り当てて
$ = '4 / 5.1'
みたいな簡易電卓として使いたいなと思ったんだけど
alias =='bc -l <<<'やfunction = { bc -l <<< "$1" }はダメ……。
一応GNU Bashの「コマンドに使っていい文字」ではあるんだけど、使えない
905デフォルトの名無しさん (ワッチョイ d614-Fjw0)
2019/01/11(金) 05:36:31.36ID:YPYEBq870 =というファイル名のシェルスクリプト書いたら?
bashもいらんし
#!/bin/sh
echo "$@" | bc -l
bashもいらんし
#!/bin/sh
echo "$@" | bc -l
906デフォルトの名無しさん (ワッチョイ 7a01-mNGr)
2019/01/11(金) 08:51:55.60ID:EZ88NWNa0 function = { bc -l <<< "$1"; } ってすればできる(セミコロンが必要)
907デフォルトの名無しさん (ワッチョイ 4d00-XG35)
2019/01/14(月) 22:03:31.41ID:s6eFaywu0 >>906
ありがとう。
ありがとう。
908デフォルトの名無しさん (ワッチョイ 3a59-mTdx)
2019/01/15(火) 01:10:29.39ID:ejrN1XYw0 シェルスクリプトの練習になるオススメサイトありますか?
909デフォルトの名無しさん (ワッチョイ c5da-WdGq)
2019/01/15(火) 04:03:33.32ID:XDACXjEE0 水泳の練習になるオススメサイトありますか?
そう聞かれたらなんて答える?
そう聞かれたらなんて答える?
910デフォルトの名無しさん (ワッチョイ 192c-1nak)
2019/01/15(火) 07:25:22.93ID:MVbWnd0w0 いけずな野郎だな
お題があってそれを解くっていうのを練習と呼ぶなら
paizaあたりがシェルスクリプトも受け付けてたかも
お題があってそれを解くっていうのを練習と呼ぶなら
paizaあたりがシェルスクリプトも受け付けてたかも
911デフォルトの名無しさん (ワッチョイ ce7d-x442)
2019/01/15(火) 07:38:45.50ID:1yCDbXwJ0 自分の作りたいもん作れよ、それ以上効率の良い学習方法はない
912デフォルトの名無しさん (ワッチョイ e59f-cnp4)
2019/01/15(火) 07:52:39.97ID:omEovS4H0 作りたいもの作れる環境がいい
913デフォルトの名無しさん (ワッチョイ 3a59-mTdx)
2019/01/15(火) 09:04:11.62ID:ejrN1XYw0 どうもありがとうございます!
914デフォルトの名無しさん (ガックシ 06ee-XG35)
2019/01/15(火) 18:52:38.58ID:TWtv3hHM6 今からシェルスクリプトに手を出すんならPOSIX 2017の規格文書とかが
なんと無償で公開されてるので非常にやりやすいと思うよ。
GNUの日本語訳されたマニュアルでもいいし、少なくともドキュメントとしては
今は過去一番に恵まれた時代だと感じている。
なんと無償で公開されてるので非常にやりやすいと思うよ。
GNUの日本語訳されたマニュアルでもいいし、少なくともドキュメントとしては
今は過去一番に恵まれた時代だと感じている。
915デフォルトの名無しさん (ワッチョイ ce02-H432)
2019/01/16(水) 17:58:43.79ID:ECRqnYoc0 一応この板にもお題スレあるけどね。
この頃過疎ってるかな。
この頃過疎ってるかな。
916デフォルトの名無しさん (ガックシ 068b-b/bA)
2019/01/18(金) 08:45:17.67ID:XZjr/At96 シェルっていうかAWKのことなんですけど
今の時代に「AWKを256倍使うための本」って読んでためになりますか。
それこそFORTRAN66向けの解説書は最低でもFortran 90/95あたりを使う現在では
ほとんど役に立ちませんよね。
ですがAWKは昔からほとんど仕様が変わっていないので、
古い書籍でも役立ちそうではあります。
今の時代に「AWKを256倍使うための本」って読んでためになりますか。
それこそFORTRAN66向けの解説書は最低でもFortran 90/95あたりを使う現在では
ほとんど役に立ちませんよね。
ですがAWKは昔からほとんど仕様が変わっていないので、
古い書籍でも役立ちそうではあります。
917デフォルトの名無しさん (アウアウカー Sa6d-Z26H)
2019/01/18(金) 09:04:38.86ID:vsGuf730a その本は知らんがawkは使える
918デフォルトの名無しさん (ワッチョイ 51da-qlUm)
2019/01/18(金) 12:00:20.35ID:hbAtvXtm0919デフォルトの名無しさん (ワッチョイ 71ec-q8VV)
2019/01/19(土) 01:03:50.64ID:0IErEZcU0 gawk(4以降)を使わないなら昔のawk本で勉強してもいいと思う。
920デフォルトの名無しさん (ワッチョイ 51da-qlUm)
2019/01/19(土) 02:01:46.56ID:fE346DRA0 256本って、役に立つことも書いてあるネタ本だろう?
勉強ってw
勉強ってw
921デフォルトの名無しさん (ワッチョイ 2100-b/bA)
2019/01/19(土) 07:54:11.84ID:AOD6Gi8l0 「256倍」のAWKって,POSIX awkともちょっと違うんだよねw
だからあんまり真に受けないほうがいい
だからあんまり真に受けないほうがいい
922デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
2019/01/19(土) 20:03:41.30ID:AuMD8hxP0 真にうけるの意味を知らんバカ、笑う
923デフォルトの名無しさん (ワッチョイ 1b2a-E9W7)
2019/01/19(土) 23:00:56.72ID:Kq2NO2td0924デフォルトの名無しさん (ワッチョイ 1301-HxQ/)
2019/01/19(土) 23:07:49.10ID:+IqL7b8U0925デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
2019/01/19(土) 23:50:22.30ID:AuMD8hxP0 言いがかりの意味を知らんバカ、ガチ
926デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
2019/01/19(土) 23:51:10.14ID:AuMD8hxP0 てかバカてなんでシェルだとどおにかなると思っとるん?
927デフォルトの名無しさん (ワッチョイ 51da-qlUm)
2019/01/20(日) 02:31:28.62ID:2YimV45u0 ↑意味不明なことを言い出し始めたぞ?
928デフォルトの名無しさん (ワッチョイ 1301-HxQ/)
2019/01/20(日) 06:00:57.22ID:mVpLWWyp0 5ch とかで○○の意味ガーとか言う奴はアスペか基地外だから放置しとけ
929デフォルトの名無しさん (アウアウカー Sa6d-Z26H)
2019/01/20(日) 09:22:33.90ID:yjbEV8Owa ようやく俺と同じ意見の奴を5chで見つけた
930デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
2019/01/20(日) 18:32:53.82ID:wKV5+GB/0 バカ戸惑っとるやんw
931デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
2019/01/20(日) 19:44:46.86ID:wKV5+GB/0 シェルは簡単やけどシェルがおまえバカのを補える訳とちゃうでw
932デフォルトの名無しさん (ワッチョイ 9359-BGq7)
2019/01/20(日) 21:42:45.99ID:EDhkDxLO0 シェルスクリプト程難しいプログラミング言語も珍しい
933デフォルトの名無しさん (ワッチョイ 09c5-VA2m)
2019/01/20(日) 22:05:16.75ID:wKV5+GB/0 いまだにシェルのことシェルスクリプトと言い張るバカおるんやなw
934デフォルトの名無しさん (ワッチョイ 9b02-7XZ4)
2019/01/21(月) 09:59:58.31ID:+0V9hUvv0 シェルスクリプトと言うからおかしくなるんであって
バッチプログラムと言った方が良くない?
スクリプトと言うほど大袈裟でもないんだけどね
バッチプログラムと言った方が良くない?
スクリプトと言うほど大袈裟でもないんだけどね
935デフォルトの名無しさん (ブーイモ MMeb-YJMU)
2019/01/21(月) 10:16:19.43ID:J1WbOjYrM scriptが台本のことだと知っていれば、シェルスクリプトこそ正当なスクリプトだろ。
そのあとperlスクリプトとか呼ばれてあの手の言語がスクリプト言語に分類され、
ただのインタプリタ系プログラムまでスクリプトに含められてしまった。
そのあとperlスクリプトとか呼ばれてあの手の言語がスクリプト言語に分類され、
ただのインタプリタ系プログラムまでスクリプトに含められてしまった。
936デフォルトの名無しさん (ワッチョイ 2100-b/bA)
2019/01/21(月) 10:51:13.07ID:uncS2Ppy0 >>935
そんなこと言ったら「プログラム」もおかしいよね
プログラムは式次第って意味だから「関数型プログラミング言語」なんて意味が通らない
式次第って意味と乖離が少なかったのはそれこそFORTRANとかだよね。
……って良い出したらキリがないから、別に「Pyhtonスクリプト」と呼んでもいいんじゃね?
そんなこと言ったら「プログラム」もおかしいよね
プログラムは式次第って意味だから「関数型プログラミング言語」なんて意味が通らない
式次第って意味と乖離が少なかったのはそれこそFORTRANとかだよね。
……って良い出したらキリがないから、別に「Pyhtonスクリプト」と呼んでもいいんじゃね?
937デフォルトの名無しさん (ブーイモ MMeb-YJMU)
2019/01/21(月) 10:54:29.54ID:J1WbOjYrM そうだね
938デフォルトの名無しさん (ワッチョイ 6bda-juPH)
2019/01/21(月) 11:39:25.83ID:kN5K6Fst0 script kitty
https://i.imgur.com/oMseW2P_d.jpg
https://i.imgur.com/oMseW2P_d.jpg
939デフォルトの名無しさん (ワッチョイ 5114-G1wx)
2019/01/21(月) 12:26:30.35ID:DqxQvGU+0940デフォルトの名無しさん (ワッチョイ 2100-b/bA)
2019/01/21(月) 12:40:07.37ID:uncS2Ppy0 その実行計画を「式次第」って言うんじゃね?
運動会ではあまり使われないけど
卒業式のプログラムは「式次第」って呼ばれるじゃん。
運動会ではあまり使われないけど
卒業式のプログラムは「式次第」って呼ばれるじゃん。
941デフォルトの名無しさん (ワッチョイ 2100-b/bA)
2019/01/21(月) 12:41:28.01ID:uncS2Ppy0 移植可能なMakefileについての覚書
The Open Groupによると
The best way to provide portable makefiles is to include all of the rules needed in the makefile itself.
The rules provided use only features provided by other parts of this volume of POSIX.1-2017.
The default rules include rules for optional commands in this volume of POSIX.1-2017.
Only rules pertaining to commands that are provided are needed in an implementation's default set.
The Open Groupによると
The best way to provide portable makefiles is to include all of the rules needed in the makefile itself.
The rules provided use only features provided by other parts of this volume of POSIX.1-2017.
The default rules include rules for optional commands in this volume of POSIX.1-2017.
Only rules pertaining to commands that are provided are needed in an implementation's default set.
942デフォルトの名無しさん (ワッチョイ 5114-G1wx)
2019/01/21(月) 13:20:33.70ID:DqxQvGU+0 実行計画のうち特に式典に用いられるのが式次第だろ
式じゃないんだから、単に実行計画で良い
式じゃないんだから、単に実行計画で良い
943デフォルトの名無しさん (アウアウカー Sa6d-Z26H)
2019/01/21(月) 13:27:38.12ID:kW4uGJLza 知ってんだよォォ
国語の教師かオメーはよォォ
国語の教師かオメーはよォォ
944デフォルトの名無しさん (アウアウウー Sa15-4KIe)
2019/01/21(月) 13:40:03.75ID:chW+Guj1a >>938
(*´Д`)ハァハァ
(*´Д`)ハァハァ
945デフォルトの名無しさん (ブーイモ MM45-xMJY)
2019/01/21(月) 21:36:42.73ID:Z7YPhckpM946デフォルトの名無しさん (アウアウウー Sa15-4KIe)
2019/01/22(火) 09:17:01.15ID:J1mDHp9Ya にゃ
947デフォルトの名無しさん (オッペケ Sr1d-XQuA)
2019/01/22(火) 10:55:23.70ID:L0BlvLx7r 国語の時間はここまでっ!
948デフォルトの名無しさん (オッペケ Sr1d-+JtR)
2019/01/22(火) 12:18:47.44ID:aO6rlwOPr よーし!今から保健体育の時間な!
949デフォルトの名無しさん (アウアウウー Sa15-4KIe)
2019/01/22(火) 12:32:24.54ID:J1mDHp9Ya 猫のスレができたと聞いて
950デフォルトの名無しさん (ワッチョイ 3e28-iVxn)
2019/01/26(土) 17:13:20.64ID:VBVSKLLT0 ほかにも動物の名前のコマンドあるかな。
人の名前はあるけど(man)。
人の名前はあるけど(man)。
951デフォルトの名無しさん (ワッチョイ 2e63-a54J)
2019/01/26(土) 17:35:41.04ID:t83jnK1u0 fox(狐)はないか
952デフォルトの名無しさん (ワッチョイ 2e63-a54J)
2019/01/26(土) 17:37:42.47ID:t83jnK1u0 錦蛇(python)は入れればあるね。
953デフォルトの名無しさん (ワッチョイ 4280-tGo4)
2019/01/26(土) 21:12:00.09ID:dNFr7KCg0 fishとか
954デフォルトの名無しさん (ワッチョイ 3e28-MosH)
2019/01/26(土) 21:46:39.00ID:VBVSKLLT0 fish言おうと思っとったのに
955デフォルトの名無しさん (ワッチョイ 3dc5-hALj)
2019/01/26(土) 21:48:04.51ID:uSJt/X2/0 俺の方が先にfish言おうとしたんやけどね
956デフォルトの名無しさん (アウアウカー Sa69-lamD)
2019/01/26(土) 21:53:01.10ID:nfFeNMjGa 俺が言おうとしたのに
957デフォルトの名無しさん (ワッチョイ 3dc5-hALj)
2019/01/26(土) 22:09:06.41ID:uSJt/X2/0 fish知名度高すぎやろwwww
958デフォルトの名無しさん (ワッチョイ 4201-hALj)
2019/01/26(土) 22:11:42.15ID:Ze1S3jEe0 fish って聞くと x68k の fish の方を連想してしまう
959デフォルトの名無しさん (ワッチョイ 3dc5-hALj)
2019/01/26(土) 22:38:03.41ID:uSJt/X2/0 なんやその受け身の人生アピールw
960デフォルトの名無しさん (ワッチョイ 454e-fsN/)
2019/01/27(日) 01:38:33.38ID:z0hosMYm0 fish、イタリア語でPesciペッシ。
ジョジョで覚えたぞ!
ジョジョで覚えたぞ!
961デフォルトの名無しさん (ワッチョイ 3e28-MosH)
2019/01/27(日) 08:33:27.63ID:Erhv9FPi0 namazuはどう?
962デフォルトの名無しさん (ワッチョイ fd7f-qama)
2019/01/27(日) 09:14:26.94ID:RsUGZloC0 なんでcatが出てこんのや
963デフォルトの名無しさん (ワッチョイ 4201-e+IY)
2019/01/27(日) 09:16:57.86ID:rwuNPA7J0 950に[ほかにも]とあるから猫は既出でしょ
964デフォルトの名無しさん (ワッチョイ 4900-MosH)
2019/01/27(日) 17:29:49.17ID:xlSzZYyn0 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_23
ここのNoteに「〈記号〉=〈値〉の形の構文の挙動は未定義である。Kornシェル用いられている」
とあるのですが実際にKornシェルで↑この形の構文はどういう意味なのでしょうか。
ここのNoteに「〈記号〉=〈値〉の形の構文の挙動は未定義である。Kornシェル用いられている」
とあるのですが実際にKornシェルで↑この形の構文はどういう意味なのでしょうか。
965デフォルトの名無しさん (ワッチョイ 415d-FWM4)
2019/01/28(月) 23:54:39.66ID:WFNfoV5R0 あげ
966デフォルトの名無しさん (ワッチョイ 415d-FWM4)
2019/01/28(月) 23:55:04.01ID:WFNfoV5R0 シェルでコマンドの出力結果を(lsなど)データベースに入れたいのですが
どのようにすればいいかわかりますか?
できればその時のIpアドレスも一緒にいれればいいのですが
普通にテキストに入れるには
できないのでしょうか
ディレクトリも入れれば最高です
dbはsqlite3でフィールドはディレクトリ内容とディレクトリの2フィールドにいれたいのです
どのようにすればいいかわかりますか?
できればその時のIpアドレスも一緒にいれればいいのですが
普通にテキストに入れるには
できないのでしょうか
ディレクトリも入れれば最高です
dbはsqlite3でフィールドはディレクトリ内容とディレクトリの2フィールドにいれたいのです
967デフォルトの名無しさん (ブーイモ MM62-f+Eb)
2019/01/29(火) 00:14:25.22ID:1q8BEqfoM >>966
シェルスクリプト以前に、手では操作できるのかね?
シェルスクリプト以前に、手では操作できるのかね?
968デフォルトの名無しさん (ワッチョイ 2e14-wD8z)
2019/01/29(火) 00:19:36.77ID:D6lmimQR0 最近くだらん質問しかでなくなったな
969デフォルトの名無しさん (ワッチョイ 2e2c-/4Fh)
2019/01/29(火) 00:58:08.58ID:AnpnZGSz0 sqlite3 をコマンドとして使えるのか?
使えるのなら、そういうコマンドのオプションはあるのか?
sqlite3の説明を読めば?
基本的には、単純な空白区切り、CSV, JSON などでも、DB に入れられるはず
a,b
c,d
こういうCSV, TSV でも、DBに入る
使えるのなら、そういうコマンドのオプションはあるのか?
sqlite3の説明を読めば?
基本的には、単純な空白区切り、CSV, JSON などでも、DB に入れられるはず
a,b
c,d
こういうCSV, TSV でも、DBに入る
970デフォルトの名無しさん (ワッチョイ 0666-CD7Z)
2019/01/29(火) 01:08:07.84ID:Le31BKQs0 くだらん質問に応える暇はないってか
971デフォルトの名無しさん (アウアウカー Sa69-lamD)
2019/01/29(火) 01:25:19.75ID:RjCLdVoba 暇はあるがやる気はない
972デフォルトの名無しさん (ワッチョイ 4602-wD8z)
2019/01/29(火) 02:49:31.61ID:PUnzDqON0 >>966
CSVにすればこうやって読み込める。
https://qiita.com/j-shimo/items/83febe1992321ba558e4
まあでも Perl とかで DB 接続のモジュール使ってやっちゃった方が簡単な感じがしないでもないが、
簡単と感じるかどうかは主観的な問題。
CSVにすればこうやって読み込める。
https://qiita.com/j-shimo/items/83febe1992321ba558e4
まあでも Perl とかで DB 接続のモジュール使ってやっちゃった方が簡単な感じがしないでもないが、
簡単と感じるかどうかは主観的な問題。
973デフォルトの名無しさん (ワッチョイ 2e2c-/4Fh)
2019/01/29(火) 03:33:43.84ID:AnpnZGSz0 JSON なら、jq コマンドもある
そりゃ、Ruby などのプログラミング言語を使えば出来るけど、
コマンドだけで、もっと簡単にやりたいのでしょ?
そりゃ、Ruby などのプログラミング言語を使えば出来るけど、
コマンドだけで、もっと簡単にやりたいのでしょ?
974デフォルトの名無しさん (ワッチョイ 2e2c-/4Fh)
2019/01/29(火) 05:00:03.49ID:AnpnZGSz0975デフォルトの名無しさん (ワッチョイ 4900-MosH)
2019/01/29(火) 23:36:53.59ID:sGXg/LAN0 シェル(スクリプト)っていうかシステムの話なんですが
FLOSSまたは無償で使えるOSで kshがデフォルトのログインシェルになってるものってありますか
AIXとかはそうっぽいのですが 買えません。
FLOSSまたは無償で使えるOSで kshがデフォルトのログインシェルになってるものってありますか
AIXとかはそうっぽいのですが 買えません。
976デフォルトの名無しさん (ワッチョイ eddd-CD7Z)
2019/01/30(水) 03:34:17.22ID:zjoDoxp+0 OpenBSD、Solaris。Solarisはらしい
977デフォルトの名無しさん (アメ MM6d-fsN/)
2019/01/30(水) 09:12:24.71ID:y3itOE16M ソイレントシステム
978デフォルトの名無しさん (ワッチョイ 4900-MosH)
2019/01/30(水) 21:50:49.39ID:yhwdEVRM0979デフォルトの名無しさん (ワッチョイ ff28-/DTb)
2019/02/04(月) 09:19:35.31ID:eH/He5cH0 読むと常にEOFを返すようなファイル(つまり/dev/nullとか)を
あえて「実行」した場合の挙動ってPOSIXやXPGで規定されてるっけ。
知ってる人いたら教えてほしい。
多分大抵の処理系でEACCESが返されて終了,という挙動をすると思うんだけど
怪しい……。
あえて「実行」した場合の挙動ってPOSIXやXPGで規定されてるっけ。
知ってる人いたら教えてほしい。
多分大抵の処理系でEACCESが返されて終了,という挙動をすると思うんだけど
怪しい……。
980デフォルトの名無しさん (ワッチョイ 5fdd-FVje)
2019/02/04(月) 09:47:05.71ID:lgZw4Iho0 単なるEmpty Fileと、Executableでないファイルを無理やりと混ぜてなくない?
EACCESは後者だろう、中身に(読むと常にEOFを返す)関係なく。普通にそうならないの?
EACCESは後者だろう、中身に(読むと常にEOFを返す)関係なく。普通にそうならないの?
981デフォルトの名無しさん (ワッチョイ 5fdd-FVje)
2019/02/04(月) 10:07:13.75ID:lgZw4Iho0982デフォルトの名無しさん (ワッチョイ ff28-/DTb)
2019/02/04(月) 11:51:25.97ID:eH/He5cH0 >>981
ありがとう。
「実行可能形式」でないものを実行した場合はシェルスクリプトとして起動されるんだね。
そして俺はマヌケな勘違いをしていたwもっと後の方の処理…つーか違う段階だった。
http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html#tag_16_111_05
たとえば「ディレクトリ」や「(/dev/nullのような)正常でないファイル」が
exec函数によって「実行」されるとEACCESが返って失敗するという訳か。
お騒がせしてすまん。
ありがとう。
「実行可能形式」でないものを実行した場合はシェルスクリプトとして起動されるんだね。
そして俺はマヌケな勘違いをしていたwもっと後の方の処理…つーか違う段階だった。
http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html#tag_16_111_05
たとえば「ディレクトリ」や「(/dev/nullのような)正常でないファイル」が
exec函数によって「実行」されるとEACCESが返って失敗するという訳か。
お騒がせしてすまん。
983デフォルトの名無しさん (ワッチョイ df01-jOWJ)
2019/02/05(火) 21:50:08.24ID:Ogivq0W50 初心者ながら普段のルーチンをshellscriptで解消したく
ソースコードを書いています。
一つつまづいてるので質問させてください。
catコマンドで特定のtxtファイル(シンボリックで作成したエイリアス)を
読み込むのですがNo such file or directoryと出力されます。
terminal上で同じコマンドを実行するとシンボリックリンク先の
txtファイルを読み込み、きちんと動作します。
何か考えられるミスはありますでしょうか?
ソースコードを書いています。
一つつまづいてるので質問させてください。
catコマンドで特定のtxtファイル(シンボリックで作成したエイリアス)を
読み込むのですがNo such file or directoryと出力されます。
terminal上で同じコマンドを実行するとシンボリックリンク先の
txtファイルを読み込み、きちんと動作します。
何か考えられるミスはありますでしょうか?
984デフォルトの名無しさん (ワッチョイ ff8c-ZhXv)
2019/02/05(火) 22:40:30.10ID:DqsJMgF70 >>983
readlinkで調べてみたら
readlinkで調べてみたら
985デフォルトの名無しさん (JP 0Hd3-0+i/)
2019/02/05(火) 22:46:53.04ID:+nC5PPR6H catの前にpwdとかls -lとかls -lLとか調べることはいっぱいある
986デフォルトの名無しさん (ワッチョイ ff61-2N0f)
2019/02/06(水) 01:03:14.11ID:RxnZVCFR0 取り敢えずsh -xで確認してみれば
987デフォルトの名無しさん (ワッチョイ df00-/DTb)
2019/02/06(水) 04:34:28.97ID:FgEjt1k50 >>983
うーん。初心者という言葉をそのまま受け取るなら
フルパス・もしくはそのスクリプトからきちんと認識できる位置の相対パス
で指定してる?
ターミナルの上で
$ cd /tmp
として/tmpディレクトリに移動してからそのコマンドを打ってみるとどうなる?
もう一つは「No such file or directory」がcatの出力でない可能性
ファイル自身をコマンドとして認識される位置に持ってきてない?
うーん。初心者という言葉をそのまま受け取るなら
フルパス・もしくはそのスクリプトからきちんと認識できる位置の相対パス
で指定してる?
ターミナルの上で
$ cd /tmp
として/tmpディレクトリに移動してからそのコマンドを打ってみるとどうなる?
もう一つは「No such file or directory」がcatの出力でない可能性
ファイル自身をコマンドとして認識される位置に持ってきてない?
988デフォルトの名無しさん (アウアウウー Saa3-d53M)
2019/02/06(水) 15:26:28.18ID:Zn5BTEOaa >>983
cat の打ち間違えやスペースが全角。
ファイル名の文字コード間違い。全角半角だけでなく見た目が同じだがキリル文字の方を使ってるみたいな間違い。
Unicode特有の問題で日本語の平仮名の濁点や半濁点の文字が2文字になっているというのもあるかも知れない。これはよくMacOSとWindows間のファイルをやり取りすると起こる。
画面上は全く同じに見えるファイルが同じディレクトリに2つ並んだりする。しかし文字コードを調べると違っている。
cat の打ち間違えやスペースが全角。
ファイル名の文字コード間違い。全角半角だけでなく見た目が同じだがキリル文字の方を使ってるみたいな間違い。
Unicode特有の問題で日本語の平仮名の濁点や半濁点の文字が2文字になっているというのもあるかも知れない。これはよくMacOSとWindows間のファイルをやり取りすると起こる。
画面上は全く同じに見えるファイルが同じディレクトリに2つ並んだりする。しかし文字コードを調べると違っている。
989デフォルトの名無しさん (ワッチョイ df01-PoJv)
2019/02/06(水) 21:18:32.76ID:gnsmOIbq0 レスを頂きありがとうございます。
983です。
readlinkは事前に使用して検証してたのですが、
問題なくシンボリック先を辿れていました。
カレントディレクトリが/tmpの状態でコマンドで
打つとこれも問題なく動作します。
文字もシンプルな英語しか使用してないので
どこが間違っているのかわかりません。
教えて頂いたデバッグ方法を参考にもう少し探ってみます。
983です。
readlinkは事前に使用して検証してたのですが、
問題なくシンボリック先を辿れていました。
カレントディレクトリが/tmpの状態でコマンドで
打つとこれも問題なく動作します。
文字もシンプルな英語しか使用してないので
どこが間違っているのかわかりません。
教えて頂いたデバッグ方法を参考にもう少し探ってみます。
990デフォルトの名無しさん (ワッチョイ c259-nSHY)
2019/02/08(金) 02:22:47.00ID:GNPN10IV0 シェルスクリプト難し過ぎワロタw
もうpythonでいいよ
もうpythonでいいよ
991デフォルトの名無しさん (ワッチョイ d914-feI+)
2019/02/08(金) 02:56:12.30ID:OGIJJ+v/0 シェルスクリプトで何をすると難しくなるのか?
992デフォルトの名無しさん (ワッチョイ 6e2c-V6Wy)
2019/02/08(金) 04:05:44.63ID:0dQnaPPd0 シェルスクリプトがややこしいから、
vagrant, chef, Homebrew などは皆、Ruby で作られている
vagrant, chef, Homebrew などは皆、Ruby で作られている
993デフォルトの名無しさん (ワッチョイ d914-feI+)
2019/02/08(金) 04:14:07.33ID:OGIJJ+v/0 その理屈はおかしい
Rubyがややこしいから、
ansibleはPythonで作られてる
と言えてしまう
Rubyがややこしいから、
ansibleはPythonで作られてる
と言えてしまう
994デフォルトの名無しさん (ワッチョイ d914-feI+)
2019/02/08(金) 04:16:16.40ID:OGIJJ+v/0 > シェルスクリプトがややこしいから、
>
> vagrant, chef, Homebrew などは皆、Ruby で作られている
>>992はなぜこんな言い方をしてしまったのか?
それは、vagrant, chef, Homebrew などは皆、
本来はシェルスクリプトで作るべきものなんだ
と思っているからなのだろう。
>
> vagrant, chef, Homebrew などは皆、Ruby で作られている
>>992はなぜこんな言い方をしてしまったのか?
それは、vagrant, chef, Homebrew などは皆、
本来はシェルスクリプトで作るべきものなんだ
と思っているからなのだろう。
995デフォルトの名無しさん (ワッチョイ cddd-Iuku)
2019/02/08(金) 04:55:40.42ID:TBYY3ugx0 brewコマンド自体はシェルスクリプト
996デフォルトの名無しさん (アウアウエー Sa0a-/S9r)
2019/02/08(金) 08:43:54.60ID:e7pcoQvna997デフォルトの名無しさん (ワッチョイ d914-feI+)
2019/02/08(金) 08:56:59.76ID:OGIJJ+v/0 その理屈でいうと、rbenvはRubyがややこしいから
シェルスクリプトを使ったということになる
シェルスクリプトを使ったということになる
998デフォルトの名無しさん (ワッチョイ d914-feI+)
2019/02/08(金) 09:01:28.19ID:OGIJJ+v/0 「モジュールが対応してなくてYAMLで設定できないんだけど?」
ansible「シェルスクリプトも使えるで」
なら最初からシェルスクリプトにしろよ(笑)
ansible「シェルスクリプトも使えるで」
なら最初からシェルスクリプトにしろよ(笑)
999デフォルトの名無しさん (ブーイモ MMf6-nSHY)
2019/02/08(金) 09:52:00.86ID:8tcvjc2ZM シェルスクリプト、マヂややこしい…。すぐ頭から抜ける。
もうpythonでいいよ。
もうpythonでいいよ。
1000デフォルトの名無しさん (ワッチョイ 0211-z8kj)
2019/02/08(金) 10:45:14.94ID:h1cIDqYw0 あの、質問いいですか?
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 138日 22時間 51分 54秒
新しいスレッドを立ててください。
life time: 138日 22時間 51分 54秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 【野球】野球の未来に危機感「マイナースポーツになる」 宮本慎也氏が開催…学童大会 [尺アジ★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 【訃報】声優・西村知道さん死去 「SLAM DUNK」安西先生役 9月に体調不良のため一時休業 [少考さん★]
- 防衛省関係者「中国軍のレーダー照射は現場の忖度か暴走だろう」 [834922174]
- マヨネーズにわさび、山椒、卵の黄身、ラー油、オリーブオイルを入れてよく混ぜてください
- 【愛国者速報】山上徹也、金に困りTwitterのお金配り垢に応募していた。犯行もお金があったら暫くやらなかったと供述 [856698234]
- 千晴可哀想じゃね?
- 千晴とVIPの深夜の遊戯
- 巨大地震 [957955821]
