アタッチされた外付けドライブをマウントし、マウントされたパスをテキストファイルに書き込むだけのこのスクリプトがあります。tinyCOreのターミナルからこのスクリプトを実行すると、問題なく動作します。以下は、スクリプトの実行に使用しているコードです。このコードは、アプリケーション全体でマウントやその他の目的に使用していますが、作成する必要のあるコードはありません。
コード:
Process p = Runtime.getRuntime().exec(" sh /home/abc/mnt-ddc.sh");
p.waitFor();
スクリプトを配列として使用しようとしましたが、役に立ちませんでした。クイックヘルプをいただければ幸いです。ありがとう。
UPDATEスクリプトがJavaから実行されると、何も起こらず、例外もスローされず、何も起こりません。私は以下に答えたすべての方法を試しましたが、うまくいきませんでした。
mnt-ddc.sh
#!/bin/sh
blkid -s LABEL | grep ddc- > ddc.txt # Get DDC device name and label and write to ddc.txt
perl -pi -e 's/ LABEL="//g' ddc.txt # Remove text "ddc- from ddc.txt
#perl -pi -e 's/ LABEL="ddc-//g' ddc.txt # Remove text "ddc- from ddc.txt
perl -pi -e 's/" //g' ddc.txt # Remove left over text " from ddc.txt
while IFS=: read dev label # start loop and read device name to $dev and LABEL to $label
do
if mount | grep $dev; then
echo -e "Already mounted"
else
if [ ! -d /mnt/$label ]; then
echo -n "Creating mount point..."
sudo mkdir /mnt/$label
fi
echo -n "Mounting......"$label
sudo mount $dev /mnt/$label
echo
if [ "$?" != "0" ]; then
echo "Mount failed. Exiting."
echo "" > ddc.txt
exit
fi
fi
done < ddc.txt
「sh」の前のスペースに気づきましたか?なぜ新しいシェルをスポーンするのですか?スクリプトを直接実行可能にし(例chmod +x /home/paftdl/NavData/mnt-ddc.sh
)、それを呼び出すだけです-
Process p = Runtime.getRuntime().exec("/home/paftdl/NavData/mnt-ddc.sh");
InputStream is = p.getInputStream(); // Let's print what we get.
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加