错误地修改了`/ 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,比如说通过回声,并设置crontab的工作:垃圾>〜/桌面/ trash.txt **,它的工作原理与一个文件在我的桌面上创建。我想我应该再问一个问题。
Codito ergo sum

是的,如果您想问这个问题,请单独提出一个问题。
的CVn

“现在,当我想查看手册页时,系统会说:“你好,请不要忘记垃圾桶。”公平地说,大多数man文档都是垃圾(或很难理解)
LogicalBranch

8
@LogicalBranch我不同意;我喜欢它们;它们是功能强大的离线指南。
Codito ergo sum

Answers:


30

在Ubuntu系统中,默认情况下/bin/sh是指向dashshell 的符号链接:

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

因此(假设您的终端仿真器使用了bash shell,并且没有被您的错误破坏),您需要做的就是重新创建链接:

sudo ln -sf dash /bin/sh

14
OP: mv /usr/local/bin/trash /bin/shsh::您不能忍受自己的失败,那把您带到了哪里?回到我的身边。
LogicalBranch

2
@LogicalBranch您如何仅对该作品有1个赞?
vikarjramun19年

4
@vikarjramun,听起来像是杰作,但我只是不太明白……
Nacht-恢复莫妮卡

@Nacht来自复仇者联盟:残局;恶棍塔诺斯的战线。
Cullub '19

@Cullub Oooooh .....谢谢...我很确定我现在知道了...
Nacht-恢复莫妮卡

7

不,您不必重新安装系统。/ bin / sh仅仅是到您的shell的软链接。readlink -f /bin/sh /bin/bash就我而言 移动您的脚本并建立软链接到您喜欢的外壳。


10
/ bin / sh实际上应该指向/ bin / dash。如果要更改系统外壳,请使用sudo dpkg-reconfigure dash如何使/ bin / sh指向/ bin / bash?。还要注意,系统外壳不是默认的交互式外壳。
wjandrea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.