- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 bash 脚本中遇到了一些麻烦来做一些适当的“pushd/popd 清理”。也就是说:如果我执行了几次 pushd
,我想确保在 exit
之前执行相同数量的 popd
。
但是,我注意到 pushd/popd 堆栈似乎不是全局的。
假设我的主目录中有这个名为 example-pushd-twice.sh
的脚本:
pushd /etc
pushd /tmp
我在我的 homedir 中的 shell 中执行此操作:(结果输出在 block 引号中)
目录
~
./example-pushd-twice.sh
/etc ~
/tmp /etc ~
我现在希望仍然在 /tmp
中并且仍然有一个包含 3 个目录的目录堆栈,但是:
目录
~
这是正确的行为吗?我能否信任一个 shell 脚本来调用它自己的 pushd/popd 堆栈,这样我就不必关心之后的清理工作了?
最佳答案
当 shell(脚本的解释器)退出时,目录堆栈消失了。这与从交互式 shell 运行 /bin/bash
时的行为相同。 pushd/tmp
。然后输入exit
。您返回的 shell 不受其他 bash
进程内部发生的事情的影响。
但是,在您获取脚本的情况下(即您在当前 bash
进程中运行命令)而不是执行它(创建新的 shell 实例),目录堆栈仍然会在 last 之后徘徊源文件行完成。而不是 ./example-pushd-twice.sh
运行 source ./example-pushd-twice.sh
并观察差异。出于这个原因,如果您在脚本中依赖 pushd
,那么在完成之前使用 popd
仍然是谨慎的。
关于bash:在脚本末尾 pushd 后不需要调用 popd 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611960/
我正在尝试创建一个非常简单的批处理脚本,其中对于复制到暂存目录的每个文件,脚本都会将其工作目录更改为该暂存目录以执行一些工作: pushd C:\Shared\ for /r %%f in (*.dl
每次我使用 pushd 或 popd 时,它都会将堆栈打印到标准输出。如何不这样做? 我不想每次都执行 pushd >/dev/null 因为我有很多脚本互相调用。 也许一个很好的覆盖就可以做到,但我
每次我使用 pushd 或 popd 时,它都会将堆栈打印到标准输出。如何不这样做? 我不想每次都执行 pushd >/dev/null 因为我有很多脚本互相调用。 也许一个很好的覆盖就可以做到,但我
我在这里和其他网站上阅读了很多关于 pushd 的问题和答案,其中绝大多数都提到了 UNC 路径的问题。但是,我遇到了一个不同的问题,我还没有看到任何提示。 使用 Windows 10 x64 Ent
我正在尝试使用 pushd 进入目录 #!/bin/bash function cloneAll { [ -d ~/mapTrials ] || mkdir ~/mapTrials p
如何使用反引号运行 pushd 和 popd? 每当我在反引号中运行 pushd/tmp 时,我都会得到一个错误: "No such file or directory - pushd /tmp" 最
我不知道是否有有效的方法来做到这一点。但是,一直想看看它是否可能。 我知道 pushd、popd 和 dirs 对于许多事情都很有用,例如在您最近访问过的目录之间进行复制。 但是,有没有一种方法可以保
我有一个很棒的大脚本,它完全依赖于 PUSHD。然而突然当我输入pushd \\server1\dir1我越来越: C:\Documents and Settings\userNameHere>pus
如何将 pwd 的输出通过管道传输到 pushd,以便我可以在当前目录上使用 pushd。我试过了 pwd | pushd 还有很多其他组合,但似乎没有任何效果。 最佳答案 pushd . 也有效 关
KSH 是否有等效于 bash pushd/popd 的内置命令? 对于那些不知道 bash 中的 pushd 和 popd 做什么的人,这里是手册页中的描述 pushd [-n] [dir]
我在 make 文件中执行以下操作 pushd %dir_name% 我得到以下错误 /bin/sh : pushd : not found 谁能告诉我为什么会出现这个错误?我检查了我的 $PATH
我在尝试从共享网络驱动器获取文件时收到“不支持 UNC 路径”错误。 我的研究告诉我 pushd 和 popd 可能有帮助,但我不知道如何正确使用它们。 pushd 和 popd 有哪些好的用法示例?
当使用这两个命令优于 cd 和 cd - 时,pushd 和 popd 的实际用途是什么? 最佳答案 实际用途是你可以建立一堆目录,形成你去过的地方的踪迹,只需替换cd即可。与 pushd . 然后,
我在我的 bash 脚本中遇到了一些麻烦来做一些适当的“pushd/popd 清理”。也就是说:如果我执行了几次 pushd,我想确保在 exit 之前执行相同数量的 popd。 但是,我注意到 pu
我正在尝试弄清楚如何在组件驻留在网络路径上的两个不同驱动器上的情况下安装一些程序。但是,每当我使用 pushd\\xyz\c$ 时,我都会得到一个映射驱动器,这意味着我无法使用任何有关使用的知识,例如
我正在尝试使用 https://github.com/rs/pushd 作为推送通知服务器。 每当我尝试添加新订阅者时,服务器都会崩溃并显示以下堆栈跟踪: /home/ec2-user/push_se
我有一个 Windows 批处理文件,它输出目录路径,例如: @echo c:\windows 我想将这个字符串“c:\windows”传递给 PUSHD 命令。我试过这个: path.bat | P
我试图从一个共享驱动器另一个共享驱动器复制今天修改的文件。 但是当我执行批处理文件时,它显示以下错误。 cmd 不支持 UNC 路径作为当前目录 脚本如下 @echo off Set Photosrc
有没有办法在 Dockerfile 中使用 pushd/popd 命令?如果可能的话,它会使一些安装脚本变得更容易。 最佳答案 可以做到,但你的图像必须有 bash 并且所有命令必须在同一个 RUN
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!