I have a very simple shell script, called deploy.sh
#!/bin/sh
CDIR= $(pwd)
echo Hello World!Unfortunately, running it gives the following error:
bird@bird-laptop:~/foo$ sh deploy.sh
deploy.sh: 3: deploy.sh: /home/bird/foo: Permission denied
Hello World!Any clues, why this is happening?
bird@bird-laptop:~/foo$ ls -l
total 156
-rwxrwxrwx 1 bird bird 327 April 18 00:57 deploy.sh
-rw-r--r-- 1 bird bird 327 April 18 00:53 deploy.sh~ 1 4 Answers
Remove the space character after the = in
CDIR= $(pwd)sh doesn't allow any spaces around the =.
CDIR= $(pwd) means "Run the output of pwd with the variable CDIR unset."
As you can't run a folder you get Permission denied.
CDIR= $(pwd)
# ...^You must not have spaces around the = in an assignment.
What this is doing: var=value command is a legal statement. It sets the "var" variable in the environment of the "command", but only in that environment. For your command, the shell sees this:
CDIR= $(pwd) # first, process the $()
CDIR= /home/bird/foo # prepare the env with CDIR="" and execute /home/bird/foo # oops, cannot execute /home/bird/foo When you assign a value to a variable in sh (or other shell scripting language), never use any space before and after equal:
CDIR= $(pwd)CDIR=$(pwd)Here is a quote from the given link:
1=
the assignment operator (no space before and after)
Florian is correct, but you're still missing an update
#!/bin/sh
CDIR=$(pwd)
echo $CDIR
echo Hello World!After the value is assigned it must be converted to a string, as you cannot inline a command directly to a variable for display. See here.
1