CDIR = $ (pwd) dá “Permissão negada”

4

Eu tenho um script de shell muito simples, chamado deploy.sh

#!/bin/sh 

CDIR= $(pwd)
echo Hello World!

Infelizmente, a execução dá o seguinte erro:

bird@bird-laptop:~/foo$ sh deploy.sh 
deploy.sh: 3: deploy.sh: /home/bird/foo: Permission denied
Hello World!

Alguma pista, por que isso está acontecendo?

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~
    
por Dilini 17.04.2014 / 21:43

4 respostas

9

Remova o caractere de espaço após o = em

CDIR= $(pwd)

sh não permite espaços ao redor do = .

CDIR= $(pwd) means " Executa a saída de pwd com a variável CDIR unset. "

Como você não pode executar uma pasta, você recebe Permission denied .

    
por Florian Diesch 17.04.2014 / 21:48
5
CDIR= $(pwd)
# ...^

Você não deve ter espaços em torno do = em uma atribuição.

O que isso está fazendo: var=value command é uma declaração legal. Define a variável "var" no ambiente do "comando", mas apenas nesse ambiente. Para o seu comando, o shell vê isso:

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
    
por glenn jackman 17.04.2014 / 21:49
3

Quando você atribui um valor a uma variável em sh (ou outro script de shell idioma), nunca use nenhum espaço antes e depois de igual:

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

Aqui está uma citação do link fornecido:

  

=

     

o operador de atribuição ( sem espaço antes e depois )

    
por Radu Rădeanu 17.04.2014 / 21:50
0

Florian está correto, mas você ainda está perdendo uma atualização

#!/bin/sh 

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

Após o valor ser atribuído, ele deve ser convertido em uma string, pois você não pode inline um comando diretamente para uma variável para exibição. Veja aqui .

    
por eyoung100 17.04.2014 / 21:55

Tags