シェルスクリプトにシバン(#!/bin/sh)はないほうがいいという説
いや,sedなんか使わなくても良かった。-pオプションを同時指定したらいけた。 export PATH="$(command -p $(command -pv getconf || echo :) PATH):$PATH" だけどやっぱりzshだとだめ。-pvが誤認される。えーい
2017-02-01 23:25:50#POSIX原理主義 的に考えてzsh対応っているんかな…sh,dash,ksh,bash対応で十分交換可能性担保できているんじゃないか?zshとかfishまで対応する必要ってあるか?#!/bin/zshとか想定する必要あるの? どうなんだろう…
2017-02-01 23:28:51いや,zshの対応いらないんだったら,コマンドの有無の判定ももっと短くかける。command -vじゃなくて,hashでやる。 hash getconf 2>&-。command -vみたいにフルパスは取得できないので,本当に有無の判定だけ。 だけど短いしaliasも対応できる。
2017-02-01 23:30:50@BRAVEMANLBRID 意見ありがとうございます。 *zshしか* ない環境はほぼないと思います。少なくても標準のログインシェルやshはbashです。 どこまでカバーするかなんです。簡単ならzshもカバーしてよいのですけど。getconfがない環境を想定すべきか,悩ましい…
2017-02-01 23:35:48div_jpさんの一覧表を見る限りだとgetconfは9のOSに存在しているので,存在を前提としてもよさそうに見える。 でも実際にgetconfの内,SOHOのサーバーとかあるのをみてしまったからな… github.com/div-jp/POSIX/b…
2017-02-01 23:40:04たとえ,POSIXへの準拠度の低いマシンがあったとしても,初期化の部分は落ちずに通用できるようにしたいという思いが… BusyBoxもそんなに悪くないんじゃないかなと。 たしかにgetconfなんてそんなに普段使わないから外されているのは理解できる。
2017-02-01 23:41:58たぶん,コマンド一覧で重要になるのは,サーバー向けOSだと思う。サーバー用途はデスクトップと異なり,パッケージングが厳選されている。ユーザーが普段使うようなコマンドがない。 サーバー向けOSでのgetconfのシェアが判断の鍵かな。
2017-02-01 23:44:05初期化はもう完璧だろうと思っていたから,まさかgetconfのないOSに出くわすとは思わなかった…くっそー。 そうこうしている内にこんな時間か…明日の準備して寝るか… うーん。どうすべきか,もやもやする…
2017-02-01 23:46:25PATHの初期化もっと短くできた。 command -pvで正しいgetconfのフルパスとれるからそれを実行しても大丈夫 export PATH="$($(command -pv getconf || echo :) PATH):$PATH" これならLC_ALLと1行でかける
2017-02-01 23:53:35@senopen zshをどうするかという問題。#!/bin/zsh -p みたいにシバンの起動オプションでPOSIX互換にできてちゃんと動作するならzshもカバーできたと考えよう。 本文にsetで書くとzsh以外に干渉するからだめ。 zshについても調べないとだめになったな…
2017-02-02 00:33:55@senopen というか、POSIXのcommandのページみると、-pvのグループオプションは有効。なんでzshだけ実装間違えてるんだよ…意味不明。もー。
2017-02-02 00:36:26emulate shとかzshに実体を貼ったshのシンボリックリンクでzshのshエミュレーションモードができた。けれど解決しなかった。 command -pv :がやっぱりだめ。zsh組み込みのcommandでは-pvがPOSIX違反。 zsh対応は諦めるのが早いかな…
2017-02-02 20:54:16zshの代わりにfishというのが使えたらいいかと思って,ソースからコンパイルしたのだけど,なんかうまく起動できない…exportコマンドがないとかわざとPOSIX非準拠しているし,/bin/shの実体になることはないか。
2017-02-02 21:09:04@senopen POSIX原理主義というけれど、POSIX規格にだけ固執してもしかたない。なぜならシバン自体#!/bin/shがPOSIX範囲外だから。/binがPOSIX未定義。有効なのはFHSのおかげ。 だから、POSIX非準拠だけを理由に切り捨てるのはなんか違う気がする
2017-02-02 00:46:42BusyBox調査
@senopen getconfの有無は、たぶんBusyBoxの採用可否とリンクしている気がする。BusyBoxを採用しているディストリビューションを調べたほうがいいか。
2017-02-02 08:02:56.@senopen BusyBoxは、互換性や持続性に配慮する余裕がない程にリソース制限のきつい環境向けの製品ゆえ、時空を超えた互換性を目指すPOSIX原理主義とはもともと目指す方向が違うと思うがな。だが、それでも両者の両立を図り、一定の成果を収められるなら、とても興味深いぞ。
2017-02-02 11:40:35.@senopen BusyBoxと同様なものにcrunchgenがある。しかしこちらは収録コマンドをユーザが自由に選択できるので、もしcrunchgenを採用するサーバがあったら、それこそどうしようもないのだがな。
2017-02-02 12:08:45@shellshoccarjpn ありがとうございます。 BusyBox自体、名前や存在は知っていましたが、どれくらいの頻度でバージョンアップしているか、どれくらい使われているか、POSIXへの準拠度など、中身はほとんどしりませんでした。 まずはどんなものか調べて検討してみます。
2017-02-02 12:32:52@senopen BusyBoxを採用している製品。けっこうある。 busybox.net/products.html 組み込みLinuxでの標準か。 たぶんAndroidもこれ使えるのだろう。 対応できたほうがいい気がするな。うーむ monoist.atmarkit.co.jp/mn/articles/08…
2017-02-02 21:23:18