`/ Bin / sh 'modifié par erreur


16

J'avais ce script:

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

Donc, cela m'a rappelé ce que je devais faire, et je l'ai déplacé vers /usr/local/bin/et la commande a trashprononcé l'argument, puis j'ai défini un travail crontab , pour qu'il me rappelle tous les jours ce que je voulais faire. Mais le crontab n'a pas fonctionné et je ne comprenais pas pourquoi (il fait parfaitement d'autres tâches).

Une fois que j'ai vu ce message dans mon terminal:

You have new mail in /var/mail/root

au bout duquel cette ligne m'a fait faire une mauvaise erreur:

/bin/sh: 1: trash: not found

Je sais que c'était une chose stupide à faire, mais je l'ai fait:

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

pensant que shc'est un répertoire et je devrais y déplacer le script pour être exécuté.

Maintenant, quand je veux voir une page de manuel, le système dit:

"Bonjour, n'oublie pas la poubelle."

Et la sortie de cat shest:

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

Quoi qu'il en soit, puis-je faire quoi que ce soit ou je dois réinstaller mon système d'exploitation?


2
Je spécule, mais les tâches cron s'exécutent avec un environnement très limité, y compris un $ PATH avec seulement quelques répertoires. C'est peut-être pourquoi cela fonctionne à partir du terminal, mais pas via cron. (En fait, quand quelque chose fonctionne à partir d'un terminal normal mais pas via cron, c'est la première chose que je vérifie.)
un CVn

1
@ un CVn; Je ne sais pas quel est le problème, mais lorsque je remplace spd-say par echo et que je définis le travail crontab: trash> ~ / Desktop / trash.txt **, cela fonctionne et un fichier est créé sur mon bureau. Je pense que je devrais poser des questions à ce sujet dans une autre question.
Codito ergo sum du

Oui, si vous souhaitez poser des questions à ce sujet, veuillez le poser comme une question distincte.
un CVn le

"Maintenant, quand je veux voir une page de manuel, le système dit:" Bonjour, n'oubliez pas la corbeille. "" Pour être honnête, la plupart des mandocuments sont des ordures (ou difficiles à comprendre)
LogicalBranch

8
@LogicalBranch Je ne suis pas d'accord; Je les aime, ce sont de puissants guides hors ligne.
Codito ergo sum du

Réponses:


30

Dans les systèmes Ubuntu, /bin/shest un lien symbolique vers le dashshell par défaut:

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

Donc (en supposant que votre émulateur de terminal utilise le shell bash, et n'a pas été brisé par votre erreur), tout ce que vous avez à faire est de recréer le lien:

sudo ln -sf dash /bin/sh

14
OP: mv /usr/local/bin/trash /bin/sh ,sh: Vous ne pouviez pas vivre avec votre propre échec, où cela vous a-t-il amené? Retour à moi.
LogicalBranch

2
@LogicalBranch comment avez-vous seulement 1 vote positif pour ce chef-d'œuvre?
vikarjramun

4
@vikarjramun cela ressemble à un chef-d'œuvre, mais je ne comprends pas tout à fait ...
Nacht - Réinstallez Monica

@Nacht c'est de Avengers: Endgame; une ligne du méchant, Thanos.
Cullub

@Cullub Oooooh ..... merci ... je suis presque sûr de l'avoir maintenant ...
Nacht - Rétablir Monica

7

Non, vous n'avez pas besoin de réinstaller votre système. / bin / sh n'est qu'un lien logiciel vers votre shell. readlink -f /bin/sh /bin/bashDans mon cas bash. Déplacez votre script et créez un lien logiciel vers votre shell préféré.


10
/ bin / sh devrait en fait pointer vers / bin / dash. Si vous souhaitez modifier le shell du système, utilisez sudo dpkg-reconfigure dash, selon Comment puis-je faire en sorte que / bin / sh pointe vers / bin / bash? . Notez également que le shell système n'est pas le shell interactif par défaut.
wjandrea
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.