我有两个脚本(一个ksh和其他Perl),另一个调用另一个脚本。当有人意外地在文件名中输入空格并将其报告为错误时(仅当文件不存在时),我必须处理这种情况。它看起来像p.sh使用$*
传递/转发所有参数到p.pl并不像它们应该的那样处理引用的参数?任何想法如何解决这一问题?我们只想说文件名中也可以输入多个空格。
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!
这是我尝试修复的最后两个场景。谢谢。
答案 0 :(得分:1)
要保留传递给脚本的空格,请使用$@
参数:
/tmp/p.pl "$@" 1>/tmp/chk.out 2>&1
引号必须确保p.pl
看到引用的空格。