我试图在 /usr/local/bin 中创建自己的程序。
在此过程中,我搞砸了一些东西,现在无论何时按回车键或在命令行中输入任何内容,我都会收到这个愚蠢的消息......!
程序“sed”当前未安装。您可以通过输入以下内容进行安装
我怎样才能摆脱“sed”或者其他什么?
到目前为止,我发现“sed”是用于处理文本的 SED 流编辑器。我曾经在 .bashrc 中使用它来进行 git 解析和文本着色。我现在在 .bashrc 中禁用了 git 解析功能。
我怎样才能再次安装‘sed’?
我运行了apt-get install sed
... 它告诉我 sed 已经是最新版本。SED 现在给我带来了更多问题。我的 git 命令中断了,甚至我的 apt-get remove 和 updates 有时也会中断。
这是 SED 导致我出现问题的另一个示例,因为未找到 SED
/etc/grub.d/00_header: 1: /etc/grub.d/00_header: sed: not found
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 127
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-ex....
哪个 sed
当我运行时which sed
...它完全空白,它没有输出类似这样的内容/usr/bin/sed
。
这是我当前的 PATH=..,从 /ect/environment 中提取的
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
答案1
除了复制二进制文件apt
从另一台机器并希望它是正确的版本,这也可以通过使用或apt-get
安装sed
包来解决并通过--reinstall
选项这样.deb
即使 Ubuntu 的包管理器想它已经存在了。
sudo apt install --reinstall sed
这也适用于apt-get
而不是apt
。它只需一步即可卸载并重新安装包。此问题的情况是软件包se
已安装,但可执行文件已被删除,因此重新安装即可解决。如果没有该--reinstall
标志,则包管理器认为无需执行任何操作,因为包已安装。
您可以sudo apt update
根据需要先运行,但在这种情况下通常不需要这样做,除非您修改了软件源而没有这样做。您--purge
也可以根据需要传递标志,但这里不需要,因为这只会导致在卸载包时删除包的配置文件。
sed
是一个实用程序,程序通常被允许假设存在并依赖自身。正如您所注意到的,安装、删除或升级软件时运行的脚本可以使用sed
。这就是您的特定错误消息的来源。理论上 APT 或者dpkg
可能直接依赖它,并且无法重新安装它。实际上,这种情况似乎不会发生,我也不指望它会发生。我已经在 Ubuntu 16.04 LTS 上测试过了。
我想不出任何替换二进制文件可以解决问题但重新安装既不起作用也不立即显示错误的情况(请参阅帖子的评论)。虽然我不能 100% 确定这些说明是否适合您 - 因为可能出现的问题比问题中记录的要多 - 但/bin/sed
对于遇到此问题的其他人来说,它们通常至少应该与手动替换一样可靠。
答案2
无论如何,简单的快速修复方法是在机器中为 sed 创建软链接。首先,检查“哪个 sed”
which sed
然后创建上述结果的软链接
ln -sf /bin/sed /usr/bin/sed
希望这会有所帮助!
答案3
我的解决方案:
sed
我从正在运行的另一个 ubuntu 服务器复制了一个。scp me@server:/bin/sed /bin/sed