I have the following script. It's a simple test case where a
is any string value and b
is supposed to be a path.
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
However whenever I try to execute ./sample.sh I get the following errors:
./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found
and when I try source sample.sh
I get the following:
a: Undefined variable.
My aim was to make this an alias so that I can source this script and just run the alias to execute the line of commands. Can someone look at this and let me know what the error is?
You have a couple of issues here
unlike in
csh
, inbash
(and other Bourne-like shells), aliases are assigned with an=
sign e.g.alias foo=bar
quotes can't be nested like that; in this case, you can use single quotes around the alias and double quotes inside
the backslash
\
is a line continuation character: syntactically, it makes your command into a single line (the opposite of what you want)So
Testing: first we source the file:
then
If you want to use the alias within a script, then remember that aliases are only enabled by default in interactive shells: to enable them inside a script you will need to add
Regardless of everything above, you should consider using a shell function rather than an alias for things like this
Get used to using functions in the POSIX-type shell. You don't have any of the quoting issues: