X



シェルスクリプト総合 その29
レス数が950を超えています。1000を超えると書き込みができなくなります。
0852デフォルトの名無しさん
垢版 |
2019/06/29(土) 16:24:24.49ID:0fRKmc/o
>>846
可搬性は求めない。環境限定で動けば良い。運用寿命は数年もてばいい。
が要件ならば、拡張機能使っても問題ないだろうね。
0853デフォルトの名無しさん
垢版 |
2019/06/29(土) 16:43:46.48ID:tuUcuaq1
>>852
> 環境限定で動けば良い。運用寿命は数年もてばいい。
これを満足するのがPOSIX標準なんですよね。
0855デフォルトの名無しさん
垢版 |
2019/06/29(土) 16:59:43.19ID:/BkVpaGH
>>843
> 独自機能を使ったら可搬性がないのだから

独自機能を使わなければ可搬性がある
という証言いただきました!
0856デフォルトの名無しさん
垢版 |
2019/06/29(土) 17:05:11.99ID:/BkVpaGH
>>846
> そこ重視すると可読性・メンテナンス性が、ひいては品質が落ちると思うんだがどうよ?

落ちないよ。
0857デフォルトの名無しさん
垢版 |
2019/06/29(土) 17:06:04.22ID:/BkVpaGH
>>846
> 可搬性ってそんなに重要か?

(d)ashがよく使われてるからね。
可搬性と言うよりも、(d)ashで動うことが重要
0858デフォルトの名無しさん
垢版 |
2019/06/29(土) 17:13:24.88ID:/BkVpaGH
>>845
> わざわざashを作った理由やkshが分かれてる理由が分からんが
オープンソースではないのでソースコードが公開されない
資産が生かせない

UNIXでBourne shell誕生
○(UNIX)がBourne shell改良、shの亜種○を作る
△(UNIX)が更に改良、shの亜種△を作る
□(UNIX)が更にl改良、shの亜種□を作る
◇(UNIX)が更にl改良、shの亜種◇を作る

UNIX界隈で、shという名前でバージョン番号すら
無いshの亜種が大量に生まれる
そしてshの最終形態でやっとPOSIXに
準拠したかもしれない程度のレベルで互換性がない
0859デフォルトの名無しさん
垢版 |
2019/06/29(土) 18:33:44.12ID:pTnnUNQ0
>>858
>オープンソースではないのでソースコードが公開されない

shはソールまるごと公開してたろ
0862デフォルトの名無しさん
垢版 |
2019/06/29(土) 20:03:34.74ID:khQF1iKv
あと
誰も Bourne shell の文法がどうなっているかを本当には知らない。ソースコードを調べてみてもほとんど役に立たない。
とかいうのもなんか納得できるな。違うかもだが。そういう時代だったのねと
rcという変わり種の作者がだから酷く言っているだけかと思った。それもあるかもだがw
0863デフォルトの名無しさん
垢版 |
2019/06/29(土) 20:11:26.48ID:LSJMfKyW
>>861
正確に言えば、POSIX以前に作られた、 POSIX準拠してない Bourne shell を廃棄して
POSIX準拠で作り直したということ

