I've written a sh script in one of my ubuntu VMs which works fine, but when I try to run it in my other VMs, it does not work. Both VMs should be the same. With bash --version
both VMs reply with:
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
With lsb_release -a
, both also reply:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty
My security_steps.sh
script looks like this:
#!/bin/sh
set -e
if ! [ -f svn_up_action.sh ]; then
echo "svn_up_action.sh is missing. Please make sure it is in the same directory as this script."
exit
fi
When I do: sudo sh security_steps.sh
, the console errors with:
: not foundeps.sh: 6: security_steps.sh:
security_steps.sh: 7: set: Illegal option -
How can I figure out what's going on with the VM of the non-working shell? I feel like the shells are somehow different. I appreciate your help!
This almost certainly means your file has DOS newlines -- thus, hidden CR characters at the end.
Thus, set -e
becomes set -e$'\\r'
(using bash-specific syntax to represent the CR character), which isn't a valid option.
This also explains the : not found
, as a CR will reset the cursor to the beginning of the line, truncating an error message of the form sh: commandname: not found
by making the commandname
instead an operation that moves the cursor to the beginning of the line.
I had *.sh file throwing me this while running it on Windows (via GitBash).
I've had to change line endings to UNIX/OSX format.
In Windows :
choco install dos2unix
dos2unix file.sh
In Linux :
sudo apt install dos2unix
dos2unix file.sh
dos2unix converts the file to the Unix type.
After doing this, try to run the application again or the file.
I got the same Error,
Later I found that these raise because My shell script file moved from a windows machine to Linux machine(there may be a chance of formating or Encoding error).
So I have created the document in Linux machine itself. It solved the issue.
This "May" help few, I am posting this because it worked for me.
If you run into this problem because you are touching your files on a Windows machine, Notepad++ is your friend.
Inspection
View > Show Symbol > Show All Characters
Look for CR
LF
line endings, rather than LF
line endings!
Solving
Search > Replace ( Ctrl + H )
Make sure Search Mode is set to Extended
Find \\r\\n
and replace with \\n
You can use the below command, it will remove the hidden CR characters
sed -i 's/\r$//' filename
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.