Não é possível concatenciar caminhos de arquivo, permissão negada

0

Não consigo perceber por que, se eu tentar concatenar alguns caminhos de arquivo (sem abrir os arquivos), recebo "permissão negada":

#!/bin/bash

if [ "$#" -eq 1 ]; then
        path1= "./src/$1"
        path2= "./Main/$1"
        echo $path1
else
        echo "Invalid number of parameters"
fi

É assim que eu executo o script bash (chamado compare.sh):

PS : ./src/GraphicTest.cpp e ./Main/GraphicTest.cpp são arquivos existentes.

    
por Ramy Al Zuhouri 05.01.2015 / 17:31

1 resposta

2

As variáveis do shell são definidas usando a sintaxe name=value . Não deve haver nenhum caractere de espaço em branco [sem aspas] na declaração.

    path1="./src/$1"
    path2="./Main/$1"
    #     ^ remove space here

O espaço em seu uso estava invocando o outro uso de name=value , ou seja, definindo temporariamente variáveis de ambiente para uma única chamada de programa.

Por exemplo:

# set environment variable "foo" to "bar" for this invocation of "program"
foo="bar" /path/to/program
# set "baz" to an empty value for the invocation of "program"
baz= /path/to/program

O motivo pelo qual você estava obtendo um erro de permissão negada em path1= "./src/$1" foi porque foi considerado como "Definir variável de ambiente path1 como vazia e invocar o programa ./src/$1" e como ./src/$1 não tem seu executável bit set ele falhou.

    
por 05.01.2015 / 17:54