2012-04-11 174 views
15

我看到一个客户端在执行$bash -x命令,查看该文件是否可执行(或ksh -x命令等),如shell脚本的if语句中的-xbash -x命令

我的问题是:什么$bash -x命令吗?

我的解释是在当前shell的新bash shell中启动一个命令,继承相同的环境变量并由同一个用户执行。

有趣的是,我可以做$ls但不$bash -x ls,这给:

(下AIX 6) /usr/bin/ls: /usr/bin/ls: cannot execute binary file

这对我来说是一个谜,为什么错误 - 猜这是因为这意味着我上面的假设是不正确的。

另外,我相信$bash ls$bash -x ls是一样的东西(-x for“execute”)?

任何意见是极大的赞赏。

干杯!

+5

要启用调试模式(-x)来执行bash命令,请使用'bash -x -c your_command' – Alex 2012-04-11 13:44:02

+1

RTFM! j/k/10char – KurzedMetal 2012-04-11 13:45:36

+0

感谢Alex的简洁回答,bash -x -c ls完成你所描述的任务。因此,“$ bash -x命令查看文件是否可执行”是错误:)然后感谢! – Khiet 2012-04-11 13:55:18

回答

29

-x选项启动在调试模式是bash shell。你可以看到你的命令/脚本处理的所有细节。这是找到了一些错误,如果你的脚本不,你会希望

什么,就像亚历克斯在上面的评论说的好方法。要运行BASH中的一个命令,你必须使用-c选项像bash -x -c ls

man bash或在线手册,特别是关于invoking Bashthe set builtin command以获取更多信息的部分:

所有的带有内置的集合(见set内建)中使用的单字符选项可以用作当shell被调用时的选项。

-x 打印一条简单的命令,命令,个案命令,选择命令和算术命令以及它们的参数或相关单词列表在执行之后展开。 PS4变量的值被展开,结果值被打印在命令及其扩展参数之前。

+0

感谢Tomas,man for bash没有安装在我们的虚拟机上,但在线手册确实说明了一切;(谢谢为大家提供这样一个快速的答案,非常感谢! – Khiet 2012-04-11 13:58:36

+0

@Khiet不客气,如果你没有安装任何人,请在Google中输入“man bash”,第一个链接通常是手册页:) – user219882 2012-04-11 14:00:03

+0

'bash | grep“\ -x”'返回我零线......但它的工作原理。 – 2014-04-29 23:05:36

0
  • bash -x <file>运行脚本<file>与每个命令的执行跟踪

  • 测试是否已<file>为当前用户执行权限。

看来你已经混淆了这两个。