Bash 提交程序以启动参数不正确的CTL

Bash 提交程序以启动参数不正确的CTL,bash,osx-lion,launchd,Bash,Osx Lion,Launchd,我发现,LaunchCtl在使用其“提交”协议时会跳过参数 我有以下脚本(script.sh): 当我从终端调用script.sh时,向其中传递参数没有问题。 当我通过LaunchCtl做同样的事情时,出现了一些错误,第一个参数消失了 launchctl submit -l MyUniqueScript -p ROOT/script.sh -o ROOT/out.txt -e ROOT/err.txt "abc" "def" "ghi" "jkl" 我甚至检查了我的流程 launchctl l

我发现,LaunchCtl在使用其“提交”协议时会跳过参数

我有以下脚本(script.sh):

当我从终端调用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
有人能帮我解决这个问题吗?有人知道我应该做什么,或者我错了什么吗

我还必须指出,上面的小例子当然不是我正在编写的原始脚本。这更容易说明我的问题


请帮帮我!谢谢

您的launchctl语法错误。第一个“参数”应该是脚本的路径:

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

提交-l标签[-p可执行文件][-o路径][-e路径]--命令[args]

-p
设置似乎是用于别名的,但我不确定为什么这会有用

-p节目
不管接下来发生什么,真正要执行的程序是什么 提交子命令中的--


因此,在您的例子中,launchctl将您的第一个参数视为要运行的脚本,但实际上是在运行您的脚本,因为您使用
-p
将其指定为可执行文件。如上所述,将脚本指定为arg 0,或者只需删除
-p
规范,并在其args之前包含脚本的路径。

您可以发布实际脚本的相关部分吗?我可能会帮助我们了解为什么“ProgramArguments”的第一个元素似乎没有传递给script.sh。那么基本上,您是说手册中的“command”指的是脚本本身?我的意思是,在我的情况下,这是一个脚本。。在其他情况下,它当然可以是单行命令。。。。谢谢你的帮助!
launchctl submit -l MyUniqueScript -p ROOT/script.sh -o ROOT/out.txt -e ROOT/err.txt -- ROOT/script.sh "abc" "def" "ghi" "jkl"