簡體   English   中英

在 bash 腳本中的 ssh 命令中使用雙引號內的轉義字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM