'\ 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只能识别LF
( 0a
)而无法识别类似于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用户:
- 打开文件
- Mx集缓冲区文件编码系统
- 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