我有两个脚本(一个 ksh 和另一个 Perl),一个调用另一个。当有人不小心在文件名中输入空格并将其报告为错误时(仅当文件不存在时),我必须处理这种情况。看起来用于$*
将所有参数传递/转发给 p.pl 的 p.sh 没有按应有的方式处理带引号的参数?任何想法如何解决这一问题?假设一个人也可以在文件名中输入多个空格。
p.sh:
#!/usr/bin/env ksh
/tmp/p.pl $* 1>/tmp/chk.out 2>&1
print "Script exited with value $?"
print "P.PL OUTPUT:"
cat /tmp/chk.out
exit 0
p.pl:
#!/usr/bin/perl -w
use Getopt::Std;
getopts ("i:", \ %options);
if ($options{i} && -e $options{i}) {
print "File $options{i} Exists!\n";
}
else {
print "File $options{i} DOES NOT exist!\n";
}
测试用例(当系统上有一个实际文件'/tmp/a b.txt'(其中有一个空格)时):
[test] /tmp $ p.pl -i /tmp/a b.txt
File /tmp/a DOES NOT exist!
[test] /tmp $ p.pl -i "/tmp/a b.txt"
File /tmp/a b.txt Exists!
[test] /tmp $ ./p.sh -i "/tmp/a b.txt"
Script exited with value 0
P.PL Check OUTPUT:
File /tmp/a DOES NOT exist!
[test] /tmp $ ./p.sh -i "/tmp/ a b.txt"
Script exited with value 0
P.PL Check OUTPUT:
File /tmp/ Exists!
这是我试图修复的最后两个场景。谢谢你。