我对shell / bash脚本非常陌生,并且正在OSX上编写脚本来自动化一些繁琐的工作。我正在尝试使用来在远程主机上运行脚本的一部分ssh
。两台机器上都有一个通用脚本,我称之为ascript
。在两台计算机上,此脚本都在/ usr / local / bin中。
我知道我需要ascript
远程主机上的完整路径来像这样运行它:
ssh user@otherHost bash -c "/usr/local/bin/ascript --FlagToDoSomething"
但是,我发现--FlagToDoSomething
只有以以下方式在脚本中编写该代码才能正确运行:
ssh user@otherHost bash -c " /usr/local/bin/ascript --FlagToDoSomething"
(即,在开引号后需要换行),我在终端窗口中收到一条消息,说bash: -c: option requires an argument
,但其余部分继续运行,并且得到了期望的输出。如果我不这样做,我将获得输出,就像我刚刚键入ascript
并按Enter键(因此是用法信息)一样。
如果我删除bash -c
它,它可以正常工作,但我只是这样做,因为出于某种原因:ssh user@otherHost "output=$(/usr/local/bin/ascript --FlagToDoSomething; echo \$output)"
尝试在本地主机上运行此功能,这会导致一些时髦的输出。而且,在终止ssh连接之前,我需要在远程主机上运行多个命令。
谢谢!
ssh user@otherHost "output=$(/usr/local/bin/ascript --FlagToDoSomething; echo \$output)"
那该怎么办?$output
尚未设置,因为回声在内$(command substitution)
。
另外,$()
由外壳程序在双引号内进行扩展。这就是为什么它在本地运行。使用单引号避免出现这种情况。
也许你想要
output=$(ssh u@oh '/usr/local/bin/ascript --FlagToDoSomething')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句