4

「送信」プロトコルを使用する場合、LaunchCtl は引数をスキップすることがわかりました。

次のスクリプト (script.sh) があります。

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

ターミナルから script.sh を呼び出すと、引数を渡すことに問題はありません。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

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

もちろん、上記の小さな例は、私が取り組んでいる元のスクリプトではないこともお伝えしておく必要があります。これは、私の問題を示すのが簡単です。

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

4

1 に答える 1

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"

マニュアルページから:

submit -l label [-p 実行可能] [-o パス] [-e パス] --コマンド[args]

設定はエイリアシング用の-pようですが、なぜそれが役立つのかわかりません

- p program
サブミット サブコマンドの -- の後に何が続くかに関係なく、実際に実行するプログラム。

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

于 2012-05-03T16:42:50.117 に答える