У меня очень простой скрипт оболочки, который называется deploy.sh
#!/bin/sh
CDIR= $(pwd)
echo Hello World!
К сожалению, его запуск приводит к следующей ошибке:
bird@bird-laptop:~/foo$ sh deploy.sh
deploy.sh: 3: deploy.sh: /home/bird/foo: Permission denied
Hello World!
Любые подсказки, почему это происходит?
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~
CDIR= $(pwd)
# ...^
У вас не должно быть пробелов вокруг = в задании.
Что это делает: var=value command является юридическим заявлением. Он устанавливает переменную «var» в среде «command», но только в этой среде. Для вашей команды оболочка видит это:
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
Когда вы присваиваете значение переменной в sh (или другом языке сценариев оболочки), никогда не используйте какое-либо пространство до и после равного:
CDIR= $(pwd)
CDIR=$(pwd)
Вот цитата из данной ссылки :
= оператор присваивания (пробел до и после)Флориан прав, но вам все еще не хватает обновления
#!/bin/sh
CDIR=$(pwd)
echo $CDIR
echo Hello World!
После того, как значение назначено, оно должно быть преобразовано в строку, так как вы не можете встроить команду непосредственно в переменную для отображения , См. Здесь.