我在 上有一个脚本server A
,我需要在 上运行该脚本server B
,但我不想将脚本复制到 上server B
。
我需要将文本文件作为参数传递给脚本
我该怎么做呢?
答案1
您可以简单地cat
使用脚本并将其传送到 ssh 会话:
cat /path/to/local/script.sh | ssh user@remote
这应该适用于大多数情况,但请注意,该脚本将由远程上的默认登录 shell 解释。如果脚本是为另一个 shell 编写的,则这将不起作用。
答案2
我个人发现的最好方法是进行 Base64、复制、解码然后运行。这可以确保 1) 您不需要创建文件并使其在远程主机上可执行,2) 您不会遇到编码或有趣字符的问题。您可以相当容易地将其扩展到解释语言(必须是一个独立的程序)。
cat script.sh | base64 | ssh user@host "base64 -d - | bash"
这有点像意大利面条,但概念就在那里。
答案3
而是使用函数!
将脚本转换为函数并使用参数传递它。
这样 :
ssh user@host -tq "function foo(){ echo $*;}; foo hello world"
但每次都编写一个函数作为参数是不切实际的。
为了使事情变得简单,创建一个有助于调用远程计算机上的本地函数的函数。
foo () {
echo "${@}"
}
bar () {
echo ${#}
}
ssh_func() {
ssh -tq user@host "function $(typeset -f ${1}); " ${2:+"${@:2}"};
# typeset -t (prints function's body chunk) to be sent with args
}
ssh_func foo hello world # this will call foo on remote machine
ssh_func bar hello world