linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本
我覺得我在這里似乎遺漏了一些明顯的東西,但是我似乎無法弄清楚發生了什么.我有一個從C代碼調用的perl腳本.腳本參數是這樣的:
my_script "/some/file/path" "arg" "arg with spaces" "arg" "/some/other/file"
當我在Windows中運行它時,Perl正確地將其標識為5個參數,而當我在SunOS Unix計算機上運行它時,它標識為8,將帶有空格的arg拆分為單獨的args.
不知道它是否有任何區別,但是在Windows中,我像這樣運行它:
perl my_script
在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應用程序運行,因此不需要任何更復雜的事情.
解決方法:
想必
system("my_script \"/some/file/path\" \"arg\" \"arg with spaces\" \"arg\" \"/some/other/file\");
導致所有內容都經過重擊(因為需要解釋shebang行,吃掉您傳遞的引號).再次,大概可以通過直接調用perl而不是依靠shell來找到它來避免該問題(盡管如果路徑上的perl與shebang線上提供的perl不同,則可能會出現問題).
更新:
鑒于您:
char *argument = "\"arg1\" \"arg2\" \"arg3 with spaces\" \"arg4\" \"arg5\"";
您可能要嘗試:
char *argument = "\\\"arg1\\\" \\\"arg2\\\" \\\"arg3 with spaces\\\" \\\"arg4\\\" \\\"arg5\\\"";
另一個更新:
感謝您接受我的回答,但是,我的整個理論可能是錯誤的.
我在GNU bash中嘗試了上述參數的雙反版本,版本為4.0.28(2)-release(i686-pc-linux-gnu),但最終通過了
[sinan@kas src]$./t
'"arg1"'
'"arg2"'
'"arg3'
'with'
'spaces"'
'"arg4"'
'"arg5"'
而最初的論點就像一個魅力.我對此有些疑惑.也許SUN上的外殼不是bash,或者可能正在發生其他情況.
標簽:linux,perl
來源: https://codeday.me/bug/20191024/1920458.html
總結
以上是生活随笔為你收集整理的linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux共享文件丢失,【干货分享】li
- 下一篇: linux ssh命令 带密码,[命令]