Ssh 无论shell如何,我如何返回精确的格式?
在尝试编写脚本时,我发现了一个关于Ssh 无论shell如何,我如何返回精确的格式?,ssh,sh,zsh,cat,Ssh,Sh,Zsh,Cat,在尝试编写脚本时,我发现了一个关于cat的有趣问题。如果在命令行中执行以下操作,则一切正常: var=$(ssh user@server "cat /directory/myfile.sh") echo $var > ~/newfile.sh 这是可行的,我有一个具有所有正确格式的脚本文件,可以运行它。但是,如果我在脚本中执行完全相同的操作: #!/bin/sh var=$(ssh user@server "cat /directory/myfile.sh") echo $var &g
cat
的有趣问题。如果在命令行中执行以下操作,则一切正常:
var=$(ssh user@server "cat /directory/myfile.sh")
echo $var > ~/newfile.sh
这是可行的,我有一个具有所有正确格式的脚本文件,可以运行它。但是,如果我在脚本中执行完全相同的操作:
#!/bin/sh
var=$(ssh user@server "cat /directory/myfile.sh")
echo $var > ~/newfile.sh
文件被回车符和奇怪的格式弄乱了
有人知道为什么会这样吗?我的目标是最终从服务器中提取脚本,并在我的机器上本地运行它
编辑
我现在知道这是因为我调用了#/bin/sh
在我的shell脚本中。命令行之所以有效,是因为我使用的是zsh
,它保留了格式
有没有一种方法可以在不考虑shell的情况下返回结果?正如您所发现的,zsh默认情况下是关闭分词的,但是在
sh
、bash
等中是打开的。您可以通过引用变量来防止所有shell中的分词:
echo "$var" > ~/newfile.sh
请注意,默认情况下,
echo
会在其输出中附加一个换行符,您可以使用-n
/bin/sh
抑制该换行符(在大多数echo
实现和内置程序上),该换行符可能与您正在运行的shell不同。特别是在Debian及其衍生产品(Ubuntu,Mint)上,/bin/sh
是Debian Almquist Shell的破折号,而不是bash。@larsmans很有趣。。。我的原生shell是zsh
,因此您认为这可能是导致结果不同的原因吗?我从未使用过zsh,但这仍然是我最好的猜测。检查echo
是否内置在Zsh中。@larsmans事实上,这是shell中的差异。如果我将shell更改为bash
或sh
,我会遇到格式问题,因为我的shell使用的是#/bin/sh
它正在取消格式设置。无论使用何种shell,是否有办法回显文件的确切格式?请尝试将echo
替换为/bin/echo
。