将 cd 别名为 pushd - 这是个好主意吗?

Laz*_*zer 42 shell bash alias shell-script

使用以下别名是否一个好主意:

cd() {
    pushd $1;
}
Run Code Online (Sandbox Code Playgroud)

在 bash 中?

我认为这将非常有用,因为我可以使用一系列popds 而不是cd -一次。

有没有可能出现问题的情况?

Jon*_*vis 43

就我个人而言,我的 bashrc 中有这些并且一直使用它们:

pushd()
{
  if [ $# -eq 0 ]; then
    DIR="${HOME}"
  else
    DIR="$1"
  fi

  builtin pushd "${DIR}" > /dev/null
  echo -n "DIRSTACK: "
  dirs
}

pushd_builtin()
{
  builtin pushd > /dev/null
  echo -n "DIRSTACK: "
  dirs
}

popd()
{
  builtin popd > /dev/null
  echo -n "DIRSTACK: "
  dirs
}

alias cd='pushd'
alias back='popd'
alias flip='pushd_builtin'
Run Code Online (Sandbox Code Playgroud)

然后,您可以像浏览器一样在命令行上导航。cd更改目录。back转到您cd编辑的上一个目录。并且flip将在当前目录和上一个目录之间移动而不从目录堆栈中弹出它们。总的来说,它工作得很好。

我意识到的唯一真正的问题是,它是一组我完全习惯的命令,但在其他任何人的机器上都不存在。所以,如果我必须使用别人的机器,可能会有点令人沮丧。如果您习惯于直接使用pushdpopd,则没有这个问题。虽然如果你只是别名cdput not popd,你不会有不存在的问题back,你仍然会cd遇到在其他机器上没有达到你期望的问题。

但是,我要注意的是,您的特定实现cd并不像cd正常cd的那样工作,因为它本身会进入您的主目录,而您的则不会。我这里的版本没有这个问题。我的也附在打印件DIRSTACK的前面dirs,但这更像是个人品味的问题。

所以,正如我所说,我一直使用这些别名并且对它们没有任何问题。只是不得不使用另一台机器然后发现它们不在那里可能有点令人沮丧(这应该不足为奇,但它们是您经常使用的东西之一,以至于您不会考虑它们,所以让它们不像你习惯的那样工作仍然会令人惊讶)。

  • @progo你能解释一下flip如何通过从目录堆栈中弹出来更改目录吗? (2认同)

cjm*_*cjm 8

这不是问题的直接答案,但我爱上了 4DOS 中的目录历史记录窗口。以至于我为 Linux(和 Cygwin)编写了自己的版本。我从来没有想过让它成为一个易于安装的实用程序,但是如果您知道如何绕过 Bash 提示,那么运行起来应该不会那么难。您的问题启发我将其放入 Git 存储库并将其上传到 GitHub:dirhistory

基本上,它是一个从所有 shell 收集目录更改的守护程序,以及一个显示历史记录并让您选择要切换到的目录的 Cdk 程序(因此您不仅限于堆栈)。我发现它真的很有用,并且将它绑定到 Ctrl-PageUp,就像 4DOS 一样。(我什至修补了 PuTTY,因此它会将 Ctrl-PageUp 发送到 Bash。)