如何解决在 bash 脚本的 ssh 命令中使用双引号内的转义字符
每次登录远程系统时,我都想运行一些命令。无法在远程的 .bashrc
中存储命令。
在 ssh 的 bash 脚本中,在引号内转义转义字符的正确方法是什么? 如何在新行中编写每个命令?
我的剧本
#!/bin/bash
remote_PS1=$'\[\033[01;32m\]\u@\[\033[03;80m\]\h\[\033[00m\]:\[\033[01;34m\]\!:\w\[\033[00m\]\$ '
ssh -t "$@" 'export SYSTEMD_PAGER="";' \
'export $remote_PS1;' \
'echo -e "set nocompatible" > /home/root/.vimrc;' \
'bash -l;'
没有用。
解决方法
在双引号内转义转义字符并在远程服务器上运行它们对我来说太复杂了:)
相反,我为远程编写了一个 remoterc
文件和一个小的 remotessh
脚本。
在 remotessh
中,首先我在远程机器上复制 remoterc
并以交互方式使用 bash
文件运行 remoterc
命令。
远程:
#!/bin/bash
SYSTEMD_PAGER=""
PS1="\[\033[01;32m\]\u@\[\033[03;80m\]\h\[\033[00m\]:\[\033[01;34m\]\!:\w\[\033[00m\]\$ "
echo -e "set nocompatible" > /home/root/.vimrc
远程:
#!/bin/bash
scp remoterc "$1":/home/root/
ssh "$1" -t "bash --rcfile remoterc -i"
它有效:)
,您可以使用 Bash 的 printf %q
。
根据help printf
:
%q
以可重用为 shell 输入的方式引用参数
看下面的例子:
$ cat foo.sh
ps1='\[\033[1;31m\]\u:\w \[\033[0m\]\$ '
ps1_quoted=$( printf %q "$ps1" )
ssh -t foo@localhost \
'export FOO=bar;' \
"export PS1=$ps1_quoted;" \
'bash --norc'
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。