将 $SHELL 重置为其默认值

将 $SHELL 重置为其默认值

我阅读了这些问题的答案(&&),他们都不适合我!

% uname --operating-system --kernel-name --kernel-version --kernel-release 
Linux 4.9.6-200.fc25.x86_64 #1 SMP Thu Jan 26 10:17:45 UTC 2017 GNU/Linux

我下载/安装 st 终端(简单终端),我想将其设置为我的主要终端模拟器,但我做了一个巨大的错误,它正在以 root 身份运行此命令:% su -c 'chsh -s /usr/local/bin/st'

现在,每当我想以 root 身份登录/运行命令时,都会打印一条消息:Can't open display。我尝试了以下命令(如下所示),但它们都不起作用。

% env -i bash
% su
Password:
Can't open display
% su -c 'env -i bash'
Password:
Can't open display
% su -c 'chsh -s /usr/bin/bash'
Password:
Can't open display
% su -s bash
Password: 
su: using restricted shell /usr/local/bin/st
Can't open display
% su
Password:
Couldn't read from shell: Input/output error
child finished with error '256'
% 

更新: 我尝试按照建议的答案中的说明进行操作

  1. 从引导加载程序提示符中,导航到您引导的常规条目。
  2. 不按 Enter 键,而是按 e 首先编辑内核命令行参数
  3. 在打开的编辑器中,使用箭头键找到以 linux 开头的行,转到其末尾并将 init=/bin/sh 附加到它。这将暂时用系统的 shell 替换您的 init 系统,并且由于 init 是由 root 启动的,因此这将是 root shell。
  4. 按 CTRL+X 启动修改后的条目
  5. 使用正确的参数再次运行 chsh

但是当我执行第4步时,我面临着屏幕!

答案1

我犯了一个巨大的错误

你确实做到了。解决此问题的方法是找到一种以超级用户身份运行命令但不使用超级用户配置的登录 shell 的方法。

救援和紧急模式无法实现这一点,除非你很幸运能拥有/usr单独的光盘卷——讽刺的是,这与过去 30 年的趋势相反。如果包含的光盘卷/usr/local/bin/st不是根目录,则该文件将无法执行。在这种情况下,请使用以下命令紧急登录suloginemergency-login将尝试回退到硬连线 shell 名称。

实现此目的的另一种方法是使用-s选项 to sudo,它运行环境变量给定的 shellSHELL作为交互式 shell,而不是超级用户的用户帐户数据库中给定的 shell。 (对比-i选项。)

doas -s类似地使用环境变量指定的 shell SHELL

某些操作系统的su命令也可以通过--shell选项来执行此操作。但这并不普遍。此外,正如您所遇到的,如果帐户数据库中的超级用户 shell 不在授权 shell 列表 ( /etc/shells) 中,它会被忽略。

相关内容