\r character in shell script

后端 未结 6 1935
执笔经年
执笔经年 2020-11-30 05:05

I get the below error while trying to execute a shell script,

$\'\\r\': command not found: line 2:

Please suggest a solution for the same.

相关标签:
6条回答
  • 2020-11-30 05:33

    I used notepad++ to convert the line endings.

    Edit > EOL Conversion > UNIX/OSX Format

    0 讨论(0)
  • 2020-11-30 05:35

    You can use sed -i 's/\r$//' scriptname.sh

    Replace the scriptname with actual script name.

    0 讨论(0)
  • 2020-11-30 05:42

    I had the same error and what I did was to transform the characters '\r' to '\n'. using this line:

    tr '\r' '\n' < oldfile.sh > newfile.sh
    mv newfile.sh oldfile.sh
    chmod +x oldfile.sh
    ./oldfile.sh
    

    I think you could also delete the '\r' characters by using:

    tr -d '\r' < oldfile.sh > newfile.sh
    

    tr is the command trasnform, and the -d is delete the following character.

    I think the shell actually doesn't like '\r' character.

    0 讨论(0)
  • 2020-11-30 05:45

    I had this exact issue when creating a .sh file on a Mac (unix) and executing it in Linux. Turns out that I had to set FileZilla FTP settings to 'Binary' transfer type:

    • "Settings>Transfers>File Types>Default transfer type" to "Binary" (instead of "Auto")
    0 讨论(0)
  • 2020-11-30 05:53

    Your problem is that the file has Windows line endings. This can be caused by editing a file in Windows and trying to run it on a non-Windows system.

    You can fix this problem using dos2unix to convert the line endings:

    dos2unix ConstruedTermsXMLGenerator.sh
    

    The corresponding utility to convert in the other direction is unix2dos.

    Some systems have fromdos and todos.

    0 讨论(0)
  • 2020-11-30 05:56

    I got a different error message when running your script under /bin/sh, but when I switched to /bin/bash, it worked fine:

    $ cat foo.sh
    #!/bin/sh
    if [[ $# -lt 1 ]];
        then echo "ERROR Environment argument missing"
        RC=50
        exit $RC
    fi
    $ sh foo.sh
    foo.sh: 6: [[: not found
    $ bash foo.sh
    ERROR Environment argument missing
    

    You've built in a bashism. This may or may not be a big deal for your organization. If you want to keep using bash-specific features, change the shebang line to #!/bin/bash and see if that helps.

    0 讨论(0)
提交回复
热议问题