удаление или очистка стека путей popd / pushd

39

Пройдя pushdслишком много раз, я хочу очистить весь стек путей.

Как бы я popdвсе предметы в стеке?

Я хотел бы popdбез необходимости знать, сколько в стеке?

Руководство по bash, похоже, не покрывает это .

Зачем мне это знать? Я привередливый и вычистить стопку.

chrisjlee
источник
1
Кстати, полное руководство по bash закончено на gnu.org. Если вы используете версию «все на одной странице», вам будет проще найти что-то там.
jw013
Ах, если бы Google проиндексировал это. Спасибо @ jw013
chrisjlee

Ответы:

47

dirs -c это то, что вы ищете.

jw013
источник
1
это делает пустой стек, но не восстановить рабочий каталог со дна стека
Eliran Малка
8

Чтобы очистить стек и восстановить рабочий каталог из нижней части стека, либо:

  • получить этот каталог из dirs, перейти в этот каталог, а затем очистить стек:

    cd "$(dirs -l -0)" && dirs -c

    -lВариант здесь будут перечислены полные пути, чтобы убедиться , что мы не потерпеть неудачу , если мы пытаемся cdв ~, и -0извлекает первый элемент из нижней части стека.

    @ jw013 предложил сделать эту команду более надежной, избегая расширений пути:

    pushd -0 && dirs -c
  • или, popdпока вы не столкнетесь с ошибкой (которая является состоянием popdвызова, когда стек каталога пуст):

    while (( $? == 0 )); do popd; done
Элиран Малка
источник
1
Первый способ это именно то, что я хотел. Второе не сработало в моем случае, так как я звонил pushdнесколько раз, затем удалил один из каталогов в середине, а затем popdпотерпел неудачу, когда попытался развернуть. Мне нужно было перепрыгнуть все гадости в середине, чтобы вернуться к тому, с чего начал.
Чак Уилбур
правильно @ChuckWilbur - если вы взломали стек, popdне спасут вас :)
Элиран Малка
Лучше pushd -0вместо cd "$(dirs ...)".
JW013
@ jw013 как так? это еще больше
испортило
1
cd "$(...)"работает в 90%, возможно, даже в 99% случаев использования, но с pushd -0уверенностью можно сказать, 100%. Существует так много потенциальных ошибок и крайних случаев, связанных с расширением путей к файлам / каталогам в оболочке, что самое надежное, что нужно сделать, это просто полностью избежать этого, что pushd -0очень лаконично. Если вы никогда не рискнете, у вас не будет шанса попасть в баг со странным крайним случаем. Если вы хотите больше узнать о возможных головных болях, связанных с именами файлов и путей Unix, хорошей отправной точкой будет mywiki.wooledge.org/ParsingLs
jw013