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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With