无法使用perl执行包含括号的ssh命令:“意外标记'('附近的语法错误”

oknrviil  于 2023-01-02  发布在  Perl
关注(0)|答案(1)|浏览(169)

如果我从命令行运行此命令,它将在远程服务器上按预期工作:

ssh admin@example.com "docker exec -it -d tasks_live_work_ec2_test_server /bin/sh -c \"/usr/bin/nvim -c 'silent! call SetupInstantServer()'\""

但是,如果我尝试从Perl脚本执行它,我会得到错误:
x一个一个一个一个x一个一个二个x
用反斜杠转义括号可以抑制错误,但是vim中的SetupInstantServer函数永远不会被调用。

5fjcxozz

5fjcxozz1#

使用2 here-doc,我会做什么:

#!/usr/bin/perl

system<<PerlEOF;
    ssh admin\@example.com<<ShellEOF
        docker exec -it -d ${image_name}_server /bin/sh -c "
            /usr/bin/nvim -c 'silent! call SetupInstantServer()'
        "
ShellEOF
PerlEOF

您可以决定在**'HereDoc'**上添加引号,以防止shell扩展或需要转义@
检查perldoc perlop#引号和类引号运算符

相关问题