Versehentlich modifiziertes `/ bin / sh '

16

Ich hatte dieses Skript:

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

Also erinnerte es mich an das, was ich tun sollte, und ich verschob es zu /usr/local/bin/und der Befehl trashsprach das Argument aus. Dann stellte ich einen Crontab-Job ein , damit es mich jeden Tag daran erinnerte, was ich tun wollte. Aber die Crontab funktionierte nicht und ich konnte nicht verstehen warum (es erledigt andere Jobs einwandfrei).

Einmal sah ich diese Nachricht in meinem Terminal:

You have new mail in /var/mail/root

Am Ende dieser Zeile habe ich einen schweren Fehler gemacht:

/bin/sh: 1: trash: not found

Ich weiß, dass es eine dumme Sache war, aber ich tat es:

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

denke, das shist ein Verzeichnis und ich sollte das Skript dorthin verschieben, um ausgeführt zu werden.

Wenn ich jetzt eine Manpage sehen möchte, sagt das System:

"Hallo, vergiss den Mülleimer nicht."

Und die Ausgabe von cat shist:

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

Wie auch immer, kann ich etwas tun oder muss ich mein Betriebssystem neu installieren?

Codito ergo Summe
quelle
2
Ich spekuliere, aber Cron-Jobs laufen in einer sehr begrenzten Umgebung, einschließlich eines $ PATH mit nur wenigen Verzeichnissen. Das könnte der Grund sein, warum es vom Terminal aus funktioniert, aber nicht über cron. (Wenn etwas von einem normalen Terminal aus funktioniert, aber nicht über cron, überprüfe ich das als Erstes.)
CVn
1
@ ein CVn; Ich weiß nicht, was das Problem ist, aber wenn ich spd-say durch echo ersetze und den crontab-Job einstelle: trash> ~ / Desktop / trash.txt **, funktioniert es und eine Datei wird auf meinem Desktop erstellt. Ich denke, ich sollte in einer anderen Frage danach fragen.
Codito ergo sum
Ja, wenn Sie diesbezüglich Fragen haben, stellen Sie diese bitte als separate Frage.
ein Lebenslauf
‚Nun, wenn ich einen Mann Seite des System sagt sehen will:‚ Hallo, vergessen Sie nicht den Mülleimer‘‘ Um fair zu sein, die meisten mansind docs Müll (oder schwer zu verstehen)
LogicalBranch
8
@LogicalBranch Ich stimme nicht zu; Ich liebe sie, sie sind mächtige Offline-Guides.
Codito ergo sum

Antworten:

30

In Ubuntu-Systemen /bin/shist dashstandardmäßig ein symbolischer Link zur Shell:

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

Also (vorausgesetzt, Ihr Terminal-Emulator verwendet die Bash-Shell und ist nicht durch Ihren Fehler kaputt gegangen), müssen Sie nur den Link neu erstellen:

sudo ln -sf dash /bin/sh
Stahlfahrer
quelle
14
OP: mv /usr/local/bin/trash /bin/sh ,sh: Du konntest nicht mit deinem eigenen Versagen leben, wohin hat dich das gebracht? Zurück zu mir.
LogicalBranch
2
@LogicalBranch wie hast du nur 1 upvote für das meisterwerk?
Vikarjramun
4
@vikarjramun es klingt wie ein Meisterwerk, aber ich verstehe es einfach nicht ganz ...
Nacht - Wiedereinsetzung von Monica
@ Nacht es ist von Avengers: Endgame; eine Zeile aus dem Bösewicht, Thanos.
Cullub
@Cullub Oooooh ..... danke ... Ich bin mir ziemlich sicher, dass ich es jetzt verstehe ...
Nacht - Wiedereinsetzung von Monica
7

Nein, Sie müssen Ihr System nicht neu installieren. / bin / sh ist nur ein Softlink zu Ihrer Shell. readlink -f /bin/sh /bin/bashIn meinem Fall bash. Verschieben Sie Ihr Skript und erstellen Sie einen Softlink zu Ihrer Lieblingsshell.

niemand
quelle
10
/ bin / sh sollte eigentlich auf / bin / dash zeigen. Wenn Sie die System-Shell ändern möchten, verwenden Sie sudo dpkg-reconfigure dashunter Wie kann ich / bin / sh auf / bin / bash verweisen? . Beachten Sie auch, dass die System-Shell nicht die standardmäßige interaktive Shell ist.
Wjandrea