首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检索通过日志报告的命令替换执行的命令

如何检索通过日志报告的命令替换执行的命令
EN

Unix & Linux用户
提问于 2022-02-13 15:15:47
回答 3查看 113关注 0票数 0

为了简单起见,请考虑以下几点:

代码语言:javascript
复制
x=$(java --version)
echo "x: $x"

它的工作原理是如何显示出:

代码语言:javascript
复制
x: openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment Temurin-11.0.13+8 (build 11.0.13+8)
OpenJDK Client VM Temurin-11.0.13+8 (build 11.0.13+8, mixed mode)

我需要的是:

代码语言:javascript
复制
x=$(java --version)
echo "x: $x"
echo "The '???' command was executed"

因此,输出应该是

代码语言:javascript
复制
x: openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment Temurin-11.0.13+8 (build 11.0.13+8)
OpenJDK Client VM Temurin-11.0.13+8 (build 11.0.13+8, mixed mode)
The 'java -version' command was executed

用什么可以取代???

我已经做了一项研究,我发现了set +x/-x,但在这里不适用于100%

EN

回答 3

Unix & Linux用户

发布于 2022-02-13 15:53:56

不确定,为什么--在脚本中--您不知道刚才执行了哪个命令。但有趣的是:

代码语言:javascript
复制
exec 2>tmpfile; set -x
x=$(java --version)
set +x; exec 2>&1
awk  'sub(/^\+\+\+/, "") {print "The \"" $0 "\" command was executed."} ' tmpfile
The " java --version" command was executed.

awk命令移除-x (xtrace)选项引入的$PS4字符(在本例中,这些字符也是RE元字符),然后打印所需的行。之后应该删除tmpfile。

票数 2
EN

Unix & Linux用户

发布于 2022-02-13 15:53:36

在交互式shell中,当启用历史扩展时,您可以:

代码语言:javascript
复制
$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
$ command="!!"
$ echo "$command"
java -version
票数 1
EN

Unix & Linux用户

发布于 2022-02-13 18:09:15

正如@Arkadiusz所说,!!是执行的最后一个命令。

这个技巧还有其他有趣的使用方法,正如man bash所说:

!-n引用当前命令行减去n。

所以:!-2是你想要的。

缺点是,这种工作只在交互式shell中进行。

要在脚本中启用该行为,需要使用以下选项将其指定为bash

代码语言:javascript
复制
#!/bin/bash
set -H
set -o history
x=$(gcc -v 2>&1) # Sorry i dont like Java
echo "x is $x"
echo "Last cmd is " !-2 2>&1 >/dev/null

或者,您只需在脚本中启用history并解析其输出:

代码语言:javascript
复制
#!/bin/bash
set -o history
x=$(gcc -v 2>&1)
echo "x is $x"
last_cmd=$(history | sed -n '1s/^ * *//p')
echo "The cmd executed is $last_cmd"

部件... | sed ...切断了history命令使用的格式。在我的系统中,history打印出:

代码语言:javascript
复制
  2142  ./test2.sh 
  2143  cat test2.sh 
  2144  history 

在其他系统上,日期和时间也可以打印。

有关在脚本中启用历史记录脚本中的历史扩展的有趣信息,请参阅这些

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

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

复制
相关文章

相似问题

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