Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 哦 文档→ 文件格式(CR/LF)→ 更改文件格式…菜单,然后选择Unix/Mac OS X单选按钮。_Bash_Shell_Cygwin_Newline - Fatal编程技术网

Bash 哦 文档→ 文件格式(CR/LF)→ 更改文件格式…菜单,然后选择Unix/Mac OS X单选按钮。

Bash 哦 文档→ 文件格式(CR/LF)→ 更改文件格式…菜单,然后选择Unix/Mac OS X单选按钮。,bash,shell,cygwin,newline,Bash,Shell,Cygwin,Newline,问题可能是由于从windows计算机创建/下载的文件/脚本造成的。请尝试转换为linux文件格式 dos2unix ./script_name.sh 或 因此,解决方案是创建一个~/.bash\u配置文件(在主页目录中),其中包含: export SHELLOPTS set -o igncr 1.选择 -这是我的选择 2.关联 该答案与2018年3月相关。将来,这个答案中的数据可能会过时 本答案的作者于2018年3月亲自使用了EditorConfig 3.局限性 你需要使用 4.论证

问题可能是由于从windows计算机创建/下载的文件/脚本造成的。请尝试转换为linux文件格式

dos2unix ./script_name.sh

因此,解决方案是创建一个
~/.bash\u配置文件
(在
主页
目录中),其中包含:

export SHELLOPTS
set -o igncr
1.选择 -这是我的选择


2.关联 该答案与2018年3月相关。将来,这个答案中的数据可能会过时

本答案的作者于2018年3月亲自使用了EditorConfig


3.局限性 你需要使用


4.论证
  • 简单的用法。我需要设置我的
    .editorconfig
    文件1次,在那里我创建了我的项目,→ 我可以忘记

  • 5.例子 5.1. 简单的 我为崇高的文本安装→ 我的文本编辑器。我用升华文本编辑文件

    例如,我有
    sashacrf.sh
    文件:

    echo“Sasha”&
    回声“女神!”&
    
    我在Cygwin中运行此文件:

    $bash sasharclf.sh
    萨沙
    sasharlf.sh:第1行:$'\r':未找到命令
    女神!
    
    我在与
    sashacrf.sh
    相同的项目中创建了一个文件
    .editorconfig

    [*.sh]
    _线的_端=lf
    
    这意味着,如果在编辑器中保存项目中扩展名为
    .sh
    的任何文件,EditorConfig将为此文件设置UNIX行结尾

    我再次在文本编辑器中保存
    sashacrf.sh
    。我再次运行
    sashacrf.sh

    $bash sasharclf.sh
    萨沙
    女神!
    
    我无法在控制台中获得意外的输出

    5.2. 多个文件扩展名 例如,我希望在所有扩展名为
    .sh
    .bashrc
    .bash\u profile
    的文件中使用UNIX行结尾。 我将这些行添加到我的
    .editorconfig
    文件中:

    [*.{sh,bashrc,bash_profile}]
    _线的_端=lf
    
    现在,如果我保存任何扩展名为
    .sh
    .bashrc
    .bash\u profile
    的文件,EditorConfig会自动为该文件设置UNIX行结束


    6.附加链接

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

    默认情况下,下线(编辑->下线转换)转换为Windows

    更改记事本中的下线转换++

    Edit -> EOL Conversion -> Unix (LF)
    

    如果在Cygwin安装中安装了vim软件包,则可以使用vim修复此问题,而无需查找和更换。按如下方式启动vim:
    vim filename.sh
    (通常它也被别名为vi)。然后,键入
    :set fileformat=unix
    ,然后键入
    :wq
    (写入并退出)保存更改。(
    将您置于vim的编辑模式。)

    我建议您不要使用dos2unix,因为vim可能更常见

    但是,最好将文本编辑器设置为将计划在Unix/Linux环境中使用的文件保存为Unix文本格式。上面给出的Notepad++的答案就是一个很好的例子

    附加说明:如果不确定文件的类型(DOS或Unix),可以使用
    文件名.sh
    。这尤其有助于调试更模糊的问题(例如从Windows导入SQL转储时的编码问题)

    有关如何修改文本文件格式的其他选项,请参见


    有关Bash脚本和行尾的更多背景信息,请参见。

    尝试执行以下命令

    vim .bashrc
    :set ff=unix
    :wq!
    

    echo~
    给出了什么?$echo~/cygdrive/c/Users/jhsu/这个问题并不特定于cygwin——如果在DOS机器上创建一个脚本并将其二进制传输到Linux系统并在那里运行,同样的问题也会发生;我已经从标题中删除了cygwin引用,因此在其他情况下出现此问题的人更可能认真对待此问题(及其非cygwin特定的答案)。有关cygwin的背景知识,似乎在2007年左右,Cygwin开始以Unix风格处理回车-请参阅。该论坛帖子解释了下面几个答案中讨论的igncr shell选项。在命令行上,
    export SHELLOPTS
    ,然后
    set-o igncr
    为Mebeauty运行配置脚本,dos2unix修复了它,谢谢。我还添加了
    JAVA=“$JAVA_HOME”/bin/JAVA
    ,现在它找到了我的JAVA!小心使用
    dos2unix
    ;与大多数文本筛选器不同,默认情况下,它会覆盖其输入文件。dos2unix使我保持理智。很明显,windows换行符造成了此问题,但我的问题是,我可以让cygwin也接受此换行符(windows)吗?我很困惑,因为我在cygwin中克隆了一个repo,其中包含.sh文件,但它们有\r\n结尾。。。显然,要么是git翻译了新行,即使我从cygwin内部运行它,要么是repo对带有windows新行的bash shell script.sh文件没有问题(或者没有人知道/关心repo包含不太可能的坏文件)。我知道git可以进行换行转换,但我不希望它出现在cygwin上。@naxa-换行可能是基于OS:cygwin=Windows选择的。这是我一直在寻找的,但对我来说没有效果。。一年后,这是否仍然有效?编辑:
    export SHELLOPTS
    帮了我的忙!但有时我仍然会得到“无效选项名”——为什么?从这里开始:但要工作,您需要将它放在所有脚本的顶部,而不仅仅是.bashrc和.bash_配置文件。当您在bash shell中调用/bin/sh(某些命令如awk隐式地执行)时,使用export-SHELLOPTS可能会得到“无效选项名”。sh理解SHELLOPTS,但不理解igncr。需要在Windows环境变量而不是Cygwin环境变量中设置SHELLOPTS的原因是,该变量仅由bash读取(根据“man bash”)。所以
    # ~/.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
    
    braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
    
    bash -x -o igncr script.sh
    
    sed -i 's/\r$//' filename
    
    dos2unix ~/.bashrc
    
    ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*
    
    cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc
    
    tr -d '\r' < filename > new_filename
    
    sed -i'.bak' s/\r//g ~/.bash*
    
    alias unix2dos='recode lat1:ibmpc'
    alias dos2unix='recode ibmpc:lat1'
    
    perl -p -i.bak -e 's/\015//g' ~/.bash*
    
    alias dos2unix=’fromdos’
    alias unix2dos=’todos’
    
    # 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
    
    dos2unix ./script_name.sh
    
    dos2unix ~/.bashrc
    
    export SHELLOPTS
    set -o igncr
    
    Edit -> EOL Conversion -> Unix (LF)
    
    vim .bashrc
    :set ff=unix
    :wq!