CDIR = $ (pwd) дает & ldquo; Permission denied & rdquo;

У меня очень простой скрипт оболочки, который называется 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~
1
задан 18 April 2014 в 01:39

3 ответа

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
5
ответ дан 24 May 2018 в 09:21

Когда вы присваиваете значение переменной в sh (или другом языке сценариев оболочки), никогда не используйте какое-либо пространство до и после равного:

CDIR= $(pwd)
CDIR=$(pwd)

Вот цитата из данной ссылки :

= оператор присваивания (пробел до и после)
3
ответ дан 24 May 2018 в 09:21
  • 1
    Цитирование не наносит вреда, но $() уже возвращает один токен, т. Е. не требуется цитирование. – progo 18 April 2014 в 16:48

Флориан прав, но вам все еще не хватает обновления

#!/bin/sh 

CDIR=$(pwd)
echo $CDIR
echo Hello World!

После того, как значение назначено, оно должно быть преобразовано в строку, так как вы не можете встроить команду непосредственно в переменную для отображения , См. Здесь.

0
ответ дан 24 May 2018 в 09:21
  • 1
    Тогда я отвлечу свой комментарий и отредактирую сообщение. – eyoung100 18 April 2014 в 01:21

Другие вопросы по тегам:

Похожие вопросы: