简单的问题,我如何使用 sudo 测试文件是否存在Net::OpenSSH
?我真的很努力想弄清楚这一点,但没有结果。好的,我可以使用包装脚本,但这不是我想要的。
这是我的包装子。它大部分时间都可以正常工作,但它不是在测试文件?!
sub sudo {
my $f = shift;
my $h = shift;
my $cmd = shift;
my @out = $f->{ssh}->capture(
{ stdin_data => ["$f->{pwd}\n", @$h ] },
'/usr/bin/sudo','-Sk','-p','','--',
@{$cmd}
);
return \@out;
}
&sudo($f, [], ['test', '-e', '/user/local/bin/cmd', '&&', 'echo', '1', '||', 'echo', '0']); # <= fails
&sudo($f, [], ['test -e /user/local/bin/cmd && echo 1 || echo 0']); # <= fails too
... # arbitrary other $str/$array combinations ...
我知道,我不必 sudo check a cmd in /usr/local/bin
,这只是一个例子。当然,我也在&sudo()
. 如此简单的任务......我被困住了!
似乎我无法让命令串联工作:有一个extra argument &&
警告。潜艇总是返回undef
。
这是一个限制吗?这完全支持吗?使用
$f->{ssh}->capture('test -e /user/local/bin/cmd && echo 1 || echo 0');
工作正常,这就是我现在正在使用的。sudo
所以前面的附加应该不是那么大的问题......
任何人都可以帮忙吗?