(POSIX)シェルを再実装したのは正しいが、Bourne shellそのものを再実装したのではない
0865デフォルトの名無しさん
垢版 |
2019/06/29(土) 20:24:08.27ID:khQF1iKv
Ash is a reimplementation of the System V shell. Currently it has most
features of that shell, plus some additions. It runs on 4.2 and 4.3BSD,
SystemV releases 1, 2, 3, SystemIII, and perhaps Version 7. Documentation
includes a list of differences, a manpage, and internals documentation.
It has several built-ins and shell functions.
のようだね。最初は。POSIX準拠はその後でという怪しい図のソコは間違っていないような
0867デフォルトの名無しさん
垢版 |
2019/06/29(土) 20:31:23.20ID:LSJMfKyW
System V shellはBourne shellを名乗っているのかもしれないが、
オリジナルのBourne shellではない
オリジナルという言い方が気に食わないなら
最初に作られたshと読みかえれ
0872デフォルトの名無しさん
垢版 |
2019/06/30(日) 03:55:44.69ID:rfDMTcnr
>>856,857
それ dash 使うことで dash が動く実装すべてで動作してるってだけで、可搬性ある書き方の話と別じゃね?
if 文とかで実装ごとに異なる書き方しまくる話をしようよ。
0873デフォルトの名無しさん
垢版 |
2019/06/30(日) 03:59:41.59ID:CMkdrv99
iocall attach user_output file xx
list
iocall attach user_output syn user_i/o
Multicsだとls >xxがこの記述量らしいな
パイプさまさまだわ
0877デフォルトの名無しさん
垢版 |
2019/06/30(日) 10:28:41.23ID:2juPiYlp
>>846
だよな。どこでも動くシェルスクリプトなんて都市伝説だし。
0878デフォルトの名無しさん
垢版 |
2019/06/30(日) 10:43:07.31ID:Fo3wYRY8
>>846
> echo の引数で -n が使えるか使えないかなんて考えるのやめて10年以上経つわ。
すべてのPOSIX準拠シェルで-nは使える

>>877
POSIX準拠シェルであれば可能。不可能な理由がない。
0879デフォルトの名無しさん
垢版 |
2019/06/30(日) 16:52:33.33ID:rfDMTcnr
>>875,878
なんでスクリプトの構文のみの話になってるの? 可搬性の話がずれてる。
autoconf が作る configure のような、メンテナンス性・可読性皆無だが比較的どこでも動くスクリプトみたいな奴
だと思ってるんだが皆はどういう認識なのよ?
0880デフォルトの名無しさん
垢版 |
2019/06/30(日) 17:13:52.68ID:DWafJWcS
シェルの仕様だけの問題じゃなくて、コマンドがOS、バージョンによってまちまち
IPアドレス取得するだけでも大量にバリエーションがあってどうにもならないから、Linuxではifconfigが非推奨になった
0881デフォルトの名無しさん
垢版 |
2019/06/30(日) 18:00:24.49ID:Fo3wYRY8
コマンドもPOSIX準拠のものだけ使うに決まってるじゃん
はい、可搬性ありまーす


rubyでsedを呼び出していて、非POSIXのオプション使ってるから
rubyは可搬性がないとか言われても困るw

この場合可搬性がないのはsed(の非POSIXのオプション)であって
呼び出してる言語(ruby or shell)が可搬性がないわけではない
0882デフォルトの名無しさん
垢版 |
2019/06/30(日) 18:38:54.22ID:29vlF+26
>>879
「autoconfが作るconfigure」は「どこでも動くスクリプト」じゃないだろ
そのシステム専用のスクリプトだよ
0883デフォルトの名無しさん
垢版 |
2019/06/30(日) 18:47:02.27ID:Fo3wYRY8
はぁ、なんでこんなに頭が悪いんだろう。

「C言語が吐き出すアセンブリ言語」は「どこでも動くアセンブリ言語」じゃないから
C言語は可搬性がないという主張ですかね。

