'\ r':找不到命令 – .bashrc / .bash_profile

我有Windows,使用Cygwin,试图通过我的.bashrc文件永久设置JAVA_HOME

.bashrc中:

 export PATH="$JAVA_HOME/bin:$PATH" export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05" 

.bash_profile文件:

 if [ -f ~/.bashrc ]; then source ~/.bashrc fi 

运行cygwin:

 -bash: $'\377\376if': command not found -bash: $'then\r': command not found : No such file or directorysu//.bashrc -bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: syntax error near unexpected token `fi' -bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: `fi' 

我不确定是否从另一个系统的教程中获取了命令,或者如果我错过了一个步骤。 或者空白导致我的命令不能正常运行。

我已经看了很多类似的问题,但我还没有find一个问题有我的错误完全。


我的家乡之路:

 $ echo $HOME /cygdrive/c/Users/jhsu $ echo ~ /cygdrive/c/Users/jhsu/ 

所以我相信这些文件应该放在正确的位置。

当Cygwin中的所有其他function都失败时

尝试在有问题的文件上运行dos2unix命令。

当你看到这样的错误信息时可能会有所帮助:

-bash: '\r': command not found

Windows样式的换行符可能会导致Cygwin中的问题。

dos2unix命令修改换行符,使它们与Unix / Cygwin兼容。

小心: dos2unix命令修改了文件,所以必要时采取预防措施。

如果您需要保留原始文件,则应先备份。

Mac用户请注意: Mac OS X上不存在dos2unix命令。

看看这个答案的各种解决scheme使用不同的工具。


还有一个unix2dos命令:

它修改Unix换行符,使它们与Windows工具兼容。

如果您用记事本打开一个文件,并且所有行都一起运行,请尝试unix2dos filename

对于那些没有安装dos2unix的用户 (不想安装它):

删除导致此错误的结尾字符\r

 sed -i 's/\r$//' filename 

说明

选项-i用于就地编辑,我们直接在input文件中删除尾部的\r 。 因此请小心input正确的模式。

我正在使用cygwin和Windows7,诀窍不是把set -o igncr放到你的.bashrc中,而是把整个SHELLOPTS放到你的环境variables下。 (所以没有与Unix / Cygwin的…)我认为它不能从.bashrc工作,因为“滴已经吸”,我们会说德语。 ;-)所以我的SHELLOPTS看起来像这样

 braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor 

如果您正在使用最近的Cygwin(例如1.7),您还可以在第一个非注释行中使用以下行来启动.bashrc.bash_profile

 # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples (set -o igncr) 2>/dev/null && set -o igncr; # this comment is needed 

这将强制bash忽略Windows行分隔符中使用的回车符( \r )。

请参阅http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html

你也可以添加选项-o igncr给bash调用,例如

 bash -x -o igncr script.sh 

SUBLIME TEXT

随着崇高,你只要去

查看 – >行尾 – >(select)Unix

然后保存该文件。 将解决这个问题。

那样容易!

对于使用Notepad ++的 WINDOWS用户(使用v6.8.3进行检查),您可以使用选项 – 编辑 – > EOL转换 – > Unix / OSX格式来更正特定文件

并再次保存您的文件。

编辑:仍然在v7.5.1(2017年8月29日)

那些使用notepad ++(6.8.1)将shell脚本从windows发布到linux的人们。

在记事本++编辑 – > EOL转换 – > Unix / OSX格式中设置以下内容

根据这个要点 ,解决scheme是创build一个~/.bash_profile (在HOME目录下),其中包含:

 export SHELLOPTS set -o igncr 

错误:

'\r' :找不到命令

是由于shell只能识别LF0a )而无法识别类似于Windows的CRLF行尾( 0d 0a 0a )。


混帐

如果您在Windows上使用Git,请确保在安装过程中select了“ 按原样检出 ”。 然后确保你运行: git config --global core.autocrlf false ,所以Git在检出或提交文本文件时不会执行任何转换。


dos2unix

如果你不使用Git,只需要将这些受影响的文件/脚本转换回类Unix的行尾(LF)

 dos2unix ~/.bashrc 

注意: dos2unix命令是dos2unix软件包的一部分。

Ex / Vim编辑器+ tr

如果你安装了Vim,下面的命令应该修正这些文件:

 ex +'bufdo! %! tr -d \\r' -scxa ~/.bash* 

有用的别名: alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa"

tr

这里是使用tr的方法:

 cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc 

要么:

 tr -d '\r' < filename > new_filename 

注意: \r等同于\015


sed

你可以尝试下面的命令:

 sed -i'.bak' s/\r//g ~/.bash* 

recode

以下别名可能会有用(替代dos2unix命令):

 alias unix2dos='recode lat1:ibmpc' alias dos2unix='recode ibmpc:lat1' 

资料来源: Windows下的Free Unix Tools(ssh,bash等) 。


perl

以下perl命令可以将文件从DOS转换为Unix格式:

 perl -p -i.bak -e 's/\015//g' ~/.bash* 

来源: 剥离^ M。


tofrodos

在Linux上,像Ubuntu这样的dos2unix或者unix2dos不是标准的,你可以安装tofrodos软件包( sudo apt-get install tofrodos ),并定义下面的别名:

 alias dos2unix='fromdos' alias unix2dos='todos' 

然后使用与上面相同的语法。


stream浪汉

如果您正在使用Vagrant虚拟机并且发生这种情况,请尝试将binary选项设置为true

 # Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html config.vm.provision "shell" do |s| s.binary = true # Replace Windows line endings with Unix line endings. s.path = "script.sh" end 

请参阅: Windows CRLF到Unix中的低频stream量问题 。

我有同样的问题。 解决scheme:我用pspad编辑器编辑文件,并给它一个unix格式(菜单 – 格式 – > UNIX)

我相信你可以用其他编辑器将这个格式设置为你的文件

对于那里的Emacs用户:

  1. 打开文件
  2. Mx集缓冲区文件编码系统
  3. select“unix”

这会将文件中的新字符更新为unix风格。 有关Emacs中“Newline Representation”的更多信息,请访问:

http://ergoemacs.org/emacs/emacs_line_ending_char.html

注意:如果有人喜欢从命令行执行,可以将上述步骤制作成Emacs脚本。

用Notepad ++解决:

1)菜单 – >编辑 – > EOL转换 – > Unix / OSX格式

2)然后保存

固定

在EditPlus中,您可以从Document → File Format (CR/LF) → Change File Format...菜单中执行此操作,然后selectUnix / Mac OS X单选button。

问题可能发生,因为从Windows机器创build/下载的文件/脚本。 请尝试转换成Linux文件格式。

 dos2unix ./script_name.sh 

要么

 dos2unix ~/.bashrc