在shell更新之后,在.bashrc中找不到shopt命令

Ame*_*ath 29 bash sh zshrc shopt

我已将我的shell更新为ZSH.当我来源〜/ .bashrc.我收到了这个错误

哟医生有一些错误.当我执行此命令

echo "export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules" >> ~/.bashrc && source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

/home/amerrnath/.bashrc:17: command not found: shopt /home/amerrnath/.bashrc:25: command not found: shopt /home/amerrnath/.bashrc:109: command not found: shopt /usr/share/bash-completion/bash_completion:35: parse error near]]"

请帮我解决这个问题

sud*_*doz 58

zsh使用env配置文件~/.zshrc,而不是~/.bashrc.

所以你需要将你的env设置附加到.zshrc文件然后

source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

它必须工作.

rbenv github链接

  • 这并不能解释为什么 `shopt` 在 bach 中起作用(因为它不是内置的 bash)。@Omnipresence 的回答提供了更多信息。 (11认同)

Tai*_*aiz 29

要在〜/ .bashrc中放置任何内容:

切换到bash:

exec bash
Run Code Online (Sandbox Code Playgroud)

然后

source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

切换到bash不会影响新的终端窗口.但是如果你想将当前窗口切换到zsh.

切换到zsh:

exec zsh
Run Code Online (Sandbox Code Playgroud)

参考

  • 根据我的说法,这应该是公认的答案,因为某些设置是由安装的软件而不是我个人处理的 (2认同)

小智 17

shopt不是命令,而是内置的shell.bash知道该怎么做因为它是bash内置的,但是zsh不知道它是什么.您将需要查看setopt哪个是zsh内置函数,并将这些值放入新的.zshrc脚本中.


小智 10

为shopt创建别名并通过zsh调用

这里描述了一个快速解决方案:https://github.com/larz258/Zshopt

sudo vi /usr/bin/shopt
Run Code Online (Sandbox Code Playgroud)

店内

#!/bin/bash
args='';
for item in $@
  do
    args="$args $item";
  done
shopt $args;
Run Code Online (Sandbox Code Playgroud)

使其可执行

sudo chmod +x /usr/bin/shopt
Run Code Online (Sandbox Code Playgroud)

在 .zshrc 中创建别名

echo "alias shopt='/usr/bin/shopt'" >> ~/.zshrc
Run Code Online (Sandbox Code Playgroud)


Eta*_*ner 7

你的bashrc文件是为bash.zsh不是bash.

我很惊讶zsh是试图加载你.bashrc的.

如果不是,您手动(从.profile或类似)采购.别那样做.

然后你可以编写一个合适的zshinit文件.

如果你想使用zsh那么你需要使用zsh而不是bash.

shopt 是一种打击主义.

[[ 是一种打击主义.

  • @ user1475089您正试图在`zsh`中使用`bash`内置功能.这比使用叉子吃汤更糟糕.你需要停止使用叉子吃汤,并开始学习如何使用汤匙.(去读一下`zsh`以及如何用它来做你想要的东西......或者停止使用`zsh`并回到使用`bash.) (2认同)

hxy*_*yhi 6

shopt不是命令,而是内置的 shell。您可以通过在 bash\xef\xbc\x9a 中运行以下命令来找到这一点

\n\n
type shopt\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出将是:

\n\n
shopt is a shell builtin\n
Run Code Online (Sandbox Code Playgroud)\n\n

解决方案:

\n\n

步骤1:

\n\n
echo "#! /bin/bash\\n\\nshopt \\$*\\n" > /usr/local/bin/shopt\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你会得到/usr/local/bin/shopt:

\n\n
#! /bin/bash\n\nshopt $*\n
Run Code Online (Sandbox Code Playgroud)\n\n

第2步:

\n\n
chmod +x /usr/local/bin/shopt\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤3:

\n\n
ln -s /usr/local/bin/shopt /usr/bin/shopt\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤4:

\n\n
echo "alias shopt=\'/usr/bin/shopt\'" >> ~/.zshrc\n
Run Code Online (Sandbox Code Playgroud)\n