ほんと、頭わりぃ
0884デフォルトの名無しさん
垢版 |
2019/06/30(日) 19:12:33.55ID:wmvzG4iV
「POSIXクソだりー可搬性なんていらん」とかいうやつはshellcheckとかリンター使えよ
0886デフォルトの名無しさん
垢版 |
2019/06/30(日) 20:26:11.65ID:1ALBmyOB
>>881
それな。
「シェルスクリプトは可搬性がない!」なんて言ってる奴が単に可搬性のある書き方を知らないだけだと思う。
もちろんPOSIXに準拠するかしないかは個人の自由だけど
そんなことも知らずにPOSIX規格に記載のない書き方をしておいて「可搬性がない」は失笑モノだわ。
0887デフォルトの名無しさん
垢版 |
2019/06/30(日) 21:48:35.95ID:2juPiYlp
他で動かないように書けてしまうのが問題。
POSIX範囲外の余計な機能を付けるからだ。
すべて削除してPOSIX以外書けないひとつのshにするべし。
0888デフォルトの名無しさん
垢版 |
2019/06/30(日) 22:03:54.02ID:pDzbN/vc

   ̄ヽ、   _ノ
      ○
       O      と思うハゲであった

                   ___
              o,.,   ̄      `丶、
            .〃;.; ;  O          `、
            /;i;i;.; ;  °            ヽ
           j!;i;i;i;.;                `、
          .j!;i;i; ;                  V
.        , -v{功テえ三≧k j  i            i}
          .i;i;i;i∧;{i ___  ヽ〉-- 〃ヌニ≠ェァ;,、_ /〉
         {i;i;i;i;i;i;ム ‘、 ̄≧ j.r−v{!   __   `v身≧"
        i;i;j!;i;i;i;.;丶 _  .ノノ  `ム、´⌒`ー /;アー7´〉
.          v;i;i;i; ;´       ,ァ    丶`_ ノ/ / y゜
.         j;i;i;i;.;     ィ(  {!    ヽ,       i}U
.        {;i;i;.;    /‘≠ー弋__. ヘ        iノ
         :;i;i;.; ; }/ ____   ̄    \     |
          .人;i;i;i;.; ト 卞、カv ̄T++=a、 〉    j}
   .__/  ∧;i;i;i;,ミ 、    ̄ ̄ ̄ ̄ ̄ j〕     /^
      \   ∧;弋ミ              /
        \  へ`,,ヾ;.;,           ィ爪
            ヽ  へ、           . ´/  ト、__
             }     >; ,,__ーァ ´  .イ    i \ ̄\
                       〃/⌒ヽ.j   \  \
0891デフォルトの名無しさん
垢版 |
2019/06/30(日) 22:40:13.43ID:rfDMTcnr
>>886
結局複数環境で動かすには何が必要かは置かれた環境でまちまちなわけで。
grep や awk が POSIX 対応していない環境だってあるわけで、そういう人からすると
POSIX 準拠してればいいって言ってる人は論外なわけなんだわ。
0892デフォルトの名無しさん
垢版 |
2019/06/30(日) 22:44:16.79ID:rfDMTcnr
>>882
流石に「そのシステム専用」は失礼過ぎないか?
FreeBSD でも Linux でも AIX でも Solaris でも大概な UNIX ライクなシステムで動くし、それらの環境を持ってない
開発者が作ったプログラムを安全にサポートしてくれてるでしょ?
それとも autoconf とか automake とか使ったことない人かな? なら黙っててよ。
0894デフォルトの名無しさん
垢版 |
2019/06/30(日) 22:56:53.99ID:rfDMTcnr
>>893
準拠してるっていっても非準拠の時代に対して互換性を確保する必要があるから PATH を通す順番
変えるとかでシステムごとに if 文地獄。
ここまでちゃんとやって可搬性があるって胸張れるってもんでしょ。
0895デフォルトの名無しさん
垢版 |
2019/06/30(日) 22:59:21.24ID:Fo3wYRY8
>>894
お前さ、もしかして、autoconfが生成したconfigureを
他の環境にコピーして動くかどうかって話をしてるの?
Yes か No で答えて
0896デフォルトの名無しさん
垢版 |
2019/06/30(日) 23:03:50.43ID:29vlF+26
>>892
そのシステムに合わせたスクリプトを出力するのがautoconfなのに
何を言ってるんだ君は??
0898デフォルトの名無しさん
垢版 |
2019/06/30(日) 23:12:25.38ID:rfDMTcnr
>>895,896
当然 Yes ですよ?
そのシステムだけで動くものなら最初から Makefile だけつくってりゃいいって話になる。
ちゃんと書けてない、エラーメッセージろくによんでないからそうなるだけだろ?
0900デフォルトの名無しさん
垢版 |
2019/06/30(日) 23:15:47.94ID:Fo3wYRY8
>>898
ばかやなー。configureは環境毎に生成するものなんだから
可搬性が有るかどうかを考える必要がない問題

