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.