Macos Mac终端:正在尝试添加到/etc/shell

Macos Mac终端:正在尝试添加到/etc/shell,macos,terminal,zsh,Macos,Terminal,Zsh,这个有效 $ cat /etc/shells # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh 但这一条没有: sudo -s 'echo /usr/local/bin/zsh >&g

这个有效

$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
但这一条没有:

sudo -s 'echo /usr/local/bin/zsh >> /etc/shells'
/bin/bash: echo /usr/local/bin/zsh >> /etc/shells: No such file or directory

sudo
将字符串作为完整的命令。您应该使用shell来解释命令,如下所示:

sudo sh -c 'echo /usr/local/bin/zsh >> /etc/shells'

这将以root权限执行
sh
,并且
sh
将字符串解释为shell命令,包括
>
作为输出重定向。

您真正需要的
sudo
就是打开受保护的文件进行写入。您可以使用
tee
命令附加到文件中

echo /usr/local/bin/zsh | sudo tee -a /etc/shells > /dev/null