我覺得我錯過了一些很明顯的東西,但我似乎無法弄清楚發生了什麼。我有一個我從C代碼調用的perl腳本。該腳本+論據是這樣的:帶有空格的命令行參數的Perl腳本
my_script "/some/file/path" "arg" "arg with spaces" "arg" "/some/other/file"
當我在Windows中運行它,Perl的正確識別爲5個參數,而當我跑了它在SunOS UNIX系統,它識別8,分裂ARG與將空格分隔成單獨的參數。
不知道這有什麼差別,但是在Windows,我運行它想:
perl my_script <args>
雖然在Unix中我只是運行它像上面顯示的可執行文件。
任何想法爲什麼Unix不正確管理該參數?
編輯:
下面是調用perl腳本代碼:
char cmd[1000];
char *script = "my_script";
char *argument = "\"arg1\" \"arg2\" \"arg3 with spaces\" \"arg4\" \"arg5\"";
sprintf(cmd, "%s %s >1 /dev/null 2>&1", script, arguments);
system(cmd);
這不正是它,因爲我多了幾分動態構建參數字符串,但是這是要點。
而且,這是我在讀的論點代碼:
($arg1, $arg2, $arg3, $arg4, $arg5) = @ARGV;
我知道這是可笑的幼稚,但該腳本只能從C應用程序運行,所以沒有什麼更復雜的應該要求。
請提供您在Unix中使用您的C代碼調用perl腳本的確切代碼。 – Steven 2009-08-12 18:26:59
請提供關於如何加載參數字符串的更多細節。我相信你的問題在於這個代碼。 – Steven 2009-08-12 18:57:50
我相當確信它不是......我把一些調試代碼放在那個會調用系統之前輸出該cmd,它完全是我最初發布的。 – Morinar 2009-08-12 18:59:08