无论shell如何,我如何回退确切的格式?

时间:2013-06-26 19:33:25

标签: 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 > ~/newfile.sh

文件因回车和奇怪的格式而受损。

有谁知道为什么会这样?我的目标是最终从服务器捕获脚本并在我的机器上本地运行它。

修改

我现在知道发生这种情况是因为我在shell脚本中调用了#!/bin/sh。命令行有效,因为我正在使用zsh并且它保留了格式。

有没有办法收回结果而不管shell?

1 个答案:

答案 0 :(得分:1)

正如您似乎已经想到的那样,默认情况下,在zsh上关闭分词,但在shbash等处开启。您可以通过引用变量来阻止所有shell中的分词:

echo "$var" > ~/newfile.sh

请注意,默认情况下,echo会在其输出中附加换行符,您可以使用echo来抑制(在大多数-n实现和内置版本上)。