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