【问题标题】:shopt command not found in .bashrc after shell updation更新 shell 后在 .bashrc 中找不到 shopt 命令
【发布时间】:2014-12-24 07:27:03
【问题描述】:

我已将我的 shell 更新为 ZSH。当我source ~/.bashrc。我收到此错误

你的医生出了点问题。 当我执行这个命令时

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

/home/amerrnath/.bashrc:17:找不到命令:shopt /home/amerrnath/.bashrc:25:找不到命令:shopt /home/amerrnath/.bashrc:109:找不到命令:shopt /usr/share/bash-completion/bash_completion:35: `]]' 附近的解析错误

请帮我解决这个问题

【问题讨论】:

  • zsh 不是bash。你为什么要采购.bashrc
  • 您的bashrc 文件是为bash 编写的。 zsh 不是 bash。我很惊讶它正在尝试加载您的.bashrc。如果不是,并且您从.profile 或类似地址手动采购它。停止。然后用适当的zsh 初始化文件替换它。
  • 将其作为答案发布
  • 你能告诉我这个错误的根源吗
  • 不,你不想想要获取~/.bashrc的来源。您想弄清楚如何编写一个 ~/.zshrc 文件,该文件在 zsh 中执行与 .bashrcbash 中执行的相同操作。

标签: bash sh zshrc shopt


【解决方案1】:

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

所以您需要将您的环境设置附加到.zshrc 文件,然后

source ~/.zshrc

它必须有效。

rbenv github link

【讨论】:

  • 这并不能解释为什么shopt 在 bach 中工作(因为它不是内置的 bash)。 @Omnipresence 的回答提供了更多信息。
  • 你不需要source .zshrc,因为它会自动加载zsh
  • 是的,但是如果您想在当前上下文下立即加载新配置,则需要刷新它。
  • 我的echo $SHELL的输出是/bin/zsh,我的.zshrc就位。所有.bashrc.bash_profile/etc/profile//etc/bashrc r 都被完全注释掉了。默认 shell 是 zsh,macOS 是最新的(Catalina 10.15.4),但每当我运行任何 pyenv 命令时,我仍然面临这个确切的问题。我尝试将默认shell更改为bash,同样的问题也发生在那里。这是否意味着我的操作系统已损坏? Original Question
  • @saadi 将pyenv 的路径添加到.zshrc 文件中。
【解决方案2】:

在 ~/.bashrc 中放置任何东西:

切换到 bash:

exec bash

然后

source ~/.bashrc

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

切换到 zsh:

exec zsh

reference

【讨论】:

  • 这应该是我接受的答案,因为某些设置是由软件安装而不是我个人处理的
  • 感谢您节省时间 :)
  • 我可以使用bash关键字切换吗?
  • 我在上面提到了 exec bash 来切换到 bash。但是如果只使用 bash 就可以了
  • 优秀@TaimoorChangaiz。谢谢!
【解决方案3】:

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

【讨论】:

  • 你能帮我如何使用 setopt 这个shopt
  • 这不是一个简单的要求。你的 .bashrc 文件至少有 109 行,我不知道其中有多少是 cmets 或空格。我只能建议您查看您的 .bashrc 文件以弄清楚它在做什么,然后找出如何在 zsh 中做同样的事情。如果您从未自定义过您的.bashrc,那么您可能只需要将您的命令更改为:echo "export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules" >> ~/.zshrc && source ~/.zshrc
  • 这是问题的实际答案!谢谢!
【解决方案4】:

给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

【讨论】:

    【解决方案5】:

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

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

    如果不是,并且您手动采购它(来自.profile 或类似的)。别这样了。

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

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

    shopt 是一个 bash 主义。

    [[ 是一种 bash 主义。

    【讨论】:

    • echo "export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules" >> ~/.bashrc && source ~/.bashrc.当我在我的 shell 中执行这个命令时,我得到了这个错误
    • @user1475089 是的,因为您的.bashrc 文件包含不合法的zsh 内容。你需要停止这样做。如果您希望在 zsh shell 中导出该导出,请将其粘贴在 zsh 初始化文件中,而不是 .bashrc
    • 可以给你详细解释一下
    • @user1475089 您正在尝试在zsh 中使用bash 内置功能。这只比试图用叉子吃汤差一点。你需要停止用叉子吃汤,开始学习如何使用勺子。 (去阅读zsh 以及如何用它做你想做的事情......或者停止使用zsh 并返回使用`bash。)
    【解决方案6】:

    shopt 不是命令,而是内置的 shell。您可以通过在 bash 中运行以下命令来发现这一点:

    type shopt
    

    输出将是:

    shopt is a shell builtin
    

    解决方案:

    第一步:

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

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

    #! /bin/bash
    
    shopt $*
    

    第二步:

    chmod +x /usr/local/bin/shopt
    

    第三步:

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

    第四步:

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

    【讨论】:

      【解决方案7】:

      在从 16.04 升级到 17.10 和 18.04 后,出于某种原因,符号链接 /bin/sh 被设置回破折号而不是 bash。更新此链接:

      sudo cd /bin && ln -sf bash sh
      

      帮我解决了这个问题

      【讨论】:

      • 在搜索了我没有通过几个步骤在终端中获得历史记录和 cmd 完成的原因后找到了这个。 HISTFILE -sh: history: not found 就是其中之一。将用户添加到 Ubuntu 服务器后出现。我希望这条线可以帮助其他人更快地找到它...
      猜你喜欢
      • 2021-09-16
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多