ZSH无法识别我的别名?

73

我在使用iTerm2和zsh时,它没有识别我的别名。有时我不得不在IDE中工作,不能轻松地用vim编辑一些东西,而且那些蠢蛋认为将他们的应用程序命名为MyReallyLongApplicationName.app很好,由于.html文件默认在浏览器中打开,所以我必须要:

open -a MyReallyLongApplicationName.app something.html

我在我的 .zshrc 文件中有一个别名,例如:

alias ide="open -a MyReallyLongApplicationName.app"
但是zsh不认识我的别名。我试了另一个别名,只是为了看看是不是我的问题,但我创建的所有别名都没有被承认。只会得到“zsh:command not found: ide”或其他类似的东西。
所以我不确定我做错了什么,我一整天都在搜索尝试修复zsh和类似的东西。请注意,我不是Linux / Unix系统的专家,如果您过于技术化和模糊,我可能不会理解您告诉我的内容。
谢谢!

a)在交互式会话或脚本中是否出现“命令未找到”?b)如果在交互式会话中定义输入的命令(即alias ide=… <CR> ide <CR>),别名是否有效?c)你的.zshrc里有什么内容?d)如果您使用更新的zshrc在交互式会话中启动zsh -i,它是否有效? - ZyX
我在修改后没有进行源代码管理...抱歉。 - o_O
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。 - jww
在我的情况下,这是由于不必要的撇号(')导致的一个损坏的~/.zshrc文件。 - EladTal
16个回答

2

我在~/.bash_profile中设置了所有的别名,所以我在~/.zshrc的最后一行添加了以下代码:. ~/.bash_profile,这样就可以正常使用了。


0
这可能听起来很简单,但如果你是第一次在zsh中使用别名,请确保在~/.zshrc文件中取消注释你想要使用的别名。
使用文本编辑器(如vim)打开你的~/.zshrc文件,并取消注释你的别名:
vim ~/.zshrc

0
对于那些仍在苦苦挣扎的人,之前的解决方案都不适用于我。 我最终成功解决了这个问题,移除 '=' 符号周围的额外空格。 替换为:

alias test = 'my command'

alias test='my command'


0

我有一个错误明显的不好的alias行。

这些zsh自定义脚本中没有错误检查,因此您可能会像我一样浪费几个宝贵的小时,试图找出为什么您的自定义别名或函数未在iTerm2中加载。

我正在使用MacOS Ventura 13.1和iTerm 2 v3.4,zsh 5.8.1。

我重新加载并使用 . ~/zshrc,并遵循了上面很多建议。

最终,我将我的别名和函数列表复制到了 ~/.zshrc 文件中。 另一个 ~/.zshrc 给了我一个坏的模式错误。 对于我的情况,解决方法如下: 与Unicode字符串或需要 ' '(单引号)转义并需要使用另一个引号字符(双引号)封装别名字符串的行,在这种行中必须使用其他引号字符(双引号)来包括别名字符串。 在我的情况下,我输入了:

alias fixitemerrow='printf '\e[?2004l''

修复方法是:- alias fixitemerrow=" printf '\e[?2004l' "

不要在别名赋值中添加空格。 这里仅用于说明。 空格也需要双重封装 " ' ' "。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - chrslg

0
我同时使用bash和zsh,有一个共用的 .bashrc、.bash_aliases 和 .zshrc 文件。
将以下内容加入你的 .zshrc 文件中以加载 bash 文件:
# shortcut to refresh .zshrc
alias refz="source ~/.zshrc"

# Load bash files to zsh
test -f $HOME/.bashrc && . $HOME/.bashrc
test -f $HOME/.bash_aliases && . $HOME/.bash_aliases

如果您拥有很多bash别名和函数,可能会遇到一些错误信息,例如:

/proc/self/fd/13:12310: bad option: -t

这是由.bash_aliases或.bashrc文件中特定的bash行引起的。

您可以使用以下命令跳过这些问题:

if [ -n "$BASH" ] ;then
    lines to ignore by zsh
fi


例如 kubectl 自动补全。
# To fix error massage .bashrc:16: command not found: shopt
# Check if bash is the current shell, if not, skip it
if [ -n "$BASH" ] ;then
  # kubectl and bash completions
  if [ -x "$(command -v kubectl)" ]; then
      source <(kubectl completion bash)
      complete -F __start_kubectl k
  fi

  if ! shopt -oq posix; then
    if [ -f /etc/profile.d/bash_completion.sh ]; then
      . /etc/profile.d/bash_completion.sh
    fi
  fi
fi

# Instead I need to put this line somewhere in my zshrc 
# to have kubectl autocompletion replacing the skipped bash one:
plugins=(git git-flow brew history node npm kubectl)

# To fix error message .bash_aliases:4: parse error: condition expected: =
# Change these to this syntax to be used by zhs

# Not compatible with zsh:
if [ $HOSTNAME = "x1" ]; then

# Compatible with bash and zsh:
if [[ $HOSTNAME == "x1" ]]; then

-1
需要为.zshrc创建一个配置文件,并将别名注册到其中。(仅在配置文件不存在时)
cd ~ 
touch .zshrc && open .zshrc
add all the alias in .zshrc file
source ~/.zshrc

关闭并重新打开终端,然后运行该别名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接