Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 无论shell如何,我如何返回精确的格式?_Ssh_Sh_Zsh_Cat - Fatal编程技术网

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