シェルスクリプト総合 その29
レス数が950を超えています。1000を超えると書き込みができなくなります。
シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その28
http://mevius.5ch.net/test/read.cgi/tech/1532397676/ ああ、cshではなくてtcshだった
This is a shar file containing zsh, a ksh/tcsh-like shell. >>846
可搬性は求めない。環境限定で動けば良い。運用寿命は数年もてばいい。
が要件ならば、拡張機能使っても問題ないだろうね。 >>852
> 環境限定で動けば良い。運用寿命は数年もてばいい。
これを満足するのがPOSIX標準なんですよね。 >>853
POSIXは可搬性を高めるための規格なので逆だと思います。 >>843
> 独自機能を使ったら可搬性がないのだから
独自機能を使わなければ可搬性がある
という証言いただきました! >>846
> そこ重視すると可読性・メンテナンス性が、ひいては品質が落ちると思うんだがどうよ?
落ちないよ。 >>846
> 可搬性ってそんなに重要か?
(d)ashがよく使われてるからね。
可搬性と言うよりも、(d)ashで動うことが重要 >>845
> わざわざashを作った理由やkshが分かれてる理由が分からんが
オープンソースではないのでソースコードが公開されない
資産が生かせない
UNIXでBourne shell誕生
○(UNIX)がBourne shell改良、shの亜種○を作る
△(UNIX)が更に改良、shの亜種△を作る
□(UNIX)が更にl改良、shの亜種□を作る
◇(UNIX)が更にl改良、shの亜種◇を作る
UNIX界隈で、shという名前でバージョン番号すら
無いshの亜種が大量に生まれる
そしてshの最終形態でやっとPOSIXに
準拠したかもしれない程度のレベルで互換性がない >>858
>オープンソースではないのでソースコードが公開されない
shはソールまるごと公開してたろ ああ、訂正 ライセンスがクソだったのでソースが再利用できない あと
誰も Bourne shell の文法がどうなっているかを本当には知らない。ソースコードを調べてみてもほとんど役に立たない。
とかいうのもなんか納得できるな。違うかもだが。そういう時代だったのねと
rcという変わり種の作者がだから酷く言っているだけかと思った。それもあるかもだがw >>861
正確に言えば、POSIX以前に作られた、 POSIX準拠してない Bourne shell を廃棄して
POSIX準拠で作り直したということ
(POSIX)シェルを再実装したのは正しいが、Bourne shellそのものを再実装したのではない >>863
>>850の図からはPOSIXの前からみたいだけど、ashは。まあなんか怪しいかもしれない図だけどw 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準拠はその後でという怪しい図のソコは間違っていないような System V shellの再実装であって、Bourne shellの再実装ではない System V shellはBourne shellを名乗っているのかもしれないが、
オリジナルのBourne shellではない
オリジナルという言い方が気に食わないなら
最初に作られたshと読みかえれ 別にそこはどうでもいい。てかちょっと見苦しいかなw >>850
なんか揉めそうだけど、その図のより正確な版を5ch wikiかなにかに作ったらいいかもね。 >>856,857
それ dash 使うことで dash が動く実装すべてで動作してるってだけで、可搬性ある書き方の話と別じゃね?
if 文とかで実装ごとに異なる書き方しまくる話をしようよ。 iocall attach user_output file xx
list
iocall attach user_output syn user_i/o
Multicsだとls >xxがこの記述量らしいな
パイプさまさまだわ >>872
dashで動けば、他のシェルでも動くよ シェルスクリプトで可搬性のあるコードを書くのはそもそも無理がある >>846
だよな。どこでも動くシェルスクリプトなんて都市伝説だし。 >>846
> echo の引数で -n が使えるか使えないかなんて考えるのやめて10年以上経つわ。
すべてのPOSIX準拠シェルで-nは使える
>>877
POSIX準拠シェルであれば可能。不可能な理由がない。 >>875,878
なんでスクリプトの構文のみの話になってるの? 可搬性の話がずれてる。
autoconf が作る configure のような、メンテナンス性・可読性皆無だが比較的どこでも動くスクリプトみたいな奴
だと思ってるんだが皆はどういう認識なのよ? シェルの仕様だけの問題じゃなくて、コマンドがOS、バージョンによってまちまち
IPアドレス取得するだけでも大量にバリエーションがあってどうにもならないから、Linuxではifconfigが非推奨になった コマンドもPOSIX準拠のものだけ使うに決まってるじゃん
はい、可搬性ありまーす
rubyでsedを呼び出していて、非POSIXのオプション使ってるから
rubyは可搬性がないとか言われても困るw
この場合可搬性がないのはsed(の非POSIXのオプション)であって
呼び出してる言語(ruby or shell)が可搬性がないわけではない >>879
「autoconfが作るconfigure」は「どこでも動くスクリプト」じゃないだろ
そのシステム専用のスクリプトだよ はぁ、なんでこんなに頭が悪いんだろう。
「C言語が吐き出すアセンブリ言語」は「どこでも動くアセンブリ言語」じゃないから
C言語は可搬性がないという主張ですかね。
ほんと、頭わりぃ 「POSIXクソだりー可搬性なんていらん」とかいうやつはshellcheckとかリンター使えよ >>881
それな。
「シェルスクリプトは可搬性がない!」なんて言ってる奴が単に可搬性のある書き方を知らないだけだと思う。
もちろんPOSIXに準拠するかしないかは個人の自由だけど
そんなことも知らずにPOSIX規格に記載のない書き方をしておいて「可搬性がない」は失笑モノだわ。 他で動かないように書けてしまうのが問題。
POSIX範囲外の余計な機能を付けるからだ。
すべて削除してPOSIX以外書けないひとつのshにするべし。 \
 ̄ヽ、 _ノ
