bash – 使用参数无法正常工作将程序提交到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 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" 从手册页:
-p设置似乎是用于别名,但我不确定为什么这会有用
因此,在您的情况下,launchctl将您的第一个参数视为要运行的脚本,但实际上正在运行您的脚本,因为您使用-p将其指定为可执行文件.如上所述,将脚本指定为arg 0,或者只删除-p规范并在其args之前包含脚本的路径. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |