bash command works on Ubuntu but not on macOS
I have this command which works fine on Ubuntu but on macOS I get an error.
The command:
sudo $(grep -qxF '127.0.0.1 app.local' /etc/hosts || echo '127.0.0.1 app.local' >> /etc/hosts)
Output:
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-u user] file ...
Solution 1:
The command as written doesn't really make sense, the command substitution will always return an empty string (and the part after the ||
will fail for non-root users). If you are looking for a way to add a line to /etc/hosts
if there is no entry yet, try
grep -qxF '127.0.0.1 app.local' /etc/hosts ||
sudo sh -c "echo '127.0.0.1 app.local' >> /etc/hosts"
PS: Relying on the number of spaces in the grep
part is asking for trouble, maybe better use a regexp instead