2012-05-03 10 views
4

LaunchCtlは、 'submit'プロトコルを使用しているときに引数をスキップすることがわかりました。引数が正しくないlaunchctlへのプログラムの送信

私は、次のスクリプト(script.sh)している:私は、端末からscript.shを呼び出すと、それに引数を渡すに問題は

#!/bin/bash 
arg1="$1" 
arg2="$2" 
arg3="$3" 
arg4="$4" 
echo $arg1$arg2$arg3$arg4 
exit 1 

ありません。 LaunchCtlで同じことをすると、何かがうまくいかず、最初の引数が消えます。

launchctl submit -l MyUniqueScript -p ROOT/script.sh -o ROOT/out.txt -e ROOT/err.txt "abc" "def" "ghi" "jkl" 

私も、私はすぐそこにすべての私の引数を持っている私のプロセス

launchctl list MyUniqueScript 

をご確認ください。ターミナルはそれらをプリントアウトします。

{ 
"Label" = "MyUniqueScript"; 
"LimitLoadToSessionType" = "Background"; 
"OnDemand" = false; 
"LastExitStatus" = 256; 
"TimeOut" = 30; 
"Program" = "/Users/ROOT/script.sh"; 
"StandardOutPath" = "/Users/ROOT/out.txt"; 
"StandardErrorPath" = "/Users/ROOT/err.txt"; 
"ProgramArguments" = (
    "abc"; 
    "def"; 
    "ghi"; 
    "jkl"; 
); 
}; 

しかし、私はout.txtを中に持っていることはかなり台無しにされています

defghijkl 

よりもむしろ

abcdefghijkl 

誰もがこれで私を助けることはできますか?誰かが私が何をすべきか、あるいは何が間違っているのかを知っていますか?

上記の小さな例は、私が取り組んでいるオリジナルのスクリプトではありません。これは私の問題を示すのが簡単です。

私を助けてください!ありがとう!

+0

実際のスクリプトの関連部分を投稿できますか?私は "ProgramArguments"の最初の要素がscript.shに渡されないように見えるのを助けるかもしれません。 – chepner

答えて

4

あなたのlaunchctl構文が間違っています。最初の "引数" スクリプトへのパスでなければなりません:

launchctl submit -l MyUniqueScript -p ROOT/script.sh -o ROOT/out.txt -e ROOT/err.txt -- ROOT/script.sh "abc" "def" "ghi" "jkl" 

manページから:

は-lラベル[-p実行] [-oパス] [-eパス]を提出します - コマンド [引数] -p設定はそれが有用であろう、なぜ私はわからないものの、エイリアシングのためにあるように思われる

012提出するサブコマンドに -

- 本当にかかわらず 次のものの、実行するためにどのようなプログラムPプログラム

したがって、あなたのケースでは、launchctlは実行するスクリプトとして最初の引数を扱いますが、実行可能ファイルとして-pを指定しているため、実際にスクリプトを実行しています。上記のようにスクリプトをarg 0として指定するか、または-pの指定を削除し、その引数の直前にスクリプトへのパスを含めます。

+0

基本的にあなたが言っているのは、マニュアルの「コマンド」はそれ自身のスクリプトを指しているということですか? 私の場合、私の場合はそのスクリプトを意味します。他の場合はもちろん、1行のコマンドになる可能性があります.... 助けてくれてありがとう! – ppseprus

関連する問題