Modificado erróneamente `/ bin / sh '


16

Tenía este script:

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

Entonces me recordó lo que se suponía que debía hacer, lo moví /usr/local/bin/y el comando trashpronunció el argumento, luego configuré un trabajo crontab , para que me recordara todos los días lo que quería hacer. Pero el crontab no funcionó y no pude entender por qué (hace otros trabajos sin problemas).

Una vez que vi este mensaje en mi terminal:

You have new mail in /var/mail/root

al final de lo cual esta línea me hizo cometer un grave error:

/bin/sh: 1: trash: not found

Sé que fue una tontería pero lo hice:

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

pensando que shes un directorio y debería mover el script allí para que se ejecute.

Ahora, cuando quiero ver una página de manual, el sistema dice:

"Hola, no olvides la papelera".

Y la salida de cat shes:

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

De todos modos, ¿puedo hacer algo o tengo que reinstalar mi sistema operativo?


2
Estoy especulando, pero los trabajos cron se ejecutan con un entorno muy limitado, que incluye un $ PATH con solo unos pocos directorios. Esa podría ser la razón por la que funciona desde la terminal, pero no a través de cron. (De hecho, cuando algo funciona desde un terminal normal, pero no a través de cron, eso es lo primero que puedo comprobar.)
un CVn

1
@ a CVn; No sé cuál es el problema, pero cuando reemplazo spd-say por echo y configuro el trabajo crontab: trash> ~ / Desktop / trash.txt **, funciona y se crea un archivo en mi escritorio. Creo que debería preguntar sobre eso en otra pregunta.
Codito ergo sum

Sí, si desea preguntar sobre eso, hágalo como una pregunta por separado.
un CVn

'Ahora, cuando quiero ver una página de manual del sistema dice: ' Hola, no se olvide de la papelera de reciclaje'' Para ser justos, la mayoría de los mandocumentos son basura (o difícil de entender)
LogicalBranch

8
@LogicalBranch No estoy de acuerdo; Los amo; son poderosos, guías fuera de línea.
Codito ergo sum

Respuestas:


30

En los sistemas Ubuntu, /bin/shes un enlace simbólico al dashshell por defecto:

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

Entonces (suponiendo que su emulador de terminal use el shell bash y no se haya roto por su error) todo lo que necesita hacer es volver a crear el enlace:

sudo ln -sf dash /bin/sh

14
OP: mv /usr/local/bin/trash /bin/sh ,sh: No podrías vivir con tu propio fracaso, ¿a dónde te trajo eso? De vuelta a mí.
LogicalBranch

2
@LogicalBranch, ¿cómo solo tienes 1 voto a favor para esa obra maestra?
vikarjramun

44
@vikarjramun suena como una obra maestra, pero no lo entiendo ...
Nacht - Restablece a Monica el

@Nacht es de Avengers: Endgame; una línea del villano, Thanos.
Cullub

@Cullub Oooooh ..... gracias ... Estoy bastante seguro de que ahora lo entiendo ...
Nacht - Restablecer Mónica

7

No, no tiene que reinstalar su sistema. / bin / sh es solo un enlace suave a su shell. readlink -f /bin/sh /bin/bashEn mi caso bash. Mueve tu script y crea un enlace suave a tu shell favorito.


10
/ bin / sh debería apuntar a / bin / dash. Si desea cambiar el shell del sistema, use sudo dpkg-reconfigure dash, según ¿Cómo puedo hacer que / bin / sh apunte a / bin / bash? . También tenga en cuenta que el shell del sistema no es el shell interactivo predeterminado.
wjandrea
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.