加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 使用参数无法正常工作将程序提交到launchctl

发布时间:2020-12-15 21:04:59 所属栏目:安全 来源:网络整理
导读:我发现,LaunchCtl在使用’submit’协议时会跳过参数. 我有以下脚本(script.sh): #!/bin/basharg1="$1"arg2="$2"arg3="$3"arg4="$4"echo $arg1$arg2$arg3$arg4exit 1 当我从终端调用script.sh时,将参数传递给它是没有问题的. 当我通过LaunchCtl做同样的事情
我发现,LaunchCtl在使用’submit’协议时会跳过参数.

我有以下脚本(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之前包含脚本的路径.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读