如何撤消`set -x`?


77

我输入set -x了终端。

现在终端继续在我的输出上打印最后运行的命令,因此该命令

~]$echo "this is what I see"

退货

+ echo 'this is what I see'
this is what I see

没有手册页set,我该如何set -x关闭?


8
set是一个shell builtin命令(至少在bash中是),因此可以在bash的手册页中找到该文档。在手册页中搜索/^ *SHELL BUILTIN COMMANDS有关set其及其朋友的所有信息!
dg99 2014年

4
但是一个man页面set!它是POSIX程序员指南的一部分。。。您确实应该获得该系列文章。
mikeserv

8
在Bash中,键入help set
200_success

@ lonewarrior556,如果您发现任何有帮助的答案,请您评论和/或标记解决方案。我们贡献自己的时间来协助....
Simply_Me 2014年

Answers:


77

使用set +x。更多信息:

$ type set
set is a special shell builtin

由于set是内置的Shell,因此会在您的Shell文档中进行记录。

请注意,某些系统具有用于Shell内置程序的手册页,但是只有在使用默认Shell时,这些手册页才是正确的。在Linux上,您可能会有介绍POSIX命令的手册页,这些手册页会出现在shell内置程序中,因为没有独立实用程序的手册页来隐藏它们。这些手册页适用于所有Bourne样式的shell(破折号,bash,* ksh甚至zsh),但通常不完整。

请参阅阅读和搜索长手册页,以获取在长壳手册页中搜索内建函数的提示。

在这种情况下,所有Bourne样式的壳的答案都是相同的。如果打开一个选项,则将其关闭。因此,关闭痕迹。读取的最后一个跟踪是不可避免的(除非让shell退出-有时可以使用subshel​​l )。set -LETTERset +LETTERset +xset +x(set -x; command to trace; other command to trace); command that is not traced


4
这是一个很好的答案,但是如果您将基本的“ set + x”放在开头而不是嵌入到最后一段中,则可以节省几分钟。(我发现附加的详细信息很有帮助。)
DA

2
{ set +x ;} 2> /dev/null隐藏set +x痕迹(虽然在Bourne shell中不起作用)。有些壳仍然输出一个+ 2> /dev/null
斯特凡Chazelas


18

您已启用调试模式,需要将其关闭。

提取形式help set

使用+而不是-导致这些标志被关闭。

所以输入 set +x


1
$ set +x # is the opposite of set -x, and will reverse what you typed.

您无法在上找到手册页set,因为如下所示:

$ type set

set是内置的特殊shell。虽然在您的shell手册页中进行了说明(假设此处为bash),但您也可以通过以下任一方式获取特定的文档

$ help set || builtin help set # luckily Bash has builtin help on builtin commands

bash或sh上的手册页是一本不错的书,但是整理起来有点长。您需要取消设置的有效信息-x位于末尾Exit Status:,内容如下:

使用+而不是-导致这些标志被关闭。这些标志也可以在调用Shell时使用。当前的标志集可以在$-中找到。其余的n个ARG是位置参数,并依次分配给$ 1,$ 2,.. $ n。如果没有给出ARG,则会打印所有shell变量。


没错,除了现有答案外,您还添加了什么?
杰夫·谢勒

@JeffSchaller出于直接和简洁的目的进行了编辑。当我需要这个答案时,我必须阅读整个页面以找出正确的答案。实际上,我放弃了阅读已接受的答案,只是去help set阅读了。我试图改善公认的答案。unix.stackexchange.com/revisions/149137/4接受但被拒绝。就像新闻报道一样,它从最重要的信息开始,并假定读者可能会在任何时候停下来,而下一个句子和每个段落的重要性均不如文章重要。这是我在Unix SE上的SO风格。
dlamblin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.