Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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
Linux 为什么在bash命令后附加控制字符?_Linux_File_Bash - Fatal编程技术网

Linux 为什么在bash命令后附加控制字符?

Linux 为什么在bash命令后附加控制字符?,linux,file,bash,Linux,File,Bash,我使用bash命令向多个配置文件追加了几行: > for filename in *.ovpn; do > printf 'configurationscript-security 2\nup /etc/openvpn/update-resolv-conf\ndown /etc/openvpn/update-resolv-conf' >> $filename; > done 但是,控制字符^M出现在配置文件中每行的末尾: 我在vim中打开了这些文件,bash命

我使用bash命令向多个配置文件追加了几行:

> for filename in *.ovpn; do
> printf 'configurationscript-security 2\nup /etc/openvpn/update-resolv-conf\ndown /etc/openvpn/update-resolv-conf' >> $filename; 
> done
但是,控制字符^M出现在配置文件中每行的末尾:

我在vim中打开了这些文件,bash命令之前的文件如下所示:

我很好奇为什么^M出现在每行的末尾?谢谢。

这是Windows,请使用dos2unix转换文件。Vim识别并正确显示。这是Windows,使用dos2unix转换文件。Vim可以识别并正确显示。

如果dos2unix不可用,也可以通过Vim中的正则表达式删除^M

:%s/^M//g,可输入为:Esc:%s/ctrl+Vctrl+M//g

不知道为什么在linux系统上只使用一个简单的printf命令就会出现这种情况,也许可以看看您使用的是正确的printf版本。我已经在linux系统上对此进行了尝试,本地printf保留了正确的行尾,正如您所期望的那样。

如果dos2unix不可用,也可以通过vim中的正则表达式删除^M

:%s/^M//g,可输入为:Esc:%s/ctrl+Vctrl+M//g

不知道为什么在linux系统上只使用一个简单的printf命令就会出现这种情况,也许可以看看您使用的是正确的printf版本。我已经在linux系统上尝试过了,本地printf保留了正确的行尾,正如您所期望的那样