为了简单起见,请考虑以下几点:
x=$(java --version)
echo "x: $x"它的工作原理是如何显示出:
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)我需要的是:
x=$(java --version)
echo "x: $x"
echo "The '???' command was executed"因此,输出应该是
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%
发布于 2022-02-13 15:53:56
不确定,为什么--在脚本中--您不知道刚才执行了哪个命令。但有趣的是:
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。
发布于 2022-02-13 15:53:36
在交互式shell中,当启用历史扩展时,您可以:
$ 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发布于 2022-02-13 18:09:15
正如@Arkadiusz所说,!!是执行的最后一个命令。
这个技巧还有其他有趣的使用方法,正如man bash所说:
!-n引用当前命令行减去n。
所以:!-2是你想要的。
缺点是,这种工作只在交互式shell中进行。
要在脚本中启用该行为,需要使用以下选项将其指定为bash:
#!/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并解析其输出:
#!/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打印出:
2142 ./test2.sh
2143 cat test2.sh
2144 history 在其他系统上,日期和时间也可以打印。
有关在脚本中启用历史记录和脚本中的历史扩展的有趣信息,请参阅这些
https://unix.stackexchange.com/questions/690486
复制相似问题