Помилково модифікований `/ bin / sh '


16

У мене був такий сценарій:

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

Тож це нагадало мені, що я маю робити, і я перемістив його до /usr/local/bin/команди, і команда trashвиголосила аргумент, потім я встановив завдання crontab , щоб воно нагадувало мені щодня, що я хотів зробити. Але crontab не працював, і я не міг зрозуміти, чому (це робить інші завдання бездоганно).

Як тільки я побачив це повідомлення у своєму терміналі:

You have new mail in /var/mail/root

наприкінці якого цей рядок змусив мене помилитися:

/bin/sh: 1: trash: not found

Я знаю, що це було дурною справою, але я зробив:

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

думаючи, що shце каталог, і я повинен перемістити скрипт туди, щоб виконати.

Тепер, коли я хочу побачити сторінку чоловіка, система говорить:

"Привіт, не забувайте смітник".

І вихід cat sh:

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

У будь-якому випадку, чи можу я щось зробити або мені доведеться перевстановити операційну систему?


2
Я спекулюю, але робота з Cron працює в дуже обмеженому середовищі, включаючи $ PATH з кількома каталогами. Це може бути причиною того, що він працює від терміналу, але не через cron. (Насправді, коли щось працює з нормального терміналу, але не через cron, це перше, що я перевіряю.)
CVn

1
@ a CVn; Я не знаю, в чому проблема, але коли я замінюю spd -say на echo і встановлюю завдання crontab: trash> ~ / Desktop / trash.txt **, він працює і на моєму робочому столі створюється файл. Думаю, я повинен про це запитати в іншому питанні.
Codito ergo sum

Так, якщо ви хочете запитати про це, будь ласка, задайте це як окреме питання.
CVn

"Тепер, коли я хочу переглянути сторінку чоловіка, система каже:" Привіт, не забувайте смітник "." Справедливості, більшість manдокументів є сміттям (або важко зрозуміти)
LogicalBranch

8
@LogicalBranch Я не згоден; Я люблю їх, вони потужні, офлайн-путівники.
Кодито ergo сума

Відповіді:


30

У системах Ubuntu /bin/shє символьним посиланням на dashоболонку за замовчуванням:

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

Отже (якщо припустити, що ваш емулятор термінала використовує оболонку bash, і його не помилили помилка), все, що вам потрібно зробити - це створити посилання:

sudo ln -sf dash /bin/sh

14
ОП: mv /usr/local/bin/trash /bin/sh ,sh: Ви не могли жити зі своєю власною невдачею, куди це вас привело? Назад до мене.
LogicalBranch

2
@LogicalBranch, як у вас є лише 1 підсумок за цей шедевр?
vikarjramun

4
@vikarjramun це звучить як шедевр, але я просто не отримую його ...
Nacht -

@Nacht це від Месники: Endgame; лінія від лиходія, Танос.
Cullub

@Cullub Oooooh ..... дякую ... я майже впевнений, що зараз я це отримую ...
Nacht -

7

Ні, вам не доведеться перевстановлювати систему. / bin / sh - лише м'яке посилання на вашу оболонку. readlink -f /bin/sh /bin/bashУ моєму випадку баш. Перемістіть сценарій та зробіть софтпосилання до улюбленої оболонки.


10
/ bin / sh насправді має вказувати на / bin / dash. Якщо ви хочете змінити системну оболонку, використовуйте sudo dpkg-reconfigure dash, згідно з тим, як я можу зробити / bin / sh вказувати на / bin / bash? . Також зауважте, що системна оболонка не є інтерактивною оболонкою за замовчуванням.
wjandrea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.