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
.
Mic*_*zos 214
删除\r
导致此错误的尾随字符:
sed -i 's/\r$//' filename
Run Code Online (Sandbox Code Playgroud)
说明:
选项-i
用于就地编辑,我们\r
直接在输入文件中删除尾随.因此,请小心正确键入图案.
Ray*_*Oei 49
对于使用Notepad ++的WINDOWS用户(使用v6.8.3检查),您可以使用选项 - 编辑 - > EOL转换 - > Unix/OSX格式更正特定文件
并再次保存您的文件.
编辑:仍然适用于v7.5.1(2017年8月29日)
小智 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)
小智 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忽略\r
Windows行分隔符中使用的回车符()字符.
请参阅http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html.
Alv*_*oao 25
SUBLIME TEXT
有了崇高,你就去吧
查看 - >行结尾 - >(选择)Unix
然后保存文件.将解决这个问题.
很容易!
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
包的一部分.
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问题.
根据这个要点,解决方案是创建一个~/.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)
归档时间: |
|
查看次数: |
274541 次 |
最近记录: |