首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用新外壳后执行` `set -xv`‘

调用新外壳后执行` `set -xv`‘
EN

Unix & Linux用户
提问于 2020-07-06 05:33:48
回答 1查看 545关注 0票数 0

以下命令起作用

代码语言:javascript
复制
% DEBUGCLI=YES exec zsh             
% set -xv 
% echo debug
echo debug
+zsh:2> echo debug
debug

然而,当我尝试这样的事情时

代码语言:javascript
复制
% exec zsh -c 'set -xv'

它只会关闭终端。

我不想使用exec zsh -xv。原因是这里

我正在寻找一个命令,而不是两个命令,这样我就不必在exec zsh之后单独运行D5了。

是的,我试过了

exec zsh ; set -xv & exec zsh && set -xv.这两个命令都忽略了set -xv

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-07-06 05:44:32

zsh -c 'set -xv'告诉zsh运行包含set -xv的内联脚本。运行set -xv后,脚本完成,zsh退出(使用set的退出代码)。就像zsh -c uname运行uname并完成一样。

exec zsh ; set -xv告诉当前shell在当前进程中执行zsh,所以以后放置的任何命令都不会被执行(在任何情况下,只能在exec返回之后执行),因为shell将不再存在以执行它们。

如果您想运行一个带有-v-x选项的D12交互式shell,那应该是:

代码语言:javascript
复制
zsh -xv

代码语言:javascript
复制
zsh -o verbose -o xtrace

如果您想像set -xv建议的那样在您的环境中与DEBUGCLI=YES交互运行时运行zsh,那么只需添加:

代码语言:javascript
复制
if [[ $DEBUGCLI = YES ]]; then
  set -o xtrace -o verbose
fi

到您的~/.zshrc,(如果您不希望跟踪和记录您的~/.zshrc的其余部分,请在最后一行)。

在任何情况下,您都可以运行set -xvset +xv (或set -o xtrace -o verboseset +o xtrace +o verbose)来打开或关闭调试,而不必每次重新启动shell。

如果您希望xtrace只在执行您输入的代码时生效(而不是执行钩子或zle小部件中的命令),则可以在preexec()钩子的末尾设置它,并在precmd()钩子的开头(使用set +x 2> /dev/null)取消它。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/596937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档