'
': command not found - .bashrc / .bash_profile
我有窗口,使用Cygwin,试图通过我的
.bashrc中:
1 2 | export PATH="$JAVA_HOME/bin:$PATH" export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05" |
.bash_profile文件:
1 2 3 | if [ -f ~/.bashrc ]; then source ~/.bashrc fi |
运行cygwin:
1 2 3 4 5 6 | -bash: $'\377\376if': command not found -bash: $'then ': 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' |
我不确定我是从一个专门针对另一个系统的教程中获取命令,还是我错过了一个步骤。 或者空格导致我的命令无法正常运行。
我已经查看了多个类似的问题,但我没有找到一个问题确切存在我的错误。
我的家乡之路:
1 2 3 4 | $ echo $HOME /cygdrive/c/Users/jhsu $ echo ~ /cygdrive/c/Users/jhsu/ |
所以我认为文件应该放在正确的位置。
当Cygwin中所有其他方法都失败时......
尝试在有问题的文件上运行
当您看到如下错误消息时,它可能会有所帮助:
': command not found
Windows样式的换行符可能会导致Cygwin出现问题。
注意:dos2unix命令会修改文件,因此必要时请采取预防措施。
如果您需要保留原始文件,则应首先备份。
Mac用户注意事项:Mac OS X上不存在
使用不同的工具查看各种解决方案的答案。
还有一个
它修改了Unix换行符,因此它们与Windows工具兼容。
如果您使用记事本打开文件并且所有行一起运行,请尝试
对于那些没有安装dos2unix(并且不想安装它)的人:
删除导致此错误的尾随
1 2 | sed -i 's/ $//' filename |
说明:
选项
对于使用Notepad ++的WINDOWS用户(使用v6.8.3检查),您可以使用该选项更正特定文件
- 编辑
- > EOL转换
- > Unix / OSX格式
并再次保存您的文件。
编辑:仍然适用于v7.5.1(2017年8月29日)
我正在使用cygwin和Windows7,诀窍不是将
正如我们在德语中所说的那样。 ;-)
所以我的
1 | braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor |
如果您使用的是最近的Cygwin(例如1.7),您还可以在第一个非注释行上使用以下行启动
1 2 3 4 | # ~/.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行分隔符中使用的回车符(
请参阅http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html。
SUBLIME TEXT
有了崇高,你就去吧
View - > Line Endings -> (select)Unix
然后保存文件。将解决这个问题。
很容易!
您还可以将选项
1 | bash -x -o igncr script.sh |
错误:
' : command not found
'
是由shell无法识别类似Windows的CRLF行结尾(
混帐
如果您在Windows上使用Git,请确保在安装过程中选择了"Checkout as-is"。然后确保运行:
如果你不使用Git,你只需要将这些受影响的文件/脚本转换回类似Unix的行尾(LF),或者通过:
1 | dos2unix ~/.bashrc |
注意:
Ex / Vim编辑器+
如果已安装Vim,则以下命令应更正文件:
1 2 | ex +'bufdo! %! tr -d \ ' -scxa ~/.bash* |
有用的别名:
' -scxa"
这是使用
1 2 | cat ~/.bashrc | tr -d ' ' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc |
要么:
1 2 | tr -d ' ' < filename > new_filename |
注意:
您可以尝试以下命令:
1 2 | sed -i'.bak' s/ //g ~/.bash* |
以下别名可能很有用(它取代了
1 2 | alias unix2dos='recode lat1:ibmpc' alias dos2unix='recode ibmpc:lat1' |
来源:Windows下的免费Unix工具(ssh,bash等)。
以下
1 | perl -p -i.bak -e 's/\015//g' ~/.bash* |
来源:剥离^ M.
在Linux上,比如Ubuntu,它不是标准的
1 2 | alias dos2unix=’fromdos’ alias unix2dos=’todos’ |
然后使用与上面相同的语法。
流浪汉
如果您正在使用Vagrant VM并且配置脚本会出现这种情况,请尝试将
1 2 3 4 5 | # 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 |
请参阅:Vagrant中的Windows CRLF到Unix LF问题。
尝试执行以下命令
1 2 3 | vim .bashrc :set ff=unix :wq! |
根据这个要点,解决方案是创建一个
1 2 | export SHELLOPTS set -o igncr |
使用notepad ++(6.8.1)将shell脚本从windows发送到linux的人。
在notepad ++中设置以下内容
编辑 - > EOL转换 - > Unix / OSX格式
用Notepad ++解决:
1)菜单 - >编辑 - > EOL转换 - > Unix / OSX格式
2)然后保存
固定
对于那里的Emacs用户:
这会将文件中的新字符更新为unix样式。有关Emacs中"Newline Representation"的更多信息,请访问:
http://ergoemacs.org/emacs/emacs_line_ending_char.html
注意:如果首选从命令行执行此操作,则可以将上述步骤制作为Emacs脚本。
我有同样的问题。解决方案:我用pspad编辑器编辑文件,并给它一个unix格式(菜单 - 格式 - > UNIX)
我相信您可以使用许多其他编辑器将此格式设置为您的文件
可能是您使用notepad ++来创建/更新此文件。
EOL(编辑 - > EOL转换)默认情况下,转换为Windows。
在Notepad ++中更改EOL转换
1 | Edit -> EOL Conversion -> Unix (LF) |
在EditPlus中,您可以从中执行此操作
由于从Windows机器创建/下载的文件/脚本,可能会发生问题。请尝试转换为linux文件格式。
1 | dos2unix ./script_name.sh |
要么
1 | dos2unix ~/.bashrc |
1.选择
EditorConfig - 是我的选择。
2.相关性
这个答案与2018年3月相关。将来,这个答案的数据可能已经过时了。
这个答案的作者在2018年3月亲自使用了EditorConfig。
3.限制
您需要使用一个受支持的IDE /编辑器。
4.论证
5.例子
5.1。简单
我为Sublime Text→我的文本编辑器安装了EditorConfig插件。我在Sublime Text中编辑文件。
例如,我有
1 2 | echo"Sasha" & echo"Goddess!" & |
我在Cygwin中运行这个文件:
1 2 3 4 5 | $ bash sashacrlf.sh Sasha sashacrlf.sh: line 1: $' ': command not found Goddess! |
我在与
1 2 | [*.sh] end_of_line = lf |
这意味着,如果在编辑器中将任何带有
我再次在文本编辑器中保存
1 2 3 | $ bash sashacrlf.sh Sasha Goddess! |
我无法在控制台中获得意外的输出。
5.2。多个文件扩展名
例如,我想在所有扩展名为
我将这些行添加到我的
1 2 | [*.{sh,bashrc,bash_profile}] end_of_line = lf |
现在,如果我使用
6.其他链接
- EditorConfig官方网站。
如果您在Cygwin安装上安装了vim软件包,则可以使用vim来修复此问题,而无需查找和替换。按如下方式启动vim:
我建议使用dos2unix,因为vim可能更常用。
但是,最佳做法是将文本编辑器设置为将计划在Unix / Linux环境中使用的文件保存为具有Unix文本格式。上面给出的Notepad ++的答案就是一个很好的例子。
附加说明:如果您不确定文件的类型(DOS或Unix),可以使用
有关如何修改文本文件格式的其他选项,请参阅此IU知识库文章
有关Bash脚本和行结尾的更多背景信息,请参阅此StackOverflow问题。