O comando no script falha com o erro “não encontrado”, mas funciona bem na linha de comando

O comando no script falha com o erro “não encontrado”, mas funciona bem na linha de comando

Criei um ambiente mínimo em meu dispositivo ARM incorporado que consiste apenas no kernel Linux e com Busybox e um sistema de arquivos mínimo em uma imagem initrd. Eu tenho um inittabque funciona /etc/init.d/rcSna inicialização.

Eu tenho a seguinte linha em rcS:

/bin/mount -t proc none /proc

No entanto, quando esta linha é executada, recebo

/etc/init.d/rcS: line 2: /bin/mount -t proc none /proc: not found

A última linha rcSparece ser executada - essa linha é simplesmente /bin/shpara obter um shell, e o shell abre automaticamente.

Quando executo exatamente o mesmo comando de montagem no shell, ele funciona. /bin/mounté um link simbólico para /bin/busybox.

Por que meu script não consegue encontrar /bin/mount?

Responder1

Acontece que os espaços no arquivo eram na verdade dois caracteres 0xD0 0xA0(Unicode? Talvez seja apenas uma coincidência que eles se pareçam com CR/LF deslocados para a esquerda 4 bits... Eles também aparecem como um único caractere em branco, não dois). Uma pista logo de cara foi a mensagem de erro - ela deveria ter exibido apenas o comando, não os parâmetros, mas não havia nenhum espaço em branco na linha.

Assim que descobri isso, percebi qual provavelmente era a causa. Meu sistema operacional é o Windows 7 e estou executando o Ubuntu em uma VM VirtualBox e uso uma área de transferência compartilhada. Copiei o script de uma página da web no Chrome no Windows 7 e colei no gedit no Ubuntu. Esses caracteres foram copiados da página da web ou algo não funcionou bem com a codificação no caminho da página para o gedit.

Substituir aqueles por caracteres de espaço resolveu o problema.

informação relacionada