コピーしないものをコピーしても動くようにするには
どうするかなんて、考える意味がないことだろ

今話してるのは「シェルスクリプトで可搬性のあるコードを書く」という
書かないものについて、話をしても意味はない。
0902デフォルトの名無しさん
垢版 |
2019/06/30(日) 23:23:29.76ID:rfDMTcnr
>>900
configure が環境ごとの Makefile や config.h を生成するのであって、configure は環境ごとに生成するものではないぞ?
環境ごとに生成するならなぜ Unix Like 向けのオープンソースは configure を配るわけ?
その理屈なら configure.ac だけで良いんじゃないの?
INSTALL に autoconf 先に実行してくださいって書いてないのはなんで?
0903デフォルトの名無しさん
垢版 |
2019/06/30(日) 23:24:55.93ID:rfDMTcnr
>>901
/usr/bin に入っているのは POSIX 非互換で、他のパスに POSIX 互換コマンドつっこんで POSIX 互換ですって
言ってる環境がゴロゴロあって難儀してるって話だが?
0909デフォルトの名無しさん
垢版 |
2019/06/30(日) 23:44:01.95ID:Fo3wYRY8
>>902
> 環境ごとに生成するならなぜ Unix Like 向けのオープンソースは configure を配るわけ?

configure を配ってるタイプなら、
そのconfigure には可搬性が有るということだろw
0914デフォルトの名無しさん
垢版 |
2019/07/01(月) 01:28:15.55ID:2smzn43h
結局POSIX規格に準じてないコマンドの具体例一つも出せてなくて草生えますよ
「現行で使われているPOSIX準拠を謳っている筈のXXX-OSでは
/bin/xxxにあるコマンドXXXがPOSIX規格とこれこれこういう点で不一致」
↑これを言えばいいだけだぜ? それを言うのに何レスを無駄な喧嘩で消費してるんだ。
0917デフォルトの名無しさん
垢版 |
2019/07/01(月) 04:01:56.69ID:TT0ZFmIC
オプションの-と--の扱いが雑なコマンドはどうなの
findは-の後が単語だし(-name)
wgetも-の後に2文字指定したりするし( -nc)
tarは-が不要な上に-の有無で挙動が変わるpsまであるし
基本コマンドの時点で既にガバガバじゃねーか
ddはそもそも出身が違うしな
0918デフォルトの名無しさん
垢版 |
2019/07/01(月) 04:33:11.57ID:TlV+Kbgz
なにか困りますか?そういうオプションで
ターミナル上で普通にコマンド打ってますよ。
あなた黒い画面(CLI)で仕事できない人ですか?
0919デフォルトの名無しさん
垢版 |
2019/07/01(月) 07:34:33.04ID:KK3BgYtY
>>918
なにか困りますって、別のシステムにスクリプト持って行った時に正常動作しないから困ります、でしょ。
0920デフォルトの名無しさん
垢版 |
2019/07/01(月) 07:54:28.17ID:2smzn43h
>>917
POSIXでは--から始まるオプションや複数文字のオプションは認められてない。
そこコマンドが勝手独自に拡張しているものを持って来て「互換性がない!」っていうのはおかしい。
0921デフォルトの名無しさん
垢版 |
2019/07/01(月) 09:00:56.52ID:TlV+Kbgz
>>919
お前言ってることめちゃくちゃだな
コマンドによってオプションの形式が違ってるって話を
お前はしていただろ

