RHEL 8.4 上的 bash 4.4.20(1)。
set -x ; ./blarge ; set +x
当然可以,但完成后需要记住删除的东西太多了。如果你运行 ssh、sudo 等,就会变得很棘手。
因此,正如主题中所提到的,是否有某种方法可以告诉set -x
只在一行上工作,就像FOO=bar ./blarge
将 FOO 变量设置为只为执行一次 blarge 而 barge 一样?
declare Srv=s1.example.com
declare DB=a_db
declare Tables="-t table1 -t table2"
date +"%F %T, %a Starting"
set -x
vacuumdb --host=$Srv -j2 --dbname=$DB $Tables --analyze
set +x
date +"%F %T, %a Finished"
您可以使用子 shell:
这确保
-x
仅在子 shell 的持续时间内设置。如果将其包装在函数中,则可以使用几种方法。这很有用,因为您可以重复使用该函数进行多次这样的单行调用。它还可以使代码更简洁。
注意-这些可以在
bash
其他 shell 中工作,但可能有所不同。注意使用
( )
而不是{ }
,这会使整个函数在子 shell 中运行 - 因此对set
(和变量)的任何更改都将在函数内有效和无效。声明会将
local -
通过包含函数进行的任何更改本地化set
。如果您想要对函数范围内可用的变量进行持久更改,这将是一个有用的方法。无论哪种情况,您都可以这样调用它:
如果您想要启用
xtrace
更长的命令块,您可以将命令包装在其自己的函数中并使用该xtrace
函数调用它。