[英]Using escape characters inside double quotes in ssh command in bash script
每次登錄遠程系統時,我都想運行一些命令。 在遠程的.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;'
沒用。
Escaping 雙引號內的轉義字符並在遠程服務器上運行它們對我來說太復雜了:) 相反,我為遠程和一個小的remotessh
腳本編寫了一個remoterc
文件。 在remotessh
中,首先我在遠程機器上復制remoterc
並使用該remoterc
文件交互地運行bash
命令。
遠程:
#!/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
遠程SSH :
#!/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'
結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.