выполнить `установить -xv `после вызова новой оболочки

Скрипты Python не следует избегать как нечистые:

#!/usr/bin/python3

import shutil
path_for_deletion = input( 'path of dir for deletion> ' ) 
print( 'about to remove ' + path_for_deletion + '...' )
shutil.rmtree( path_for_deletion, ignore_errors=True )
print( '... done' )

Я попросил парня, который сделал полезный бенчмаркинг различных методов здесь , может ли он попробовать бенчмаркинг этого. Судя по моим экспериментам, неплохо.

Ошибки NB могут быть обработаны, чтобы хотя бы распечатать их... но может быть проще запустить trash myDirectoryForDeletionили rm -rfv myDirectoryForDeletionпосле этого.

0
06.07.2020, 10:57
1 ответ

zsh -c 'set -xv'указывает zshзапустить встроенный скрипт, содержащий set -xv. После запуска set -xvсценарий завершается, и zshзавершает работу (с кодом выхода set). Точно так же, как zsh -c unameзапускается unameи завершается.

exec zsh ; set -xvуказать текущей оболочке выполнить zshв текущем процессе, поэтому любая команда, которая находится после, никогда не будет выполнена (и в любом случае это может быть только после того, как execвернет ), поскольку оболочка больше не будет рядом, чтобы их казнить.

Если вы хотите запустить zshинтерактивную оболочку с включенными опциями -vи -x,это было бы:

zsh -xv

или

zsh -o verbose -o xtrace

Если вы хотите запустить set -xv, когда zshзапускается в интерактивном режиме с DEBUGCLI=YESв вашей среде, например, как ответ, который вы связали , предполагает, что вы хотите это сделать, тогда вы можете просто добавить:

if [[ $DEBUGCLI = YES ]]; then
  set -o xtrace -o verbose
fi

К вашим ~/.zshrc, (в самой последней строке, если вы не хотите, чтобы остальные ваши ~/.zshrcотслеживались и регистрировались ).

В любом случае вы можете запустить set -xvиset +xv(или set -o xtrace -o verboseи set +o xtrace +o verbose), чтобы включить или выключить эту отладку без необходимости каждый раз перезапускать оболочку.

И если вы хотите, чтобы xtraceдействовало только во время выполнения кода, который вы вводите (, а не для выполнения команд в хуках или виджетах zle ), вы можете установить его в конце крючок preexec()и отключите его в начале крючка precmd()(с помощьюset +x 2> /dev/null).

2
18.03.2021, 23:21

Теги

Похожие вопросы