使用Perl Net :: OpenSSH通过命令串联来sudo测试文件是否存在

维克多·博根马斯(Viktor Bogenmaas)

一个简单的问题,如何使用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中检查cmd /usr/local/bin,这只是一个示例。当然,我也将结果“砍掉” &sudo()如此简单的任务...我被困住了!

看来我无法使命令串联工作:有extra argument &&警告。子总是返回undef

这是一个限制吗?完全支持吗?使用

$f->{ssh}->capture('test -e /user/local/bin/cmd && echo 1 || echo 0');

工作正常,这就是我现在正在使用的。因此sudo,前面的其他问题不应该太大。

有人可以帮忙吗?

斯拉文·雷齐奇

提供给sudo的命令的工作方式类似于perlsystem()exec()-的列表形式,即不使用任何shell。因此,任何shell元字符都喜欢&&||不会在这里工作。要解决此问题,请显式使用外壳程序:

sudo($f, [], ['sh', '-c', 'test -e /user/local/bin/cmd && echo 1 || echo 0']);

或者,而不是使用capture()您可以使用Net::OpenSSHsystem(),而不是,只是检查返回值-那么就没有必要使用&&||

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Perl Net :: SFTP :: Foreign获取与模式匹配的文件

来自分类Dev

使用Net :: OpenSSH将Perl文件传输到远程服务器

来自分类Dev

Perl:使用通配符检查文件是否存在

来自分类Dev

使用rspec测试Perl?

来自分类Dev

使用Net :: HTTP在Perl中发送POST

来自分类Dev

使用Perl的Net :: SSLeay获取整个证书

来自分类Dev

无法使用Net :: SSH:Perl登录

来自分类Dev

是否存在类似于.net SortedList或SortedCollection的Perl类或结构?

来自分类Dev

PERL Net :: DNS输出到文件

来自分类Dev

使用Perl检查目录是否存在

来自分类Dev

使用Perl合并XML文件

来自分类Dev

使用Perl解析日志文件

来自分类Dev

使用Perl写入Excel文件

来自分类Dev

Perl使用哈希读取文件

来自分类Dev

使用Perl读取XML文件

来自分类Dev

使用Perl写入Excel文件

来自分类Dev

使用 Perl 解析 XML 文件

来自分类Dev

使用文件句柄 perl 排序

来自分类Dev

在C#中通过SSH.NET在字符串中使用“ OPENSSH”私钥文件失败,并显示“无效私钥文件”

来自分类Dev

使用perl openssh传递命令服务器

来自分类Dev

Perl Net :: LDAP:使用当前登录进行身份验证

来自分类Dev

在Windows 10上使用Strawberry Perl安装Net :: Pcap

来自分类Dev

如何使用Net :: OpenSSH安全地写入远程文件

来自分类Dev

如何使用Net :: OpenSSH安全地写入远程文件

来自分类Dev

无法从crontab运行perl脚本以ssh登录Windows服务器(使用Net :: SSH :: Perl)

来自分类Dev

Perl:停止在Windows中使用Perl“系统”启动的命令

来自分类Dev

使用perl / PPR从perl文件中删除所有注释

来自分类Dev

Perl Net :: FTP包PASV命令未实现

来自分类Dev

Perl Net :: FTP包PASV命令未实现

Related 相关文章

热门标签

归档