2017-01-04 17 views
1

私は自分のマシンに座って特定のフォルダ内のファイルを待ち受け、次にアプリケーションを起動する関数を実行するスクリプトを作成しようとしています。以下のコードでは、 "java -jar Minecraft.jar"という行を除いてすべてが実行されます。私は間違いがない。私はNotifyステートメントから通知を参照します。他の誰かが私にある方向性を与えることができたら、私はそれを高く評価します。 Bash関数の一部がLinux上で実行されない

はありがとう

コード:

#!/bin/bash 

Launch_Minecraft() { 
echo "Starting Minecraft..." 
cd .. & 
cd Games & 
cd Minecraft & 
notify-send "Starting Minecraft" 
java -jar Minecraft.jar & 
rm /home/MyFolder/Dropbox/Alexa/launchminecraft.txt & 
cd /home/MyFolder/Desktop 
} 

for ((; ;)) 
do 
    [ -f /home/MyFolder/Dropbox/Alexa/launchminecraft.txt ] && Launch_Minecraft|| echo "Listening... [ hit CTRL+C to stop]" 
done 

答えて

1

は、なぜあなたは&と、バックグラウンドですべてのコマンドを実行していますか?それは問題のようです。

+0

これは私の問題かもしれません。私は、bashの "&"記号が操作を実行し、アプリケーションが終了するのを待つのではなく続けることを理解していました。この例では、ゲームを終了して続行するのを待つ代わりに、ゲームを開始してスクリプトを続行したいと考えています。 –

+3

これは間違いありませんが、作業ディレクトリを変更しようとしても、その変更が有効になるのを待たずに移動しています。 (また、バックグラウンドは別のプロセスで実行されるので、作業ディレクトリの変更はそれ以降のコマンドには適用されません) – chepner

2

codeforester is right - &はbashで「これを実行してください」という意味ではなく、「待たずに次のコマンドに移動」を意味しません。 java行を除くすべての行から末尾の&を削除してください。さらに運が必要です。

その他の思考は:

  • for ((;;))while :またはwhile trueに置き換えることができます。
  • [ ]の代わりに[[ ]]を使用します.bashには独自の組み込みテストがあります。
  • yが失敗した場合x && y || zは予期しない動作を持つことができます*代わりに、試してみてください。

    while true 
    do 
        echo "Listening... [ hit CTRL+C to stop]" 
        [[ -f /home/MyFolder/Dropbox/Alexa/launchminecraft.txt ]] && Launch_Minecraft 
        sleep 1 # or something to prevent this script from eating all your CPU cycles! 
    done 
    

*注:xが成功したとyが失敗した場合x && y || zでは、zが実行されます、ではないかもしれませんあなたは何が起こると思いますか?たとえばtrue && false || echo nxtrue)が成功してもnを出力します。

+0

@chepnerやcxw(複数のユーザを引用することはできません)のような人々の優しさが大好きです。私はここで新しいです、そして、皆さんがそんなに貢献するのを見て喜びです!あなたは私にインスピレーションを与えます。 – codeforester

+1

@codeforester賛辞をいただきありがとうございます!あなたがまだ知っていない場合(あなたが持っている可能性があります)、私の答えに自動的に返信するので、あなたは@ cxwを許可しません:)。私がSOから始めたときにそれを理解するまでには、しばらく時間がかかりました! – cxw

関連する問題