Modificato erroneamente `/ bin / sh '


16

Ho avuto questo script:

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

Quindi mi ha ricordato cosa avrei dovuto fare, e l'ho spostato /usr/local/bin/e il comando ha trashpronunciato l'argomento, quindi ho impostato un lavoro crontab , per farmi ricordare ogni giorno cosa volevo fare. Ma il crontab non ha funzionato e non riuscivo a capire perché (fa altri lavori in modo impeccabile).

Una volta ho visto questo messaggio nel mio terminale:

You have new mail in /var/mail/root

al termine del quale questa riga mi ha fatto fare un brutto errore:

/bin/sh: 1: trash: not found

So che è stata una cosa sciocca da fare ma ho fatto:

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

pensando che shsia una directory e dovrei spostare lo script lì per essere eseguito.

Ora, quando voglio vedere una pagina man, il sistema dice:

"Ciao, non dimenticare il cestino."

E l'output di cat shè:

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

In ogni caso, posso fare qualcosa o devo reinstallare il mio sistema operativo?


2
Sto speculando, ma i lavori cron vengono eseguiti con un ambiente molto limitato, incluso $ PATH con poche directory. Questo potrebbe essere il motivo per cui funziona dal terminale, ma non tramite cron. (In effetti, quando qualcosa funziona da un normale terminale ma non tramite cron, questa è la prima cosa che controllo.)
un CVn

1
@ a CVn; Non so quale sia il problema, ma quando sostituisco spd-say con echo e imposto il lavoro crontab: trash> ~ / Desktop / trash.txt **, funziona e un file viene creato sul mio desktop. Penso che dovrei chiederlo in un'altra domanda.
Codito ergo sum,

Sì, se vuoi fare una domanda a riguardo, ti preghiamo di fare una domanda separata.
un CVn

'Ora, quando voglio vedere una pagina man il sistema dice: "Ciao, non dimenticare il cestino."' Ad essere onesti, la maggior parte dei mandocumenti sono spazzatura (o difficile da capire)
LogicalBranch

8
@LogicalBranch Non sono d'accordo; Li adoro, sono potenti guide offline.
Codito ergo sum,

Risposte:


30

Nei sistemi Ubuntu, /bin/shè un collegamento simbolico alla dashshell per impostazione predefinita:

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

Quindi (supponendo che il tuo emulatore di terminale usi la shell bash e non si sia rotto per errore) tutto ciò che devi fare è ricreare il link:

sudo ln -sf dash /bin/sh

14
OP: mv /usr/local/bin/trash /bin/sh ,sh: Non potresti vivere con il tuo fallimento, dove ti ha portato? Di nuovo a me
LogicalBranch,

2
@LogicalBranch come hai 1 solo voto per quel capolavoro?
vikarjramun,

4
@vikarjramun sembra un capolavoro ma non riesco proprio a capirlo ...
Nacht - Reinstate Monica il

@Nacht è di Avengers: Endgame; una linea dal cattivo, Thanos.
Cullub,

@Cullub Oooooh ..... grazie ... sono abbastanza sicuro ho capito ora ...
Nacht - Ripristinare Monica

7

No, non è necessario reinstallare il sistema. / bin / sh è solo un softlink per la tua shell. readlink -f /bin/sh /bin/bashNel mio caso bash. Sposta il tuo script e crea un softlink sulla tua shell preferita.


10
/ bin / sh dovrebbe effettivamente puntare a / bin / dash. Se vuoi cambiare la shell di sistema, usa sudo dpkg-reconfigure dash, come Come posso fare / bin / sh puntare a / bin / bash? . Si noti inoltre che la shell di sistema non è la shell interattiva predefinita.
wjandrea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.