2012-03-28 8 views
3

すべてAndroidの組み込みデバイス上で実行シェルスクリプトファイル

私は、Android NDKのシステムコールを経由して.SHファイルを実行したいです。

​​コマンドをシステムコールで実行することができました。 shコマンドはシステムコールでは動作していません。

私はまた、アンドロイドにビジーボックスをインストールしました。以下のコードを使用しています。test.shにすべての許可を設定しました。

コード:

#include <stdlib.h> 
#include <stdio.h> 
#include <android/log.h> 
#include <jni.h> 

#define LOG_TAG "Demo" 

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) 


void Java_com_ndkdemo_NDKdemoActivity_systemcall(JNIEnv * env, jobject obj) { 

    int result; 

    result = system("cp /mnt/sdcard/test /Download"); 

    LOGD("result is cp %d", result); 

    result = system("sh ./test.sh"); 

    LOGD("result of test.sh is %d", result); 

} 

出力:

result is cp 0. 
result of test.sh is 0. 

ここで私はsystem("sh ./test.sh");に0を取得しますがtest.shスクリプトを開始しておりません。

コンソールでは出力"Hi"を取得できません。私はその作業罰金とコンソール上の指定された出力"Hi"よりプロンプトに直接コマンドを実行していた場合

test.shは

#!/system/bin/ 
echo "Hi" 

が含まれています。

この問題を理解するために私を助けてください。

おかげ

+0

FYI:あなたの最初の行は実行したいスクリプトを指しているはずですので、 '#!/ system/bin/sh'に設定する必要があります。 – Phil

答えて

2

をしようとする場合がありますか?デフォルトでは、アンドロイドはstdoutを/ dev/nullに送信します。

$ adb shell stop 
$ adb shell setprop log.redirect-stdio true 
$ adb shell start 

今、あなたはadb logcatであなたのエコーが表示されることがありますdocumentation次のコマンドを使用して(それがlogcatに表示されます)ログにstdoutとstderrをリダイレクトすることができますによると

+0

あなたの返信ありがとうございますが、これがなければシェルスクリプトを実行できませんか? – user1089679

+0

stdioリダイレクトを実行せずにシェルスクリプトを実行できますが、エコーは失われます。 – richq

0

あなたは「エコー」を参照してください期待しているsh -c /full/path/to/test.sh

+0

私はすでにこれを試しました – user1089679

+1

OK。 'echo'を使うことはこれをテストする最良の方法ではないかもしれないことに注意してください。' touch'かファイルを作る何かを試してみてください。あなたがNDKから始めるシェルの標準出力がどこにリダイレクトされるかは正確には分かりません。 –

関連する問題