我想在我的 .bashrc
中放置一个简单的 bash
函数,它通过接受 'source' 参数和 ' destination' 参数,到目前为止都尝试过
function send() {
eval "scp $1 user@annoyingly-long-server-name:$2"
}
和
function send() {
scp $1 user@annoyingly-long-server-name:$2
}
...但是当我将以上任何一个称为 la
send file.txt ~/
我收到错误 scp: home-directory-on-remote-machine: Operation not supported
。在回显每个参数之后,代字号似乎在评估之前扩展到远程机器的主目录。我怎样才能避免这种情况?
最佳答案
首先,您可以使用 ssh-keys 来防止输入密码。
在你使用你的函数之前只做一次:
ssh-copy-id remoteHostName
对于 ssh 使用 key 而不是密码被认为更好,对于 scp 也是如此。
其次,您不需要eval
。
function send() {
scp "$1" user@annoyingly-long-server-name:"$2"
}
最后,您需要使用显式路径名:
send foo /home/luke/foo
因为 ~
是一些没有正确计算到 /home/luke/
的方法。
更新,旁白:
如果你编写函数 send
的动机真的是 annoyingly-long-server-name
你应该了解 /home/luke/.ssh/配置
。
在这个文件中你可以创造奇迹:
Host a-nicer-alias
Hostname stupid-host-name.verylongdoamin.com
User luke
然后你可以简单地做 scp a-nicer-alias
关于linux - 在 scp 的简单函数包装器中使用代字号 ~ 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45317559/