別のシステムに持っていったって、あるコマンドの
オプションの形式は同じなんだから正常に動くだろ
0922デフォルトの名無しさん
垢版 |
2019/07/01(月) 11:01:27.11ID:AbRjjU8q
date コマンドの オプション、
GNU版 と他の (BSD系 Mac とか) で全然違ってて戸惑った事がある
0923デフォルトの名無しさん
垢版 |
2019/07/01(月) 11:29:32.06ID:4+biahsm
POSIXは実装ありきの後出し規格なんだよ
カバーしきれない部分がたくさんある
917の挙げてる中で wget tar はPOSIXコマンドじゃない
特にネットワーク系コマンドはほとんど規格化されていない
POSIXから外れた部分の可搬性を高めるにはどうする?

例えばネットから何か落とそうと思ったら wgetかcurl使うじゃん
でも全てのシステムに必ず入ってるわけじゃない
無いならインストールしてくださいってなるわな
バージョン上がると独自拡張されたり仕様変わったりで対応いるだろ
POSIXみたいに下位互換性も保証されない
可搬性ってやつはどうなるんだ?
0924デフォルトの名無しさん
垢版 |
2019/07/01(月) 12:13:07.49ID:ywGyCn2/
>>922
そのためのPOSIX

>>923
DirectXはWindows環境でしか使えないから
C++は可搬性がないってか?

シェルスクリプトの可搬性の話をしてる。
外部コマンドはシェルスクリプトの範疇外だろ
0926デフォルトの名無しさん
垢版 |
2019/07/01(月) 12:34:28.70ID:ywGyCn2/
>>925
比喩になってるよ。

理由は書かなくていいよね
理由書かずに比喩になってないと主張する人みたいだから
0927デフォルトの名無しさん
垢版 |
2019/07/01(月) 12:47:29.70ID:RLVJ6D4b
>>926
説明できない奴に限ってこういうこと言い出すんだよな
適当に書きましたごめんなさいってなんで言えないんだろう
宮迫だって金もらってましたごめんなさいって最初に言ってれば
秋には復帰できてたろうになあ(まあ復帰しなくても構いませんが)
0929デフォルトの名無しさん
垢版 |
2019/07/01(月) 16:02:21.59ID:0UaOtlQU
優等生ってなにをもってなのかわからんが、BSDのコマンドよりもGNUの方があれやこれやオプションが充実してたりする。POSIXの方がもっと不便だぞw
開発者の数が全然違うんだろうからしょうがないんだろう
0930デフォルトの名無しさん
垢版 |
2019/07/01(月) 16:09:57.86ID:0UaOtlQU
>>926
言語の可搬性ではなくて、やりたいことを書いたプログラム(シェルスクリプト)の可搬性を言っているんだろ
比喩にはなってないだろう。C++で書いたDirectXを使ったソースの可搬性なんてないと自分でも言っているんだから
0931デフォルトの名無しさん
垢版 |
2019/07/01(月) 16:50:15.40ID:2smzn43h
そりゃsedの「GNU拡張」をBSDで使えば可搬性はなくなるだろうけど
「拡張」って言葉の意味わかってる?
双方ともPOSIX sedには最低限準拠してるから、
POSIX sedの仕様だけを守ってればどっちの環境でも動く。
0932デフォルトの名無しさん
垢版 |
2019/07/01(月) 16:56:06.15ID:0UaOtlQU
たぶん、ID:TT0ZFmIC はそういうレベルの話ではない
そもそも>>928は可搬性の話ではないだろう。POSIXにするとなお不便になるからな。可搬性の話なら最後の言葉は出ないだろう
0933デフォルトの名無しさん
垢版 |
2019/07/01(月) 18:51:49.95ID:4+biahsm
可搬性高いシェルスクリプト書くならPOSIXで書く
これは間違っていない
でもPOSIXで何でも書けるわけじゃない
環境依存しないと書けない部分がある
POSIXは不完全な規格だってことだ

俺はPOSIX推進派だけどなw
0934デフォルトの名無しさん
垢版 |
2019/07/01(月) 19:18:29.65ID:MoEwNeEz
まとめるとどこでも動くシェルスクリプトなんて都市伝説ってことだよね
0935デフォルトの名無しさん
垢版 |
2019/07/01(月) 19:21:40.57ID:0UaOtlQU
そもそも可搬性可搬性って、そんなあれやこれやの環境を管理していんのかいっていう

