2012-05-03 16 views
4

我發現LaunchCtl在使用'submit'協議時會跳過參數。將參數提交到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 

誰能幫我這個?有誰知道我應該做什麼,或者我誤解了什麼?

我還必須說,上面的小例子當然不是我正在處理的原始腳本。這只是更容易顯示我的問題。

請幫幫我!謝謝!

+0

你可以發佈你的實際腳本的相關部分?我可能會幫助我們明白爲什麼「ProgramArguments」的第一個元素看起來不會傳遞給script.sh。 – chepner

回答

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" 

從手冊頁:

提交-l標籤[-p可執行] [-o路徑] [-e路徑] - 命令 [參數]

-p設置似乎是走樣,雖然我不知道爲什麼,這將是有益的

- p程序不管接下來 的
什麼程序執行真 - 在提交子命令。

所以你的情況,launchctl是治療你的第一個參數爲要運行腳本,而是因爲你指定它與-p可執行真正運行腳本。如上所述,將腳本指定爲arg 0,或者只刪除-p規範,並在腳本之前包含腳本的路徑。

+0

所以基本上你說的是,手冊中的「命令」是指它自己的腳本? 我的意思是,在我的情況下,它的腳本..其他情況下,它可能是當然一行命令.... 謝謝你的幫助! – ppseprus