正しくTogetter / min.tにログインできない不具合が発生中です。X側の修正をお待ちください(詳細はこちら)

シェルスクリプトにシバン(#!/bin/sh)はないほうがいいという説

職場のパソコンで作業用にシェルスクリプトを書いていた。PATH変数の初期化に使っていたgetconfコマンドがないことを発端に,getconfのない環境でのPATH変数の初期化から,Androidで動くシェルスクリプトについて議論が発展した。 その中で,Androidでも動くシェルスクリプトを書くためには,シバン(#!/bin/sh)を書いてはいけないという結論が得られた。 一連の議論を記録として残す。 続きを読む
10
前へ 1 ・・ 3 4 ・・ 10 次へ
. @senopen

まあ,2行になるけどいいか。たぶんいずれAndroid対応いれることにするだろうし。 getconfがない時点で,ある程度特殊な環境を考慮している。そこまでやるなら,徹底的にやってもいいよなという話。そうでないなら,FHSの/bin:/usr/binもなくてもよくて1行でいい

2017-02-04 16:42:25
. @senopen

PATH変数の初期化。 getconfがない環境や,set -eを考慮するかで変わる。 ${PATH:+:}はやる意味がないことに気づいた。なぜなら,PATHか0文字の場合カレントを探すから意味がない。 set -eの前に書くのがいいんじゃないかな。どうだろう。1.がいい感じ? pic.twitter.com/MYZSxaTZtG

2017-02-25 00:22:22
拡大

Android対応

. @senopen

そういえば,会社のサーバーはNASサーバーだった。NASサーバーは組み込み機器か。 手元のアンドロイドスマホ。/system/bin/shがあった。FHSには準拠していないからさすがに/bin/shは無理か。POSIX原理主義でAndroidにも進出できたら面白いだろうけどな。

2017-02-02 22:15:10
リッチー大佐の中の人 @col_richie

@senopen /dev/nullはある?AndroidやQTSには。(ついでに/dev/urandomも)

2017-02-03 15:41:49
. @senopen

@col_richie null, urandom, zeroはありました。ベースはlinuxなので、一部例外はあるけれど、基本的にはposixやfhsに準じているような印象です。

2017-02-03 15:57:38
. @senopen

2015-10-05のAndroid 6.0からtoolboxからtoyboxにコマンドが変わったらしい。だとしたら,BusyBoxはやはり重要。 Android (operating system) - Wikipedia - en.wikipedia.org/wiki/Android_(…

2017-02-02 23:24:16
. @senopen

@senopen android terminal emulatorをインストールして、少し試した。shはmkshで、getconfはなかった。 恐れていたことが現実になるか…。androidでも動かすならシバンはあってはならない。アンドロイドに/bin/shはない。

2017-02-03 12:28:27
. @senopen

@senopen iPhoneとかiPadのiOSはどうなんだろう?/bin/shってあるのかな?持ってないから、誰か試してほしいな。 もしなかったら、シバンは書くべきでないという結論になりなんだけど。 帰宅したら、アンドロイドでシェルスクリプト動くか確認しよう。

2017-02-03 12:32:57

root化

. @senopen

以下の内容のhi.shを作ってみた。 #!/bin/sh ps -p $$ なんと,./hi.shだと起動できなかった。not foundとでた。たぶんroot化しないと無理なんだろうな。 どのみに,/bin/shはないから無理だと思うのだけど。

2017-02-03 22:19:04
. @senopen

うん。root化していないとアクセス権限でファイル名で実行できない。 shに与えて実行することはできる。けどこれだとシバンの機能をみれない。 [Q] How to write a shell script for android … forum.xda-developers.com/showthread.php…

2017-02-03 22:33:04
. @senopen

5年前に購入した初めてのスマホIS05をroot化してShebangが有効化どうか確認しよう。これでshebangを書くべきかどうか判断する。今日はこれができたらよしとする。

2017-02-03 23:56:20
syui @syui__

@senopen 興味があるかどうかわかりませんが、例えば、supersu(権限管理アプリはこれ以外にもありますが)の内部的な仕組みを見ると、その多くはshell scriptで書かれています。また、root権限でbusyboxをインストールするアプリもあり色々できます

2017-02-04 00:23:40
syui @syui__

@senopen busyboxをインストールする場所は指定できますが、androidでは一般的に/system以下を選択することが多いです

2017-02-04 00:24:53
syui @syui__

@senopen busyboxさえ入れば、chrootでlinuxのイメージを使えるので、それをやってみるとAndroidの内部的な仕組みがどうなってるのかの理解に役立つかもしれません、mount /sdcardなど

2017-02-04 00:27:02
syui @syui__

@senopen android chroot {arch, gentoo}などで検索して出てきたスクリプトなどを読んでみると良いかもしれません

2017-02-04 00:29:04
syui @syui__

@senopen あと、supersuなどを操るには、selinuxの知識も必要になってくるかもしれません

2017-02-04 00:38:02
syui @syui__

@senopen supersuのために書かれるスクリプトも大抵は、シバンが!#/system..となっている気がします

2017-02-04 00:41:48
. @senopen

@syui__ ありがとうございます。お詳しいのですね。内部はシェルスクリプトで書かれているものがけっこうあるのですね。 アンドロイドは奥が深そうなので,シェルスクリプトのシバンの解釈がどうなってるか?その1点だけを確認するために,root化して実行して確認したいなと思ってます。

2017-02-04 00:43:03
. @senopen

@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だったので,シバンには可搬性はないという結論だった。

syui @syui__

@senopen 元はlinuxカーネルが使われてるので同じだと思います。ただ、root化しないと広い範囲でのスクリプトの実行はできなくなってるでしょうね。selinuxの影響もあるかもしれませんし。

2017-02-04 00:46:13
. @senopen

@syui__ Android Terminal Emulator上でechoコマンドで,ファイル名で起動しようとしたところファイルがないといわれてしまいました。 SELinuxはよくわかりませんが,標準だと権限が厳しいみたいで,root化しないと無理なのかなと思い現在挑戦中です

2017-02-04 00:52:56
前へ 1 ・・ 3 4 ・・ 10 次へ