我有一些窗口,使用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'
我不确定我从教程中获取的命令是针对另一个系统的,还是我遗漏了一个步骤。或者空格导致我的命令不能正常运行。
我看过很多类似的问题,但我还没有找到一个问题完全有我的错误。
我的家乡路:
$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/
所以我认为文件应该放在正确的位置。
当一切都在Cygwin失败时……
尝试在有问题的文件上运行dos2unix命令。
当你看到这样的错误消息时,它可能会有所帮助:
-bash: '\r':命令未找到
Windows样式的换行符在Cygwin中可能会导致问题。
dos2unix命令修改换行符,使它们与Unix / Cygwin兼容。
注意:dos2unix命令将就地修改文件,因此如果有必要,请采取预防措施。
如果你需要保留原始文件,你应该先备份它。
Mac用户注意:在Mac OS X上不存在dos2unix命令。
看看这个使用不同工具的各种解决方案的答案。
还有一个unix2dos命令可以做相反的事情:
它修改Unix换行符,使它们与Windows工具兼容。
如果你用记事本打开一个文件,所有的行一起运行,试试unix2dos filename。
如果你正在使用最新的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。
1. 选择
EditorConfig—这是我的选择。
2. 相关性
这个答案与2018年3月有关。在未来,来自这个答案的数据可能会过时。
这个答案的作者个人在2018年3月使用EditorConfig。
3.限制
您需要使用一种受支持的IDE/编辑器。
4. 论证
简单的用法。我需要设置我的.editorconfig文件1次,我创建我的项目,→我可以忘记一些平台,风格和ide特定的问题。
跨平台、跨语言、跨ide、跨编辑器。
5. 例子
5.1. 简单的
我为Sublime Text→我的文本编辑器安装了EditorConfig插件。我在Sublime Text中编辑文件。
例如,我有一个sashacrlf.sh文件:
echo "Sasha" &
echo "Goddess!" &
我在Cygwin中运行这个文件:
$ bash sashacrlf.sh
Sasha
sashacrlf.sh: line 1: $'\r': command not found
Goddess!
我在与sashacrlf.sh相同的项目中创建了一个文件.editorconfig。
[*.sh]
end_of_line = lf
这意味着,如果您在编辑器中保存项目中任何扩展名为.sh的文件,EditorConfig将为该文件设置UNIX行结束符。
我再次在文本编辑器中保存sashacrlf.sh。我再次运行sashacrlf.sh:
$ bash sashacrlf.sh
Sasha
Goddess!
我不能在控制台得到意外的输出。
5.2. 多种文件扩展名
例如,我想在所有扩展名为.sh、.bashrc和.bash_profile的文件中设置UNIX行结束符。
我将这些行添加到我的.editorconfig文件中:
[*.{sh,bashrc,bash_profile}]
end_of_line = lf
现在,如果我保存任何扩展名为.sh、.bashrc或.bash_profile的文件,EditorConfig会自动为该文件设置UNIX行结束符。
6. 额外的链接
EditorConfig官方网站。