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

Jas*_*ine 265 bash shell cygwin newline

我有窗口,使用Cygwin,试图JAVA_HOME永久设置我的.bashrc文件.

.bashrc中:

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

.bash_profile文件:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)

运行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'
Run Code Online (Sandbox Code Playgroud)

我不确定我是从一个专门针对另一个系统的教程中获取命令,还是我错过了一个步骤.或者空格导致我的命令无法正常运行.

我已经查看了多个类似的问题,但我没有找到一个问题确切存在我的错误.


我的家乡之路:

$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/
Run Code Online (Sandbox Code Playgroud)

所以我认为文件应该放在正确的位置.

jah*_*roy 334

当Cygwin中所有其他方法都失败时......

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

当您看到如下错误消息时,它可能会有所帮助:

-bash: '\r': command not found

Windows样式的换行符可能会导致Cygwin出现问题.

dos2unix命令修改换行符,因此它们与Unix/Cygwin兼容.

注意:该命令unix2dos修改文件的地方,所以在必要时采取预防措施.

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

Mac用户注意事项:dos2unix Mac OS X上不存在该命令.

使用不同的工具查看各种解决方案的答案.


还有一个unix2dos命令可以反过来:

它修改了Unix换行符,因此它们与Windows工具兼容.

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

  • 注意`dos2unix`; 与大多数文本过滤器不同,它默认会覆盖其输入文件. (6认同)
  • dos2unix让我保持理智. (3认同)
  • 对我来说,显然是 Windows 换行符造成了这个麻烦,但我的问题是,我可以 * 让 * cygwin * 接受这个换行符 * (windows) * 吗?我很困惑,因为我在 cygwin 中 git 克隆了一个包含 .sh 文件的存储库,但它们带有 \r\n 结尾...显然,即使我从 cygwin 中运行它,git 也会翻译换行符,或者存储库没有带有 Windows 换行符的 bash shell 脚本 .sh 文件出现问题(或者没有人知道/关心存储库包含坏文件,但这种情况不太可能发生)。我知道 git 能够进行换行转换,但我不希望在 cygwin 上实现它。 (2认同)

Mic*_*zos 214

对于那些没有安装dos2unix(并且不想安装它)的人:

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

sed -i 's/\r$//' filename
Run Code Online (Sandbox Code Playgroud)


说明:

选项-i用于就地编辑,我们\r直接在输入文件中删除尾随.因此,请小心正确键入图案.

  • 为当前目录中的所有文件执行此操作<br/>对于i in*; do if [[-f $ i]]; 然后sed -i's /\r $ $''"$ i"; 网络连接; done` (7认同)
  • 这应该是公认的最顶级的答案.寻找一些dos2unix修正不是最好的选择...... (5认同)
  • 非常感谢,这个解决方案也对我有用,我也觉得这是最简单的解决方案 (3认同)
  • 如何在包含文件的整个目录上执行此操作? (2认同)
  • 这对我的情况很有帮助,因为我没有 sudo 访问权限来安装“dos2unix” (2认同)

Ray*_*Oei 49

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

并再次保存您的文件.

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

  • 也可以使用 VsCode : ctrl+ship+p 并输入 &gt;change end of line order,然后选择 EL 。 (3认同)

小智 38

我正在使用cygwin和Windows7,诀窍不是把它set -o igncr放到你的.bashrc中,而是把整个SHELLOPTS放到Windows下的环境变量中.(所以没有unix/cygwin ...)我认为它不起作用.bashrc因为"滴已经被吸了",正如我们在德语中所说的那样.;-)所以我SHELLOPTS看起来像这样

braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
Run Code Online (Sandbox Code Playgroud)

  • 我想澄清可能误解它的试错用户的答案:SHELLOPTS中只需要`igncr`. (4认同)

小智 26

如果您使用的是最近的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
Run Code Online (Sandbox Code Playgroud)

这将强制bash忽略\rWindows行分隔符中使用的回车符()字符.

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

  • 但要工作,您需要将它放在所有脚本的顶部,而不仅仅是.bashrc和.bash_profile. (2认同)
  • 使用导出SHELLOPTS可能会在你的bash shell中调用/ bin/sh(某些命令,如awk暗示)时会得到一个"无效选项名称".sh了解SHELLOPTS,但不理解. (2认同)

Alv*_*oao 25

SUBLIME TEXT

有了崇高,你就去吧

查看 - >行结尾 - >(选择)Unix

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

很容易!

  • 为了使它永久化,"首选项 - >设置",""default_line_endings":"unix"` (2认同)

use*_*997 17

您也可以将选项添加-o igncr到bash调用中,例如

bash -x -o igncr script.sh
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 14

错误:

'\r': 没有找到指令

是由shell无法识别类似Windows的CRLF行结尾(0d 0a),因为它只需要LF(0a).


混帐

如果您在Windows上使用Git,请确保在安装过程中选择了" Checkout as-is ".然后确保运行:git config --global core.autocrlf false,因此Git在签出或提交文本文件时不会执行任何转换.


dos2unix

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

dos2unix ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

注意:该dos2unix命令是dos2unix包的一部分.

Ex/Vim编辑器+ tr

如果已安装Vim,则以下命令应更正文件:

ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*
Run Code Online (Sandbox Code Playgroud)

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

tr

这是使用方法tr:

cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

要么:

tr -d '\r' < filename > new_filename
Run Code Online (Sandbox Code Playgroud)

注意:\r相当于\015.


sed

您可以尝试以下命令:

sed -i'.bak' s/\r//g ~/.bash*
Run Code Online (Sandbox Code Playgroud)

recode

以下别名可能很有用(替换dos2unix命令):

alias unix2dos='recode lat1:ibmpc'
alias dos2unix='recode ibmpc:lat1'
Run Code Online (Sandbox Code Playgroud)

来源:Windows下的免费Unix工具(ssh,bash等).


perl

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

perl -p -i.bak -e 's/\015//g' ~/.bash*
Run Code Online (Sandbox Code Playgroud)

来源:剥离^ M.


tofrodos

在Linux,如Ubuntu不标配要么dos2unix或者unix2dos,你可以安装tofrodos包(sudo apt-get install tofrodos),并定义以下的别名:

alias dos2unix=’fromdos’
alias unix2dos=’todos’
Run Code Online (Sandbox Code Playgroud)

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


流浪汉

如果您正在使用Vagrant VM,并且这种情况发生在配置脚本中,请尝试将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
Run Code Online (Sandbox Code Playgroud)

请参阅:Vagrant中的Windows CRLF到Unix LF问题.


小智 10

尝试执行以下命令

vim .bashrc
:set ff=unix
:wq!
Run Code Online (Sandbox Code Playgroud)


Jes*_*olm 8

根据这个要点,解决方案是创建一个~/.bash_profile(在HOME目录中)包含:

export SHELLOPTS
set -o igncr
Run Code Online (Sandbox Code Playgroud)


小智 6

可能您使用 notepad++ 来创建/更新此文件。

EOL(Edit->EOL Conversion) 默认转换为 Windows。

在 Notepad++ 中更改 EOL 转换

Edit -> EOL Conversion -> Unix (LF)
Run Code Online (Sandbox Code Playgroud)


Dom*_*ieu 5

用 Notepad++ 解决:

1) Menu->Edit->EOL Conversion -> Unix/OSX Format

2)然后保存

固定的


归档时间:

查看次数:

274541 次

最近记录:

5 年,10 月 前