シェルスクリプトで書けるものなんて全然たいしたことは書けないので、環境がしょうがなく変わったらそれに対して書き換えればいいだろうとしか思わんな
シェルクスリプトは単に補助的にしか使わない、本業は別の言語(IDE、最低限でもmakeが必要な)な俺は、可搬性可搬性って???だなw
0937デフォルトの名無しさん
垢版 |
2019/07/01(月) 19:41:01.62ID:ywGyCn2/
まとめるとどこでも動くC言語なんて都市伝説ってことだよね
C言語でゲームできないもん
0939デフォルトの名無しさん
垢版 |
2019/07/01(月) 20:52:04.97ID:2smzn43h
まあ要するに、POSIXに準拠しとけばかなり可搬性の高いシェルスクリプトが書ける。
でもどんな言語でもそうであるように「完璧で」「完全な」可搬性は実現できない。

しかしまあ俺個人としてはシェルスクリプトは可搬性を高めやすい言語だと思うけどね。
ちゃんと実装から独立した文書としての規格があるし。
0940デフォルトの名無しさん
垢版 |
2019/07/01(月) 20:55:17.40ID:2smzn43h
>>919
え?動作するんじゃないの?
>>917はあくまでコマンド同士のオプション形式が違うって言ってただけで
そのコマンド自体ではシステム間で互換性があるんでは?
0941デフォルトの名無しさん
垢版 |
2019/07/01(月) 21:09:18.21ID:0UaOtlQU
>>939
あと、不完全なPOSIX規格でも、それがあればこそなにかあってもポーティングがどちからという楽すぎってのも
0942デフォルトの名無しさん
垢版 |
2019/07/01(月) 21:29:02.92ID:2smzn43h
次スレ立てるときワッチョイを有効にしたいんだけど
どうすればいいんだっけ。
0944デフォルトの名無しさん
垢版 |
2019/07/01(月) 21:39:48.33ID:ywGyCn2/
>>938
だからシェルスクリプトで、外部コマンドが違っていて動かないというのなら、
C言語で、APIが違っていて動かないよね

でも言語(シェルスクリプト or C言語)は可搬性が有るよね
言語以外の部分が異なっていたとしても。

ってことだけど?
0945デフォルトの名無しさん
垢版 |
2019/07/01(月) 21:51:05.99ID:0UaOtlQU
>>944
なにを言いたいのかさっぱり。C言語ってわかってるの?
C言語でも>>934の通りだよ。C言語でゲームできないもんもイミフだったが、そのレスではソコの説明が書いてあるのかさえ不明w
0947デフォルトの名無しさん
垢版 |
2019/07/01(月) 22:28:22.64ID:KK3BgYtY
>>944
可搬性があるんじゃなくてコンパイルが通るだけ or プリプロセッサまでが通るだけ。
同じシステムコールでも SysV と BSD で動作が違うとかあって、コンパイル通るだけで碌に動かないものも出る。
C で可搬性を求めるなら automake 使ってどこが不都合かを確認しまくるしかない。
それも不完全なので最後は地道なデバッグ。
0949デフォルトの名無しさん
垢版 |
2019/07/01(月) 22:52:54.73ID:0UaOtlQU
>>948
いきなりな問いだなwそんなこと言った覚えはないぞ?どうした?
いや、Cだって>>934の通り、可搬性のあるモノは作れる。どういう「モノ」によるかだがな
0951デフォルトの名無しさん
垢版 |
2019/07/01(月) 22:54:29.90ID:ywGyCn2/
> いや、Cだって>>934の通り、可搬性のあるモノは作れる。どういう「モノ」によるかだがな

結局

シェルスクリプトだって、可搬性のあるモノは作れる。どういう「モノ」によるかだがな

という答えかよw
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況