我正在尝试通过在bashrc中创建一个SCP(安全副本)功能来使我的生活更轻松:
scpcloud() {
CP_STR="$(whoami)@${REMOTE_HOST}:"
CP_STR+=$1
CP_STR+=" $2"
scp $CP_STR
}
理想情况下,我应该可以输入类似scpcloud ~/myfileonremote.png myfileonlocal.png
的内容。
但是,由于Bash扩展了特殊字符,因此使用中出现了问题:
scpcloud ~/myfileonremote.png myfileonlocal.png
成为:
kenny@remote.host.com:/Users/kenny/myfileonremote.png myfileonlocal.png
这不是我想要的。我希望将波浪号(以及其他任何Bash单词扩展)直接发送到远程主机。因此理想情况下,我的命令应变为:
kenny@remote.host.com:~/myfileonremote.png myfileonlocal.png
我试图通过引用的方式纠正此问题:
CP_STR+='$1'
CP_STR+="$1"
无济于事。有解决方案可以做到这一点吗?
答案 0 :(得分:1)
不要建立一个字符串(或至少一个单个字符串),不要期望通过分词将其正确地分为两个参数。
scpcloud() {
scp "$(whoami)@$REMOTE_HOST:$1" "$2"
}
此外,您需要引用波浪号,因为shell会在scpcloud
甚至运行之前将其扩展。
scpcloud "~/myfileonremote.png" myfileonlocal.png
答案 1 :(得分:1)
尝试转义波浪号。
scpcloud \~/myfileonremote.png myfileonlocal.png