O $ 1.gz existe na pasta, mas ele disse que não pode acessar, nenhum arquivo ou diretório

0

Eu tenho um script que diz

gzip -cN "$1" > "$1.gz" | ls -l "$1.gz" | awk '{print $5}'

Eu corri com um argumento de ff , e recebo a mensagem de erro

ls: cannot access ff.gz: No such file or directory

Mas, quando subseqüentemente executo ls -l (manualmente, no prompt do shell), Eu vejo que ff.gz está lá. Qual é o problema?

    
por Vicky 05.10.2018 / 20:34

1 resposta

1

Se você fizer

cmd1 | cmd2
então cmd1 e cmd2 correr mais ou menos ao mesmo tempo. Se você tem um sistema multi-CPU, eles podem realmente funcionar simultaneamente. Mas em qualquer caso, eles serão executados simultaneamente, com o agendamento preciso sendo determinado por fatores muito complexos para permitir a previsão.

Seu cmd1 é gzip -cN "$1" > "$1.gz" e seu cmd2 é ls -l "$1.gz" . Portanto, o ls pode começar a ser executado antes que o gzip crie o arquivo "$1.gz" .

ls não lê a entrada padrão, por isso não faz sentido. Você provavelmente quer fazer

gzip -cN "$1" > "$1.gz"  &&  ls -l "$1.gz" | awk '{print $5}'
ex., execute o gzip e, em seguida, se for bem-sucedido, execute o ls -l .     
por 05.10.2018 / 20:50

Tags