gpt4 book ai didi

bash - 提交一个程序到 launchctl,参数不能正常工作

转载 作者:行者123 更新时间:2023-11-29 09:13:26 24 4
gpt4 key购买 nike

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

我有以下脚本 (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

谁能帮我解决这个问题?有谁知道我应该做什么,或者我错了什么?

我还必须说明,上面的小示例当然不是我正在处理的原始脚本。这更容易显示我的问题。

请帮帮我!谢谢!

最佳答案

您的 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 executable] [-o path] [-e path] -- command [args]

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

-p program
What program to really execute, regardless of what follows the -- in the submit sub-command.

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

关于bash - 提交一个程序到 launchctl,参数不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com