【问题标题】:alias .="cd .." causing bash to start at root别名 .="cd .." 导致 bash 从根目录开始
【发布时间】:2013-07-17 12:00:54
【问题描述】:

如果我将别名 alias .="cd .." 添加到我的 .bash_aliases 文件(源自 .bashrc)中,它会导致我创建的每个新 shell 从 / 开始。我猜这只是我不明白的基本问题。

有什么想法吗?

【问题讨论】:

  • 是什么促使您创建了如此出色的别名?
  • 我后面有一堆,超级好用。您只需键入一个点就可以上一层,两个点就可以上两层,依此类推。变得更好。

标签: bash command-line terminal command-line-interface


【解决方案1】:

.是一个内置的shell命令,相当于“source”——它在当前shell中执行一个shell脚本,从而允许它定义变量、函数等。

这个. 命令经常在脚本中使用,以从其他脚本中引入定义。当您将 . 别名为其他内容时,您会覆盖标准定义并破坏使用它的每个脚本

请不要重新定义标准命令。

(PS 实际上比这更复杂,因为别名只在交互式 shell 中有效,所以 . 在交互式和非交互式 shell 中会做完全不同的事情。这对这种情况并没有真正的帮助。)

【讨论】:

  • 啊!这很有帮助,我想知道为什么这是一些命令。估计我不能用。诡计。也许我会在我所有的上级别名前面加上 u(代表 up),这将使它防弹!谢谢!
【解决方案2】:

. 指的是当前目录,而.. 指的是 dirs 层次结构中的上一层。

必须发生的是,在您的 bashrc 中,在此别名定义之后有一些 .,因此它被调用,因此您被移动到父目录。

所以:

  • 你进入并且你在/home/your_home
  • 你设置了alias .="cd .."
  • 在阅读 .bashrc 时发现了一些点 .
  • 这个点作为别名执行,所以你得到cd ..,这会将你移动到/home
  • 您可能有多个.,它必须再次执行,将您从/home 移动到/

解决方案:

  • 使用没有任何预定义含义的更好名称创建别名。
  • 将别名来源移至 .bashrc 的底部。

【讨论】:

  • 是的,在alias .="cd .." alias ..="cd ../.." 等之后我确实有更多,大约8级左右。
  • 完美,很好的解释!我确实找到了 .在 .bashrc 中的 .bash_aliases 采购之后。我刚刚将我的 .bash_aliases 源代码移到了 .bashrc 的最后,现在一切正常!
  • 是的,根据 Gorden 的回答 (stackoverflow.com/a/17728783/292408) . 是一个内置的 shell 命令,会破坏其他东西。我将在我所有的别名命令前加上 u,因此只有 u., u.., u... 等才能升级。谢谢!
  • 是的,这样更安全!作为旁注,我前段时间碰巧使用了alias test="cd ...",然后出现了一些奇怪的行为,因为test是条件命令。
猜你喜欢
  • 1970-01-01
  • 2018-06-24
  • 2015-02-16
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多