- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 bash
(4.1) 目录堆栈通常有十几个或更多条目。我想用 dirs -v
替换 dirs
的输出,所以我再也不用用 pushd
玩“猜魔数(Magic Number)”了。
我将 dirs
替换为使用 command
执行 dirs -v
的函数:
dirs()
{
# "command" builtin prevents infinite recusion by suppressing lookup
# of function and alias names.
command dirs -v "${@}"
}
(更新:在 pneumatics' suggestion ,我现在使用 builtin
而不是 command
。它没有解决这个问题,但它稍微安全一些。)
dirs
输出现在是可读的,但是 pushd
和 popd
仍然产生旧的 vomit-of-slashes :
$ pushd ~/just/one/more/and/ill/quit/i/promise
~/just/one/more/and/ill/quit/i/promise ~/tmp/bash/bash-4.1...
may/give/rise/to/dom /oh/no/not/again /var/adm/log /omg/wt...
va/lang ~/doc/comp/java/api/java/util/regex barf barf barf...
用别名替换我的 dirs
函数后,我得到了相同(缺少)的结果:
alias dirs='command dirs -v "${@}"'
我最终通过覆盖 pushd
和 popd
得到了我想要的输出:
pushd()
{
command pushd "${@}" >/dev/null &&
dirs
}
# popd is similar.
这可行,但它需要重写三个 内置函数而不是一个。此外,在我没有想到的某些极端情况下,这可能是对 pushd
和 popd
的不完美模拟。我宁愿只覆盖 dirs
。
为什么覆盖 dirs
不起作用? 根据 bash
的 man
页面,pushd
和 popd
:
If the
pushd
command is successful, adirs
is performed as well.
那么为什么 pushd
和 popd
似乎调用了内置的 dirs
而不是函数或别名?
bash
文档的脚注bashref.*
online manual 中缺少“a dirs
is performed as well”的段落, 但它们出现在 man
页面 bash.*
和 builtins.*
中。我的 bash
4.1 文档和当前的 4.4 文档以相同的方式不一致,这表明 4.4(如果我有的话)会表现相同。
最佳答案
您想使用 builtin
而不是 command
。我认为这就是您所追求的,覆盖 pushd
和 popd
,同时保留 dirs
原样。
pushd(){ builtin pushd "$@" >/dev/null && dirs -v; }
popd() { builtin popd "$@" >/dev/null && dirs -v; }
关于bash - 如何覆盖 pushd 和 popd 对 dirs 的自动调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39715474/
每次我使用 pushd 或 popd 时,它都会将堆栈打印到标准输出。如何不这样做? 我不想每次都执行 pushd >/dev/null 因为我有很多脚本互相调用。 也许一个很好的覆盖就可以做到,但我
每次我使用 pushd 或 popd 时,它都会将堆栈打印到标准输出。如何不这样做? 我不想每次都执行 pushd >/dev/null 因为我有很多脚本互相调用。 也许一个很好的覆盖就可以做到,但我
有没有办法在脚本末尾撤消所有 pushd。我所拥有的是: pushd somwhere rem doing stuff goto end :end popd goto :EOF 我想要的是: setl
我不知道是否有有效的方法来做到这一点。但是,一直想看看它是否可能。 我知道 pushd、popd 和 dirs 对于许多事情都很有用,例如在您最近访问过的目录之间进行复制。 但是,有没有一种方法可以保
KSH 是否有等效于 bash pushd/popd 的内置命令? 对于那些不知道 bash 中的 pushd 和 popd 做什么的人,这里是手册页中的描述 pushd [-n] [dir]
我正在使用以下批处理脚本来运行 Java 命令行工具。 @echo off pushd %~dp0 setLocal EnableDelayedExpansion set CLASSPATH=" fo
我在尝试从共享网络驱动器获取文件时收到“不支持 UNC 路径”错误。 我的研究告诉我 pushd 和 popd 可能有帮助,但我不知道如何正确使用它们。 pushd 和 popd 有哪些好的用法示例?
当使用这两个命令优于 cd 和 cd - 时,pushd 和 popd 的实际用途是什么? 最佳答案 实际用途是你可以建立一堆目录,形成你去过的地方的踪迹,只需替换cd即可。与 pushd . 然后,
我在我的 bash 脚本中遇到了一些麻烦来做一些适当的“pushd/popd 清理”。也就是说:如果我执行了几次 pushd,我想确保在 exit 之前执行相同数量的 popd。 但是,我注意到 pu
有没有办法在 Dockerfile 中使用 pushd/popd 命令?如果可能的话,它会使一些安装脚本变得更容易。 最佳答案 可以做到,但你的图像必须有 bash 并且所有命令必须在同一个 RUN
我正在编写一个 Bash 脚本,我想 checkout 一个标签,然后 checkout 回到我开始的地方。 我尝试了 git co HEAD@{1},但是当从 master 开始时,这让我回到了 m
我无法理解 powershell 中 pushd、popd 和 robocopy 命令的工作原理。谁能通俗易懂地解释一下? 最佳答案 我不确定你所说的外行术语是什么意思。 从概念上讲,PUSH 和 P
我的 bash (4.1) 目录堆栈通常有十几个或更多条目。我想用 dirs -v 替换 dirs 的输出,所以我再也不用用 pushd 玩“猜魔数(Magic Number)”了。 我的部分解决方案
我正在运行以下批处理文件来运行 SQL 中的存储包我得到一个 UNC Paths are not supported错误。如果我在服务器上运行它,它运行正确。如果我与其他用户共享它,它不会。我不想创建
有没有比 pushd 和 popd 更直观的处理目录堆栈的方法? 我发现 pushd 和 popd 内置命令的 CLI 呈现给用户有点令人难以置信。但与此同时,我很乐意经常使用 dirs 内置命令提供
在我一次又一次找不到答案后,我编写了这些脚本: :: if you still don't know the GNU-GPLv3. :: ------------------------
我是一名优秀的程序员,十分优秀!