シェルスクリプトにシバン(#!/bin/sh)はないほうがいいという説
まあ,2行になるけどいいか。たぶんいずれAndroid対応いれることにするだろうし。 getconfがない時点で,ある程度特殊な環境を考慮している。そこまでやるなら,徹底的にやってもいいよなという話。そうでないなら,FHSの/bin:/usr/binもなくてもよくて1行でいい
2017-02-04 16:42:25PATH変数の初期化。 getconfがない環境や,set -eを考慮するかで変わる。 ${PATH:+:}はやる意味がないことに気づいた。なぜなら,PATHか0文字の場合カレントを探すから意味がない。 set -eの前に書くのがいいんじゃないかな。どうだろう。1.がいい感じ? pic.twitter.com/MYZSxaTZtG
2017-02-25 00:22:22Android対応
そういえば,会社のサーバーはNASサーバーだった。NASサーバーは組み込み機器か。 手元のアンドロイドスマホ。/system/bin/shがあった。FHSには準拠していないからさすがに/bin/shは無理か。POSIX原理主義でAndroidにも進出できたら面白いだろうけどな。
2017-02-02 22:15:10@col_richie null, urandom, zeroはありました。ベースはlinuxなので、一部例外はあるけれど、基本的にはposixやfhsに準じているような印象です。
2017-02-03 15:57:382015-10-05のAndroid 6.0からtoolboxからtoyboxにコマンドが変わったらしい。だとしたら,BusyBoxはやはり重要。 Android (operating system) - Wikipedia - en.wikipedia.org/wiki/Android_(…
2017-02-02 23:24:16@senopen android terminal emulatorをインストールして、少し試した。shはmkshで、getconfはなかった。 恐れていたことが現実になるか…。androidでも動かすならシバンはあってはならない。アンドロイドに/bin/shはない。
2017-02-03 12:28:27@senopen iPhoneとかiPadのiOSはどうなんだろう?/bin/shってあるのかな?持ってないから、誰か試してほしいな。 もしなかったら、シバンは書くべきでないという結論になりなんだけど。 帰宅したら、アンドロイドでシェルスクリプト動くか確認しよう。
2017-02-03 12:32:57root化
以下の内容のhi.shを作ってみた。 #!/bin/sh ps -p $$ なんと,./hi.shだと起動できなかった。not foundとでた。たぶんroot化しないと無理なんだろうな。 どのみに,/bin/shはないから無理だと思うのだけど。
2017-02-03 22:19:04うん。root化していないとアクセス権限でファイル名で実行できない。 shに与えて実行することはできる。けどこれだとシバンの機能をみれない。 [Q] How to write a shell script for android … forum.xda-developers.com/showthread.php…
2017-02-03 22:33:045年前に購入した初めてのスマホIS05をroot化してShebangが有効化どうか確認しよう。これでshebangを書くべきかどうか判断する。今日はこれができたらよしとする。
2017-02-03 23:56:20@senopen 興味があるかどうかわかりませんが、例えば、supersu(権限管理アプリはこれ以外にもありますが)の内部的な仕組みを見ると、その多くはshell scriptで書かれています。また、root権限でbusyboxをインストールするアプリもあり色々できます
2017-02-04 00:23:40@senopen busyboxをインストールする場所は指定できますが、androidでは一般的に/system以下を選択することが多いです
2017-02-04 00:24:53@senopen busyboxさえ入れば、chrootでlinuxのイメージを使えるので、それをやってみるとAndroidの内部的な仕組みがどうなってるのかの理解に役立つかもしれません、mount /sdcardなど
2017-02-04 00:27:02@senopen android chroot {arch, gentoo}などで検索して出てきたスクリプトなどを読んでみると良いかもしれません
2017-02-04 00:29:04@syui__ ありがとうございます。お詳しいのですね。内部はシェルスクリプトで書かれているものがけっこうあるのですね。 アンドロイドは奥が深そうなので,シェルスクリプトのシバンの解釈がどうなってるか?その1点だけを確認するために,root化して実行して確認したいなと思ってます。
2017-02-04 00:43:03@syui__ ええ。それを確認したいのです。 POSIX規格を読むと,シバンがない場合は,shで起動されるとあるのですよ。つまり,シバンを書かないほうが可搬性が高いという疑惑がありまして,これを確認したいのです。 myfuturesightforpast.blogspot.jp/2017/01/what-i…
2017-02-04 00:46:10過去にPOSIX規格におけるShebangについてまとめた記事を投稿していた(What is shebang (#!/bin/sh) in POSIX shell script)
POSIXでは,シバンがなければ,sh
で起動されると明記されている。
その他,過去にシバンに可搬性があるかどうかという議論がなされていた。
POSIXにおけるShebangの解釈についてのシェルショッカーとの議論まとめ - Togetterまとめ
このときは,POSIXでsh
が#!
から始まるファイルを読み込んだときの挙動がunspecifiedだったので,シバンには可搬性はないという結論だった。
@senopen 元はlinuxカーネルが使われてるので同じだと思います。ただ、root化しないと広い範囲でのスクリプトの実行はできなくなってるでしょうね。selinuxの影響もあるかもしれませんし。
2017-02-04 00:46:13@syui__ Android Terminal Emulator上でechoコマンドで,ファイル名で起動しようとしたところファイルがないといわれてしまいました。 SELinuxはよくわかりませんが,標準だと権限が厳しいみたいで,root化しないと無理なのかなと思い現在挑戦中です
2017-02-04 00:52:56