У меня есть очень простой сценарий оболочки, который называется 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)
sh
не позволит пробелов вокруг =
.
CDIR= $(pwd)
средства" Выполнение вывод pwd
с переменной CDIR
сброс. "
, Поскольку Вы не можете выполнить папку, которую Вы получаете Permission denied
.
CDIR= $(pwd)
# ...^
у Вас не должно быть пробелов вокруг =
в присвоении.
, Что это делает: var=value command
легальный оператор. Это устанавливает переменную "var" в среде "команды", но только в той среде. Для Вашей команды оболочка видит это:
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)
Вот кавычка из данной ссылки:
=
оператор присваивания ( никакое пространство прежде и после )
Florian корректен, но Вы все еще пропускаете обновление
#!/bin/sh
CDIR=$(pwd)
echo $CDIR
echo Hello World!
После того, как значению присваивают, оно должно быть преобразовано в строку, поскольку Вы не можете встроить команду непосредственно к переменной для дисплея. См. здесь .