0

在尝试编写脚本时,我发现了一个有趣的问题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并且它保留了格式。

不管外壳如何,有没有办法恢复结果?

4

1 回答 1

1

正如您似乎已经发现的那样,默认情况下 zsh 上的分词是关闭的,但在 in sh,bash等上是关闭的。您可以通过引用变量来防止所有 shell 中的分词:

echo "$var" > ~/newfile.sh

请注意,echo默认情况下会在其输出中附加一个换行符,您可以echo使用-n.

于 2013-06-26T23:01:29.737 回答