用Docker,echo和Perl保存反斜杠

我使用perl以非常特定的方式调用docker exec来将信息回显到Docker容器中的/etc/bashrc中。

我有两个Perlvariables需要内插到echo命令中。 $c_name通常会有一个test1的值。 $net_ip的值通常为192.168.0.x

 my $prompt = '[\A][' . $c_name . '][' . $net_ip . '][\w]\n\$ '; `docker exec --privileged $c_name bash -c "echo -e 'PS1=$prompt' >> /etc/bashrc"`; 

这种联合努力是关于这个第四枪。 我也试过了

 `docker exec --privileged $c_name bash -c "echo -e PS1='[\A][$c_name][$net_ip][\w]\n\$ ' >> /etc/bashrc"`; 

这些都不起作用。 当我做docker exec -it test1 /bin/bash我得到一个如下所示的提示:

 bash: $: command not found [A][test1][192.168.0.13][w] 

与我的/etc/bashrc看起来如下所示:

 PS1=[\A][test1][192.168.0.13][\w] $ 

现在这是不正确的。 它看起来像没有逃脱\n\$这是一个问题。 但更重要的是,提示并不尊重“ \A和“ \w 。 即使当我从容器中inputsource /etc/bashrc ,我仍然从Bash得到上面的错误信息,并且我的提示保持不变。 是否有一些奇怪的与Docker和我不知道的PS1的交互?

我想要的是在我的/etc/bashrc的结尾我想要这行代码存在,逐字地,与插值的Perl $ vars:

 [\A][$c_name][$net_ip][\w]\n\$ 

在Perl解释之后,它可能看起来像:

 [\A][test_container][10.0.0.2][/home/docker] $ 

我也尝试了其他的尝试,例如试图用双\\例如[\\A]与上面反斜杠没有放在/ etc / bashrc中的结果相同。

请注意,当我在容器中,并执行:

 export PS1='[\A][test1][192.168.0.13][\w]\n\$ ' 

那么提示是正确的:

 [20:26][test1][192.168.0.13][/] # 

我会提示通过标准input提示docker ,而不是使用bash因为你是。 那么你只需要运行一个命令, tee -a /etc/bashrc ; 它将从dockerinheritance它的标准input,其标准input是文件句柄$fh

 open my $fh, "|-", "docker exec --privileged '$c_name' tee -a /etc/bashrc"; printf $fh "PS1=$prompt\n"; close $fh;