【问题标题】:Bash alias causing error "bash: cd: too many arguments" only when set in .bashrc仅在 .bashrc 中设置时,bash 别名会导致错误“bash: cd: too many arguments”
【发布时间】:2019-12-21 15:52:14
【问题描述】:

我在.bashrc 中设置了几个 bash aliases,但每次打开新终端时它们都会产生错误。每次打开一个新终端,都会出现两个bash: cd: too many arguments。别名按预期工作,但无论如何我想解决这些错误。以下是有问题的别名:

alias .1="cd .."
alias .2="cd ../.."
alias .3="cd ../../.."
alias .4="cd ../../../.."
alias .5="cd ../../../../.."

alias .=".1"       #Trouble maker
alias ..=".2"
alias ...=".3"
alias ....=".4"
alias .....=".5"

我已将其范围缩小到 alias .=".1" 作为造成错误的罪魁祸首。我知道. 是它自己的命令,我在它上面打了一个别名。我不确定这是否是问题,但我注意到当我删除此行时错误消失了。此外,在 CLI 本身上运行别名不会产生相同的错误......只有在 .bashrc 中才会产生错误。

我尝试过的事情:

  1. = 两边的引号
  2. alias .=".1" 更改为alias .="cd .."
  3. 在别名命令前添加一个空格以试图抑制输出

【问题讨论】:

  • Running PS4='${BASH_SOURCE##*/}:$LINENO+' bash -x -l -i 将记录您的 shell 启动的执行情况,准确显示您设置的别名如何在稍后的启动过程中破坏其他命令,当他们尝试使用内置的 . 命令时。
  • btw:这是一个常用别名:alias ..='cd ..'(两边各 2 个点)。有时这也被定义为:alias ...='cd ../..'。所以我的建议是:在别名的左侧多使用一点。

标签: bash alias


【解决方案1】:

别名 . 意味着您正在更改后续 shell 命令包含其他 shell 脚本的方式。由于.source 在bash 中做同样的事情,你可以通过确保它们只使用source 来解决这个问题。例如查看.bash_profile。 Bash 查看variety of files while it is starting.bashrc 可能正在被.bash_profile 读取,并且其中的某些内容正在尝试. 其他文件。

但实际上,为什么呢?你能在每一个上加一个点就可以了吗? .. 目录是上一级目录,以便更容易记住。像这样对 shell 如何操作和将多个脚本粘合在一起至关重要的事情会不断地让你绊倒。

【讨论】:

    【解决方案2】:

    导致错误的别名是:别名 .=".1"。单个句点是源命令的同义词,它从作为参数传递的文件中读取并执行命令。

    您实际上(无意中)正在做的事情是尝试使用别名更改源命令的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-17
      • 2019-11-27
      • 2012-11-26
      • 2022-01-24
      • 2022-12-19
      • 1970-01-01
      • 2016-01-15
      • 2015-06-09
      相关资源
      最近更新 更多