bash permissions - problema desconhecido

0

Por estranho que pareça, eu tenho o seguinte problema em um diretório dentro de um script:

#!/usr/bin/env bash
MAIN_DIR=/home/ec2-user/dir/
LAST_DIR=$(ls -d -t ${MAIN_DIR}*/ | head -1)

Quando eu corro, fico:

ls: cannot access /home/ec2-user/bitcoin/*/: No such file or directory

Se eu o executar no terminal, tudo está bem.

Além disso, pensei que poderia ser uma questão de premissa, então eu fiz chmod 777 -r no diretório e ainda nada. Alguma idéia de como consertar isso?

Nota

Isso está na instância do Amazon EC2.

    
por Alex Botev 19.02.2015 / 19:34

2 respostas

1

O padrão /home/ec2-user/bitcoin/*/ expande para a lista de subdiretórios do diretório /home/ec2-user/bitcoin , devido à barra final. (Exceto que os diretórios cujo nome começa com . são omitidos.) Se /home/ec2-user/bitcoin não contiver nenhum subdiretório, o padrão não corresponderá a nada, portanto, não será modificado.

Além de não executar chmod 777 só porque você não entende o que está acontecendo. Existem pouquíssimos problemas que isso resolve e muitos que podem causar. É como dizer "Eu não posso ver onde eu acho que a minha janela é, então eu vou fazer um buraco na parede".

    
por 20.02.2015 / 01:01
0

Acho que parte do problema é a maneira como você definiu suas variáveis. Em vez de escrever isso:

MAIN_DIR=/home/ec2-user/dir/
LAST_DIR=$(ls -d -t ${MAIN_DIR}*/ | head -1)

Eu recomendaria que você omitisse o / de MAIN_DIR e o usasse onde necessário, assim:

MAIN_DIR=/home/ec2-user/dir
LAST_DIR=$(ls -d -t ${MAIN_DIR}/*/ | head -1)

Isso, eu suspeito, pode ajudar você a identificar o que está acontecendo. Sem ver o que há dentro de dir e bitcoin , não posso sugerir nada mais específico.

Como um problema de estilo, eu também recomendo strongmente que você cite variáveis (e seus valores) para que espaços inesperados em valores não quebrem seu código:

MAIN_DIR='/home/ec2-user/dir'
LAST_DIR=$(ls -d -t "${MAIN_DIR}"/*/ | head -1)
    
por 19.02.2015 / 20:03