用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
; 它将从docker
inheritance它的标准input,其标准input是文件句柄$fh
。
open my $fh, "|-", "docker exec --privileged '$c_name' tee -a /etc/bashrc"; printf $fh "PS1=$prompt\n"; close $fh;