Ошибочно модифицированный `/ 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
@ CVn; Я не знаю, в чем проблема, но когда я заменяю spd-say на echo и устанавливаю задание crontab: trash> ~ / Desktop / trash.txt **, оно работает, и на моем рабочем столе создается файл. Я думаю, что я должен спросить об этом в другом вопросе.
Codito Ergo Sum

Да, если вы хотите спросить об этом, пожалуйста, задайте его как отдельный вопрос.
CVn

«Теперь, когда я хочу увидеть справочную страницу, система говорит:« Здравствуйте, не забывайте мусорное ведро ».« Справедливости ради, большинство manдокументов - мусор (или трудный для понимания)
LogicalBranch

8
@LogicalBranch Я не согласен; Я люблю их, они мощные, автономные гиды.
Codito

Ответы:


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
OP: mv /usr/local/bin/trash /bin/sh ,sh: Вы не могли жить со своей собственной неудачей, откуда это привело вас? Обратно мне.
LogicalBranch

2
@LogicalBranch как у вас есть только 1 голос за этот шедевр?
Викарджрамун

4
@vikarjramun это звучит как шедевр, но я просто не совсем понимаю ...
Nacht - Восстановить Монику

@Nacht это от Мстителей: Эндшпиль; линия от злодея, Танос.
Cullub

@Cullub О-о-о-о-о-о-о… спасибо ... Я почти уверен, что понял это сейчас ...
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.