- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
KSH 是否有等效于 bash pushd/popd 的内置命令?
对于那些不知道 bash 中的 pushd 和 popd 做什么的人,这里是手册页中的描述
pushd [-n] [dir]
pushd [-n] [+n] [-n]
Adds a directory to the top of the directory stack, or rotates
the stack, making the new top of the stack the current working
directory. With no arguments, exchanges the top two directo-
ries and returns 0, unless the directory stack is empty.
popd [-n] [+n] [-n]
Removes entries from the directory stack. With no arguments,
removes the top directory from the stack, and performs a cd to
the new top directory. Arguments, if supplied, have the fol-
lowing meanings:
谢谢
最佳答案
当我发现 ksh 不包括这些时,我自己写了一个。我把它放在 ~/bin/dirstack.ksh
中,我的 .kshrc
文件像这样包含它:
. ~/bin/dirstack.ksh
dirstack.ksh
的内容如下:
# Implement a csh-like directory stack in ksh
#
# environment variable dir_stack contains all directory entries except
# the current directory
unset dir_stack
export dir_stack
# Three forms of the pushd command:
# pushd - swap the top two stack entries
# pushd +3 - swap top stack entry and entry 3 from top
# pushd newdir - cd to newdir, creating new stack entry
function pushd
{
sd=${#dir_stack[*]} # get total stack depth
if [ $1 ] ; then
if [ ${1#\+[0-9]*} ] ; then
# ======= "pushd dir" =======
# is "dir" reachable?
if [ `(cd $1) 2>/dev/null; echo $?` -ne 0 ] ; then
cd $1 # get the actual shell error message
return 1 # return complaint status
fi
# yes, we can reach the new directory; continue
(( sd = sd + 1 )) # stack gets one deeper
dir_stack[sd]=$PWD
cd $1
# check for duplicate stack entries
# current "top of stack" = ids; compare ids+dsdel to $PWD
# either "ids" or "dsdel" must increment with each loop
#
(( ids = 1 )) # loop from bottom of stack up
(( dsdel = 0 )) # no deleted entries yet
while [ ids+dsdel -le sd ] ; do
if [ "${dir_stack[ids+dsdel]}" = "$PWD" ] ; then
(( dsdel = dsdel + 1 )) # logically remove duplicate
else
if [ dsdel -gt 0 ] ; then # copy down
dir_stack[ids]="${dir_stack[ids+dsdel]}"
fi
(( ids = ids + 1 ))
fi
done
# delete any junk left at stack top (after deleting dups)
while [ ids -le sd ] ; do
unset dir_stack[ids]
(( ids = ids + 1 ))
done
unset ids
unset dsdel
else
# ======= "pushd +n" =======
(( sd = sd + 1 - ${1#\+} )) # Go 'n - 1' down from the stack top
if [ sd -lt 1 ] ; then (( sd = 1 )) ; fi
cd ${dir_stack[sd]} # Swap stack top with +n position
dir_stack[sd]=$OLDPWD
fi
else
# ======= "pushd" =======
cd ${dir_stack[sd]} # Swap stack top with +1 position
dir_stack[sd]=$OLDPWD
fi
}
function popd
{
sd=${#dir_stack[*]}
if [ $sd -gt 0 ] ; then
cd ${dir_stack[sd]}
unset dir_stack[sd]
else
cd ~
fi
}
function dirs
{
echo "0: $PWD"
sd=${#dir_stack[*]}
(( ind = 1 ))
while [ $sd -gt 0 ]
do
echo "$ind: ${dir_stack[sd]}"
(( sd = sd - 1 ))
(( ind = ind + 1 ))
done
}
关于bash - ksh 上的 pushd/popd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984635/
我正在尝试创建一个非常简单的批处理脚本,其中对于复制到暂存目录的每个文件,脚本都会将其工作目录更改为该暂存目录以执行一些工作: 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
我是一名优秀的程序员,十分优秀!