○
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 \ \ posix linker 作ったら需要ありそうだな? >>883
おまえ、自分で書いた文章読んでみろよ
「autoconfが作るconfigure」がどこでも動くのかよ >>886
結局複数環境で動かすには何が必要かは置かれた環境でまちまちなわけで。
grep や awk が POSIX 対応していない環境だってあるわけで、そういう人からすると
POSIX 準拠してればいいって言ってる人は論外なわけなんだわ。 >>882
流石に「そのシステム専用」は失礼過ぎないか?
FreeBSD でも Linux でも AIX でも Solaris でも大概な UNIX ライクなシステムで動くし、それらの環境を持ってない
開発者が作ったプログラムを安全にサポートしてくれてるでしょ?
それとも autoconf とか automake とか使ったことない人かな? なら黙っててよ。 >>891
今どきPOSIX非準拠のシステムなんてないだろ
nextstepがーとか言い出すなよw >>893
準拠してるっていっても非準拠の時代に対して互換性を確保する必要があるから PATH を通す順番
変えるとかでシステムごとに if 文地獄。
ここまでちゃんとやって可搬性があるって胸張れるってもんでしょ。 >>894
お前さ、もしかして、autoconfが生成したconfigureを
他の環境にコピーして動くかどうかって話をしてるの?
Yes か No で答えて >>892
そのシステムに合わせたスクリプトを出力するのがautoconfなのに
何を言ってるんだ君は?? >>894
そこまでちゃんとやってるから準拠システムとして認定されてるんだろ
バカなの? >>895,896
当然 Yes ですよ?
そのシステムだけで動くものなら最初から Makefile だけつくってりゃいいって話になる。
ちゃんと書けてない、エラーメッセージろくによんでないからそうなるだけだろ? >>897
現実のシステム触ってなくて自信なくなったからディスるって、もう見てられないです。 >>898
ばかやなー。configureは環境毎に生成するものなんだから
可搬性が有るかどうかを考える必要がない問題
コピーしないものをコピーしても動くようにするには
どうするかなんて、考える意味がないことだろ
今話してるのは「シェルスクリプトで可搬性のあるコードを書く」という
書かないものについて、話をしても意味はない。 >>899
> 互換性を確保する必要があるから PATH を通す順番
変える
は?君は何を言っているんだ? >>900
configure が環境ごとの Makefile や config.h を生成するのであって、configure は環境ごとに生成するものではないぞ?
環境ごとに生成するならなぜ Unix Like 向けのオープンソースは configure を配るわけ?
その理屈なら configure.ac だけで良いんじゃないの?
INSTALL に autoconf 先に実行してくださいって書いてないのはなんで? >>901
/usr/bin に入っているのは POSIX 非互換で、他のパスに POSIX 互換コマンドつっこんで POSIX 互換ですって
言ってる環境がゴロゴロあって難儀してるって話だが? >>904
Solaris AIX HPUX とかそうじゃん。 >>905
で、POSIX 互換コマンドがどこにつっこんであるって? >>907
うちのHPUXは/bin, /usr/bin にちゃんとリンク張ってあるけどな
それなんてHPUX? >>902
> 環境ごとに生成するならなぜ Unix Like 向けのオープンソースは configure を配るわけ?
configure を配ってるタイプなら、
そのconfigure には可搬性が有るということだろw >>909
で、 >>895 の質問はどうするのよ? >>908
何の話? POSIX 非互換の話をしているんだが? >>907
それ本当ならPOSIX準拠じゃないじゃん
嘘ついちゃダメよw 結局POSIX規格に準じてないコマンドの具体例一つも出せてなくて草生えますよ
「現行で使われているPOSIX準拠を謳っている筈のXXX-OSでは
/bin/xxxにあるコマンドXXXがPOSIX規格とこれこれこういう点で不一致」
↑これを言えばいいだけだぜ? それを言うのに何レスを無駄な喧嘩で消費してるんだ。 オプションの-と--の扱いが雑なコマンドはどうなの
findは-の後が単語だし(-name)
wgetも-の後に2文字指定したりするし( -nc)
tarは-が不要な上に-の有無で挙動が変わるpsまであるし
基本コマンドの時点で既にガバガバじゃねーか
ddはそもそも出身が違うしな なにか困りますか?そういうオプションで
ターミナル上で普通にコマンド打ってますよ。
あなた黒い画面(CLI)で仕事できない人ですか? >>918
なにか困りますって、別のシステムにスクリプト持って行った時に正常動作しないから困ります、でしょ。 >>917
POSIXでは--から始まるオプションや複数文字のオプションは認められてない。
そこコマンドが勝手独自に拡張しているものを持って来て「互換性がない!」っていうのはおかしい。 >>919
お前言ってることめちゃくちゃだな
コマンドによってオプションの形式が違ってるって話を
お前はしていただろ
別のシステムに持っていったって、あるコマンドの
オプションの形式は同じなんだから正常に動くだろ date コマンドの オプション、
GNU版 と他の (BSD系 Mac とか) で全然違ってて戸惑った事がある POSIXは実装ありきの後出し規格なんだよ
カバーしきれない部分がたくさんある
917の挙げてる中で wget tar はPOSIXコマンドじゃない
特にネットワーク系コマンドはほとんど規格化されていない
POSIXから外れた部分の可搬性を高めるにはどうする?
例えばネットから何か落とそうと思ったら wgetかcurl使うじゃん
でも全てのシステムに必ず入ってるわけじゃない
無いならインストールしてくださいってなるわな
バージョン上がると独自拡張されたり仕様変わったりで対応いるだろ
POSIXみたいに下位互換性も保証されない
可搬性ってやつはどうなるんだ? >>922
そのためのPOSIX
>>923
DirectXはWindows環境でしか使えないから
C++は可搬性がないってか?
シェルスクリプトの可搬性の話をしてる。
外部コマンドはシェルスクリプトの範疇外だろ >>924
それ比喩になってないんだけどw
言ってること分からないならレスしなくていいよ >>925
比喩になってるよ。
理由は書かなくていいよね
理由書かずに比喩になってないと主張する人みたいだから >>926
説明できない奴に限ってこういうこと言い出すんだよな
適当に書きましたごめんなさいってなんで言えないんだろう
宮迫だって金もらってましたごめんなさいって最初に言ってれば
秋には復帰できてたろうになあ(まあ復帰しなくても構いませんが) 優等生ってなにをもってなのかわからんが、BSDのコマンドよりもGNUの方があれやこれやオプションが充実してたりする。POSIXの方がもっと不便だぞw
開発者の数が全然違うんだろうからしょうがないんだろう >>926
言語の可搬性ではなくて、やりたいことを書いたプログラム(シェルスクリプト)の可搬性を言っているんだろ
比喩にはなってないだろう。C++で書いたDirectXを使ったソースの可搬性なんてないと自分でも言っているんだから そりゃsedの「GNU拡張」をBSDで使えば可搬性はなくなるだろうけど
「拡張」って言葉の意味わかってる?
双方ともPOSIX sedには最低限準拠してるから、
POSIX sedの仕様だけを守ってればどっちの環境でも動く。 たぶん、ID:TT0ZFmIC はそういうレベルの話ではない
そもそも>>928は可搬性の話ではないだろう。POSIXにするとなお不便になるからな。可搬性の話なら最後の言葉は出ないだろう 可搬性高いシェルスクリプト書くならPOSIXで書く
これは間違っていない
でもPOSIXで何でも書けるわけじゃない
環境依存しないと書けない部分がある
POSIXは不完全な規格だってことだ
俺はPOSIX推進派だけどなw まとめるとどこでも動くシェルスクリプトなんて都市伝説ってことだよね そもそも可搬性可搬性って、そんなあれやこれやの環境を管理していんのかいっていう
シェルスクリプトで書けるものなんて全然たいしたことは書けないので、環境がしょうがなく変わったらそれに対して書き換えればいいだろうとしか思わんな
シェルクスリプトは単に補助的にしか使わない、本業は別の言語(IDE、最低限でもmakeが必要な)な俺は、可搬性可搬性って???だなw >>934
「なんでも」は都市伝説
可能な範囲では全然可能(そこに苦労があってもw) まとめるとどこでも動くC言語なんて都市伝説ってことだよね
C言語でゲームできないもん まあ要するに、POSIXに準拠しとけばかなり可搬性の高いシェルスクリプトが書ける。
でもどんな言語でもそうであるように「完璧で」「完全な」可搬性は実現できない。
しかしまあ俺個人としてはシェルスクリプトは可搬性を高めやすい言語だと思うけどね。
ちゃんと実装から独立した文書としての規格があるし。 >>919
え?動作するんじゃないの?
>>917はあくまでコマンド同士のオプション形式が違うって言ってただけで
そのコマンド自体ではシステム間で互換性があるんでは? >>939
あと、不完全なPOSIX規格でも、それがあればこそなにかあってもポーティングがどちからという楽すぎってのも 次スレ立てるときワッチョイを有効にしたいんだけど
どうすればいいんだっけ。 >>938
だからシェルスクリプトで、外部コマンドが違っていて動かないというのなら、
C言語で、APIが違っていて動かないよね
でも言語(シェルスクリプト or C言語)は可搬性が有るよね
言語以外の部分が異なっていたとしても。
ってことだけど? >>944
なにを言いたいのかさっぱり。C言語ってわかってるの?
C言語でも>>934の通りだよ。C言語でゲームできないもんもイミフだったが、そのレスではソコの説明が書いてあるのかさえ不明w >>944
可搬性があるんじゃなくてコンパイルが通るだけ or プリプロセッサまでが通るだけ。
同じシステムコールでも SysV と BSD で動作が違うとかあって、コンパイル通るだけで碌に動かないものも出る。
C で可搬性を求めるなら automake 使ってどこが不都合かを確認しまくるしかない。
それも不完全なので最後は地道なデバッグ。 >>945
じゃあ可搬性がある言語ってなに?
その言語で作れば本当にどこでも動くの? >>948
いきなりな問いだなwそんなこと言った覚えはないぞ?どうした?
いや、Cだって>>934の通り、可搬性のあるモノは作れる。どういう「モノ」によるかだがな また間違っちゃった。>>934にはナニかあるのかw > いや、Cだって>>934の通り、可搬性のあるモノは作れる。どういう「モノ」によるかだがな
結局
シェルスクリプトだって、可搬性のあるモノは作れる。どういう「モノ」によるかだがな
という答えかよw レス数が950を超えています。1000を超えると書き込みができなくなります。