Modificado erroneamente `/ bin / sh '


16

Eu tinha esse script:

spd-say "Hello, don't forget the trash bin."

Então, isso me lembrou o que eu deveria fazer, mudei para /usr/local/bin/e o comando trashpronunciou o argumento, depois estabeleci um trabalho de crontab , para que ele me lembrasse todos os dias o que eu queria fazer. Mas o crontab não funcionou e eu não conseguia entender o porquê (ele faz outros trabalhos na perfeição).

Uma vez eu vi esta mensagem no meu terminal:

You have new mail in /var/mail/root

no final do qual essa linha me fez cometer um erro grave:

/bin/sh: 1: trash: not found

Eu sei que era uma coisa boba de se fazer, mas eu fiz:

mv /usr/local/bin/trash /bin/sh

pensando que shé um diretório e devo mover o script para ser executado.

Agora, quando eu quero ver uma página de manual, o sistema diz:

"Olá, não esqueça a lixeira."

E a saída de cat shé:

#!/bin/bash
spd-say "Hello, don't forget the trash bin. "

Enfim, posso fazer alguma coisa ou preciso reinstalar o sistema operacional?


2
Estou especulando, mas os trabalhos cron são executados com um ambiente muito limitado, incluindo um $ PATH com apenas alguns diretórios. Pode ser por isso que funciona no terminal, mas não através do cron. (Na verdade, quando alguma coisa funciona de um terminal normal, mas não através de cron, essa é a primeira coisa que eu verificar.)
um CVn

11
@ um CVn; Não sei qual é o problema, mas quando substituo spd-say por echo e defino o trabalho crontab: lixo> ~ / Desktop / trash.txt **, ele funciona e um arquivo é criado na minha área de trabalho. Eu acho que deveria perguntar sobre isso em outra pergunta.
Codito ergo sum 14/07/19

Sim, se você quiser perguntar sobre isso, faça-o como uma pergunta separada.
um CVn

'Agora, quando eu quero ver uma página de manual, o sistema diz: "Olá, não se esqueça da lixeira."' Para ser justo, a maioria dos mandocumentos é lixo (ou difícil de entender) #
lógico #

8
@LogicalBranch Não concordo; Eu os amo, são guias poderosos e off-line.
Codito ergo sum 14/07/19

Respostas:


30

Nos sistemas Ubuntu, /bin/shé um link simbólico para o dashshell por padrão:

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jul  7  2018 /bin/sh -> dash

Portanto (supondo que seu emulador de terminal use o shell bash e não tenha sido quebrado por seu erro) tudo o que você precisa fazer é recriar o link:

sudo ln -sf dash /bin/sh

14
OP: mv /usr/local/bin/trash /bin/sh ,sh: Você não poderia viver com seu próprio fracasso, onde isso te trouxe? De volta para mim.
LogicalBranch 14/07/19

2
@LogicalBranch, como você tem apenas 1 voto positivo para essa obra-prima?
vikarjramun 15/07/19

4
@vikarjramun parece uma obra-prima, mas eu simplesmente não entendo ... #
Nacht - Reinstate Monica

@Nacht é de Avengers: Endgame; uma linha do vilão, Thanos.
Cullub

@Cullub Oooooh ..... obrigado ... Eu tenho certeza que eu o entendi agora ...
Nacht - Reinstate Monica

7

Não, você não precisa reinstalar o sistema. / bin / sh é apenas um link para seu shell. readlink -f /bin/sh /bin/bashNo meu caso bash. Mova seu script e faça um link para seu shell favorito.


10
/ bin / sh deve realmente apontar para / bin / dash. Se você deseja alterar o shell do sistema, use sudo dpkg-reconfigure dash, conforme Como posso fazer / bin / sh apontar para / bin / bash? . Observe também que o shell do sistema não é o shell interativo padrão.
Wjandrea
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.