CDIR = $ (pwd) дает «Отказано в доступе»

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

4 ответа

Удалите пробел после того, как = в

CDIR= $(pwd)

sh не позволит пробелов вокруг =.

CDIR= $(pwd) средства" Выполнение вывод pwd с переменной CDIR сброс. "

, Поскольку Вы не можете выполнить папку, которую Вы получаете Permission denied.

0
ответ дан 18 April 2014 в 00:39
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
0
ответ дан 18 April 2014 в 00:39

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

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

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

=

оператор присваивания ( никакое пространство прежде и после )

0
ответ дан 18 April 2014 в 00:39

Florian корректен, но Вы все еще пропускаете обновление

#!/bin/sh 

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

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

0
ответ дан 18 April 2014 в 00:39

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

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