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

问题描述 投票:24回答:7

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

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

echo "export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules" >> ~/.bashrc && source ~/.bashrc

/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]

请帮我解决这个问题

bash sh zshrc shopt
7个回答
50
投票

zsh使用env profile ~/.zshrc,而不是~/.bashrc

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

source ~/.zshrc

它必须工作。

rbenv github link


26
投票

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

切换到bash:

exec bash

然后

source ~/.bashrc

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

切换到zsh:

exec zsh

reference


13
投票

shopt不是命令,而是内置的shell。 bash知道如何处理它,因为它是内置的bash,但zsh不知道它是什么。您将要查看setopt这是一个内置的zsh,并将这些值放入一个新的.zshrc脚本中。


7
投票

你的bashrc文件是为bash编写的。 zsh不是bash

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

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

然后你可以编写一个合适的zsh init文件。

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

shopt是一个bash-ism。

[[是一个bash-ism。


2
投票

做一个shopt的别名,并称之为扔zsh

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

sudo vi /usr/bin/shopt

店内

#!/bin/bash
args='';
for item in $@
  do
    args="$args $item";
  done
shopt $args;

让它可执行

sudo chmod +x /usr/bin/shopt

在.zshrc中创建别名

echo "alias shopt='/usr/bin/shopt'" >> ~/.zshrc

0
投票

由于某种原因,从16.04升级到17.10和18.04后,symlink / bin / sh被设置回短划线而不是bash。更新此链接:

sudo cd /bin && ln -sf bash sh

为我解决了这个问题


0
投票

shopt不是命令,而是内置的shell。您可以通过在bash中运行以下命令来找到它:

type shopt

输出将是:

shopt is a shell builtin

solution:

步骤1:

echo "#! /bin/bash\n\nshopt \$*\n" > /usr/local/bin/shopt

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

#! /bin/bash

shopt $*

第2步:

chmod +x /usr/local/bin/shopt

第3步:

ln -s /usr/local/bin/shopt /usr/bin/shopt

第4步:

echo "alias shopt='/usr/bin/shopt'" >> ~/.zshrc
© www.soinside.com 2019 - 2024. All rights reserved.