Por que esse script funciona no diretório atual, mas falha quando colocado no caminho?

0

Desejo substituir minha memória com falha por um script de shell muito pequeno.

#!/bin/sh
if ! [ –a $1.sav ]; then
    mv $1 $1.sav
    cp $1.sav $1
fi
nano $1 

destina-se a salvar a versão original de um script. Se o original foi preservado antes, ele pula o movimento e copia de volta (e eu uso move-and-copy-back para preservar o timestamp original).

Isso funciona como esperado se, depois de torná-lo executável com o chmod, eu o iniciar de dentro do diretório onde estou editando, por exemplo, com

./ safe.sh filename

No entanto, quando eu o movo para / usr / bin (então é no caminho como verificado com echo $ PATH ) e então tento executá-lo em um diretório diferente (sem o ./) falha com

-bash: /usr/bin/safe.sh: / bin / sh: intérprete incorreto: arquivo de texto ocupado

D'oh? Mentes inquiridoras querem saber como fazer isso funcionar.

    
por K7AAY 23.10.2013 / 02:04

2 respostas

1

Não é uma resposta, mas apenas uma (talvez valiosa) dica:
esta seria uma solução melhor em vez do script?

cp -an source_file target_file

A opção -a preserva todos os atributos, incluindo carimbos de data e hora.
A opção -n evita sobrescrever um arquivo existente

    
por thom 29.10.2013 / 01:08
1

"Arquivo de texto ocupado" implica que o script está sendo usado em outro lugar. Descubra o que está abrindo o arquivo usando:

lsof | grep safe.sh

Em seguida, interrompa o processo conforme necessário.

    
por andy 23.10.2013 / 03:02