有时仅推送“无此文件或目录”

时间:2018-07-12 21:04:41

标签: bash shell pushd

答案:我的问题是$ {DIRSTACK [0]}保留文字〜,而$ {DIRSTACK [@]:1}没有。当我打电话给sort时,我在重新排列顺序,然后移动到哪个DIRSTACK元素$ {DIRSTACK [0]}都不能与推+元素一起使用。我不通过在$ HOME / .logs / dirstack中记录$ {DIRSTACK [0]}来解决此问题,因此它永远不会重新排序到另一个索引。此错误已在October 2017中报告,并将在bash> 4.4的某些版本中修复。

原始问题

因此,我试图编写一个pushd函数,该函数可以1)从pushd中删除重复项(因为bash没有dunique),并且2)在< em> all 终端,这意味着我必须写入文件。

pd() {
    if [[ -f "$HOME/.logs/dirstack" ]]; then
        dirs -c
        s=($(sort "$HOME/.logs/dirstack" | uniq))
        for dir in "${s[@]}"; do
            pushd -n "$dir" >/dev/null
        done
    fi
    local choice="+$1"
    pushd $choice
    printf '%s\n' "${DIRSTACK[@]:0:10}" >"$HOME/.logs/dirstack"
}

因此,显然,此功能是愚蠢的,因为通过排序,您确实不知道要cd进入哪个目录,但这更接近最小,可行,完整的示例来显示问题。

大部分时间,此功能不起作用,但有时会起作用。失败时,它显示类似以下错误:

j@pc$ pd 2
-bash: pushd: ~/jenkins/docker: No such file or directory

成功后,将正确进入该目录。失败无关。所有目录都存在,并且我可以pushd ~/jenkins/dockercd ~/jenkins/docker没有问题。

0 个答案:

没有答案