シェルスクリプト総合 その30
レス数が950を超えています。1000を超えると書き込みができなくなります。
シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/ >>875
確かに処理速度が遅すぎて全然使い物にならんかったよ…
本人は「遅くてもいいのだ、POSIXシェルがあればどこでも
使えるんだから」って強弁してたけどw どうでもいいけどgitやらrbenvやらって「POSIXシェルスクリプト」で書かれてんの?
そうじゃなきゃ彼の「世界中でPOSIX準拠のシェルスクリプトが動いてる!」って主張は
まったく支援されない,いや寧ろBashに依存したシェルスクリプトがrbenvという世界的な
プログラムで採用されてることによってその説は説得力を失なってるまである。
あ,「俺は『世界中でPOSIX準拠のシェルスクリプトが動いてる』なんて言ってない」なんて
くだらねー反論を先に封じておくと,
>>852に対して>>856を出した訳だから,
当然「シェルスクリプトの一体何%がPOSIX準拠なのか」に答えてる訳だからねぇ。 >>874
> ピュアシェルスクリプトの nkf 互換コマンドを出せばいいのに、って思う
しらんけど、どうせ大部分がawk実装で、
シェルスクリプトで実装してないんだろ? >>879
> どうでもいいけどgitやらrbenvやらって「POSIXシェルスクリプト」で書かれてんの?
話ずれまくりw いろんな環境で動くことが重要って話だろ >>880
いや、POSIXシェルの機能だけを使ってる。可搬性は高いが遅い。 >>883
思いつかない人のために、gitやrbenvという具体例をだしました。 >>882
それがどこにあるのかしらんが、iconvがPOSIXなのでどうでもいいかなw
nkfなんて所詮日本語にしか対応してないし 意味わからん逃げだな
そんなに多くの人が使ってるようなの書いていたら言えるだろうに。具体的に >>886
もしかして俺が誰か特定したかったのか? なにを言っているのか意味わからん
いろんな環境で動くがほぼ絶対なんだろう?そのいろんな環境で動くなにを書いているんだよという素朴な疑問
多くはいろんな環境で動くのを想定してなんていなく、自分の使う環境でしかとしか思わないからな >>888
> そのいろんな環境で動くなにを書いているんだよ
俺の個人的な便利ツール 便利ツールは、俺が興味がある環境すべてで使う。
LinuxやBSDやmacOSや組み込み環境
Unixも興味あるがSorarisとMac以外は個人で使うのが難しいので残念 だったら、いろんな環境で動くがほぼ絶対はあんただけのことだな >>891
俺が和洋中すべての料理を食べるって言ったら、
これらの料理を食べるのは、俺だけってことになるんか? 問.今現在でも世界中で書かれているシェルスクリプトの一体何%がPOSIX準拠なのか
池沼の答え1.gitは35.7%がシェルスクリプトである。俺は問に答えた!
池沼の答え2.rbenvはShellが96.5%。これが具体例だ!
ぼく「・・・」 >>892
また意味わからんことを言い出す
いろんな環境で動くがほぼ絶対と聞いたら俺の個人的な便利ツールってんんだもん、そんなの「あなたの[限られた]環境」の話だろう
結局自分の趣味の話だけじゃないの(なにその>>890のもろ趣味ですは)
それを根拠に他人に押し付ける、他人のを否定するんじゃないよ >>895
お前、他の人が「個人的な便利ツール」を持ってないとでも思ってんのか?
なんで、俺一人から情報もらったら、
世界全部のことを知ったつもりになるのさw >>894
あのー?その問いに答えたつもりはないんですが?
>>855が「具体性ゼロだな。多くは限られた環境しか使わんし、それで動けばいい」っていうから
具体的に、いろんな環境で動かすツールを出したんですが? >>896
意味わからん。なに言っているの?
特定な環境で動く個人的ツールの方が腐るほどあるだろうなんて理解できないの?個人的ツールだろ?意味わかって個人的ツールって使ってるの? >>898
だから、俺の個人ツールの話を聞いただけで、
POSIX準拠が必要なのは、世界中で俺だけだって判断してるのが
意味不明だって言ってるんだがw 根本的に何も理解できないのな
マルチプラットフォームを意識するスクリプトも当然あるし、そうじゃない特定の環境で動けばいいスクリプトも当然ある
あんたは前者ひとつと言うからおかしい。具体的にって聞いたら個人的ツールってことなので、全然いろんな環境で動くがほぼ絶対ではないってことだよ
というか逆に特定の環境で動けばいいの方が多数を占めているのが現実だろう。なぜかは自分で>>890で言っているようなもん
POSIX大好きいろんな環境で動くスクリプト書くのが好きってだけだな >>900
あのさぁ、俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってないんだが?
お前の思い込みだろ。俺がそう言ってるって。
俺は
POSIX準拠であれば、多くの環境で動く(事実)
俺が使ってる個人ツールは、多くの環境で動かしたい(事実)
俺の個人ツール以外でも、gitに含まれてるスクリプトやrbenvなど多くの環境で動かしたいものはある(事実)
としか言ってないの 他にも俺が言ったことには、
外部コマンドはオプションが異なることがあるので、シェルスクリプトで実装すると、
その違いに振り回されなくてすむ
というのがあります。 >>830に対して>>837なんて言い出す、それも自分ではPOSIXでの人だからそうとられても仕方がないと思うけど
(>>830はbashとzshの違いだし、デフォルトシェルが変わるだけでbashにすればだけで済む話でもあって)
まあ、言う通りなら俺の読み違いってことだな、まあ、すまんかった...腑に落ちないがw POSIXで書く書かないは好きにしろってことなら、すまんかった だいたいPOSIXに従ってないシェルもあるんだから
POSIXで書いたからといってどこでも動くわけじゃないし。
なんというか,ベンダ依存を嫌うあまりPOSIXに「依存」してしまってる感がある。 ここってPOSIXシェル以外の話題もおkなんだよな
なのに、それはbash依存とか外部コマンド使ったら遅いとか押しつけがましいやつがウザいんだよ
そんなもん好きに書かせろやって感じだわ > 最新のOSXだとZshになってるんだな
という話に続いて、他のOSではいろんなシェルが使われてるという話をすることに
なんの問題があるのかわからんが?
bashをインストールするのが大変な環境もあるんだし
POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし。
逆にオプションの違いで動かんことに対応する方が手間なんだよ。
上の方でも出てたけど、sort -Vで動くウェーイってやってたらmacOSで動かんのだろ?
(ぐぐって確かに動かんというような記事ばかりだが、最新のmacOSだと対応してる気もするw) 結局POSIXで書けって言ってるだろうに。ふらふらしてんなあ >>904
> だいたいPOSIXに従ってないシェルもあるんだから
> POSIXで書いたからといってどこでも動くわけじゃないし。
もっといい案があれば採用するが?
条件後出しするなって言われそうだから条件
組み込み機器など含めてソフトウェアを追加するのが困難なシステムでも動く
コンパイルはもとより、クロスコンパイル環境も不要
この条件でできるだけ多くの環境で同じように動く >>908
どこをどう読めば、お前は命令されてるように感じるんだ?w >POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし。
誰に向けて書いているの? 補足
> この条件でできるだけ多くの環境で同じように動く
これは多くの"種類"の環境っていみな
世の中Windowsばかりだろという反論は筋違い >>911
する必要もないのに、bashに依存してる人 それがだろうが。自分で何を書いているのかわかららないの? 別にbashに依存してもいいだろう?それでそのスクリプトの実行に問題がなければ
>俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってない
と相入れないね 唐揚げにレモンをかけると美味しくなりますよって言ったら、
「俺にレモンをかけろと命令したな!ムキー」って怒るような
話が通じない人が多いw わからんけど、複数が「?」と思ってるのだよ。よく考えような >>919
bashに依存してもいいだろ。というと
POSIXのすることのメリットは矛盾しないからねw
「bashに依存してもいいだろ」はお前の主観で、
POSIX準拠で作ることのメリットは客観的なもの
客観的事実に、主観で反論しないでください >>924
「POSIX好き」は主観
そのPOSIX好きの俺が述べてるPOSIX準拠のメリットは客観 あと11レスで今日一日でこのスレの1/10を俺が占拠したことになる。
お前ら、レス頑張れ! 結局何を言いたいの?POSIXで書け、できるだけそう書けと言いたいの? >>927
POSIX準拠で書けば、メリットがあるので、
POSIX準拠で書く話をしましょう。
ネタがなければ、私が時々問題を出しますよ
興味がない人は見なくていいです。
レスもしなくていいです。 すべてのシェルスクリプトがPOSIX準拠するべきだ
との違いがわからんな ∧∧ ミ _ ドスッ
( ,,)┌─┴┴─┐
/ つ. 終 了 │
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
゛゛'゛'゛ >>929
Javaで書けばいろんなOSで動きます。
と言ったからって、ドライバまでJavaで書けと言ってるんだ!
なんて思いますか? ドライバがJavaで書けるなら書く人もいるだろう。そんなOSがあれば
不適切よくわからん例えだな
結局
すべてのシェルスクリプトがPOSIX準拠するべきだ
と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく >>905
少なくとも5年前から
> □A. お約束
> 1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
> Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
> bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
> 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
https://peace.5ch.net/test/read.cgi/unix/1415634843/ >>932
> ドライバがJavaで書けるなら書く人もいるだろう。
そう思うのが普通ですよね?
「書けと命令したんだ!ムキー」ってなる方がおかしい 自分だって否定されたらそうなってるように見えるけど? >>932
Javaで例えれば冷静になって、
> ドライバがJavaで書けるなら書く人もいるだろう。
っていうわけだよね
でも、POSIXで書けばいろんなOSで動きますって言うと、頭に血が上って
> すべてのシェルスクリプトがPOSIX準拠するべきだ
> と言ってるのね。好きにしろではなくてPOSIXを強く勧める押し付けがましく
っていう感想に変わっちゃうんだよねw 俺が「POSIXで書けばいろんな環境で動きます。」って言ったんだから
「POSIXで書けるなら書く人もいるだろう。」って言えばいいだけなのにw
Javaの場合みたいに! 全然わかってなくて、そのレスは酷い。なにか揚げ足とってよろこんでいるように見えるけどw
問題なければいいよどうでもというのと、問題なくてもメリットがあるからこっちに「決まってる」という違い メリットを言うと「こっちに決まってる」という文章が書いてあると
勝手に脳内で補完してるんですか? Javaのメリットを言いました。
メリットがあるから、こっちに「決まってる」と? >POSIX準拠の範囲でできるなら、POSIX準拠でやればいいだろ。対して手間もかからんし
>する必要もないのに、bashに依存してる人
自分で何を言ってきたのか忘れたの? >>941
それだと俺が言ったことを復唱しただけだよw
だからなに? ソコからなんだけど。そんな直前レスに対しての揚げ足とり的なじゃなくw 結局いろいろ逃げてるけど、本心としては
すべてのシェルスクリプトがPOSIX準拠するべきだ
なんだろに。それもただ言ってみただけなのね、なぜか複数が見る掲示板でw
まあいいや >>943
言うべき言葉は何も見つからなかったの?中身がなにもないんだけど? >>944
>>901より
> あのさぁ、俺はすべてのシェルスクリプトがPOSIX準拠するべきだなんて一言も言ってないんだが?
明確に否定してんのに、お前何いってんの? 次のスレタイに【POSIX限定】って付けとけよ
アンチ除けになっていいと思うぞ >>946
とてもそうは見えないという結論だな。俺の結論だから気にしなくていいよw そういや 【POSIX】 sh系互換 シェルスクリプトスレ ってのがあるやん ほんとだ!見逃してた! 次スレの関連リンクに追加しといたよ
【POSIX】 sh系互換 シェルスクリプトスレ
https://mevius.5ch.net/test/read.cgi/tech/1535195112/ ほんとだw
2018/08/25
って、つい先日かと思ったら一年前かw スレ建ててくれたけど、どうかあちらを有効に使っていただきたい ここはPOSIX準拠じゃないスレも対応?
fishとかの話題もどんどん扱うってことかな? fishってPOSIXと互換性はかなり低かったと思うんだが、
最終的に高い互換性を持たせるつもりなん?
https://www.excite.co.jp/news/article/Cobs_1862541/
> POSIX互換シェルとの互換性向上のために&&、||、!をサポート
fishの設計理念5原則(翻訳):使いやすさのための数々の気遣い
http://fish.rubikitch.com/design-document-ja/
> 可能な限り上記の目標を崩すことなく、fishはPOSIXの構文に従うべきです。 最近では PowerShell なんてもあったり
どんどん扱うとかそういうんじゃなくて、そう否定するのはいないんじゃないかな
知らんけど http://fish.rubikitch.com/design-document-ja/
> ・ヒアドキュメントは パイプライン で echo コマンドを使うこととほとんど変わらないので不採用です。
> (訳注:「string trim 複数行文字列リテラル」でも代用可能)
> ・サブシェルとコマンド置換とプロセス置換はとても類似性が強いです。fishは コマンド置換 のみをサポートしています。
> それ以外はブロックまたはpsub標準シェル関数 で実現できます。
> ・別名定義 と シェル関数 の双方を持つことは混乱を招きます。特別にどちらも制限と欠点があるからです。
> fishの関数はいずれの構文の欠点も存在しません。
> ・POSIXのクオートの仕様は馬鹿げています!とくにシングルクォートは!!
やっぱ互換性はないと考えたほうが良いか おい、ついてこいよw
せっかくPOSIX以外の話もしてるんだから >>714-732
Ruby で作った
require "csv"
options = { :headers => true, :col_sep => "\t" }
table_1 = CSV.read( "hoge.tsv", options ) # 読み込み
table_2 = CSV.read( "huga.tsv", options ) # 読み込み
CSV.open( "hoge_huga.tsv", "w", options ) do |csv| # 書き込み
csv << %w(a b c d e) # header
table_1.zip( table_2 ).each do |one, two|
csv << [ one[ "a" ], one[ "b" ], two[ "c" ], two[ "d" ], one[ "e" ] ]
end
end >>970
勘違いしてるぞ。明確に書いてはないかもしれんが a b c d e はヘッダじゃなくてデータだ。
eachは不要。あといつになったら、その古いハッシュの書き方をやめるんだ?
訂正版
require 'csv'
options = { col_sep: "\t" }
table1 = CSV.read('hoge.tsv', options)
table2 = CSV.read('huga.tsv', options)
CSV.open('hoge_huga.tsv', 'w', options) do |csv|
table1.zip(table2) do |one, two|
csv << [one[0], one[1], two[0], two[1], one[2]]
end
end 長いと大変そう
ruby にもこういうのありそう
DB<8> @a = qw(a b e)
DB<9> splice @a, 2, 0, qw(c d)
DB<10> print @a
abcde >>973
それがRubyにはPerlやJavaScriptみたいなspliceがないんだよね
でも今回は、挿入するだけだから、 csv << one.insert(2, *two) が使えるね
順番をもっと柔軟に変えたいってなると面倒だけど >>660
そういやこんなのはいかんの?
てか、こういう答え既に出た?
#!/bin/sh
cf=0
for f
do
if [[ cf -eq 0 ]]; then
cf=1
else
echo -n ','
fi
echo -n "x${f}z"
done
echo '' >>975
echo -n はPOSIX準拠ではない。が、メンテナンスが続いている最新シェルはすべてサポートされている
と思っていたんだが、上の方で出てるboshが対応してなかったわw
やっぱりprintfを使うのが一番なんだろうな レス数が950を超えています。1000を超えると書き込みができなくなります。