关于如何将 shell 改为 fish,我有什么想法吗?
$ sudo usermod -s /usr/bin/fish jaan
usermod: user 'jaan' does not exist in /etc/passwd
$ getent passwd $USER
jaan:x:15466:94:Jaan A:/home/jaan:/bin/zsh
相关问题:尝试更改默认 shell 时,/etc/passwd 中不存在该用户 好像它使用 ldap。
$ cat /etc/nsswitch.conf
passwd: compat ldap
group: compat ldap
shadow: compat ldap
# Having the NOTFOUND=return bit was breaking dns resolution on web1 and web2. But we probably
# don't want any of the mdns stuff so let's get rid of it all.
#hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: ldap
automount: ldap
所以我安装了ldap相关的包。
$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
Login Shell [/bin/zsh]: /usr/bin/fish
Traceback (most recent call last):
File "/usr/bin/chsh.ldap", line 69, in <module>
constants.NSLCD_USERMOD_SHELL: shell,
File "/usr/share/nslcd-utils/nslcd.py", line 128, in usermod
assert con.get_response() == constants.NSLCD_RESULT_BEGIN
File "/usr/share/nslcd-utils/nslcd.py", line 103, in get_response
return self.read_int32()
File "/usr/share/nslcd-utils/nslcd.py", line 71, in read_int32
return _int32.unpack(self.read(_int32.size))[0]
struct.error: unpack requires a string argument of length 4
$ which fish
/usr/bin/fish
$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
Login Shell [/bin/zsh]: "/usr/bin/fish"
/usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell
$ /usr/bin/fish
(standard_in) 1: syntax error
Welcome to fish, the friendly interactive shell
答案1
提示一下:/usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell
。看来你应该/usr/bin/fish
添加/etc/shells
。
答案2
稍等一下,这是一个 LDAP 用户,LDAP 中有一个设置允许您更改其中用户的默认 shell。
您可以安装ldap 帐户管理器它为您提供了用于 ldap 配置的 webfrontent。
apt install ldap-account-manager
您可以在您想要处理配置的任何服务器上完成此操作。因为无论如何您都需要在配置文件中配置服务器。但我建议您将其安装在实际运行 ldap 的服务器上,这样您就可以更容易记住它。
答案3
引用阿吉米奇的话这里,
您可以通过运行 chsh -s 将 fish 设置为您的默认 shell,
which fish
然后注销并重新登录。(要将其设置回 bash,您当然需要使用 Fish 语法,例如 chsh -s(which bash))
只需使用chsh -s which fish
并确保注销并重新登录或重新启动计算机。
顺便说一下,这可能是重复的:如何将 fish 设置为默认 shell?