是否在Bash中运行最后一条命令?

问题描述

| 我试图回显在bash脚本中运行的最后一个命令。我找到了一种方法来处理“ 0”,当从解析器的角度来看命令在脚本中代表特定行时,它可以很好地工作。但是在某些情况下,例如在将命令插入
case
语句中时,我没有得到预期的输出: 剧本:
#!/bin/bash
set -o history
date
last=$(echo `history |tail -n2 |head -n1` | sed \'s/[0-9]* //\')
echo \"last command is [$last]\"

case \"1\" in
  \"1\")
  date
  last=$(echo `history |tail -n2 |head -n1` | sed \'s/[0-9]* //\')
  echo \"last command is [$last]\"
  ;;
esac
输出:
Tue May 24 12:36:04 CEST 2011
last command is [date]
Tue May 24 12:36:04 CEST 2011
last command is [echo \"last command is [$last]\"]
[Q]有人可以帮助我找到一种方法来回显上次运行的命令,而不管该命令在bash脚本中的调用方式/位置如何? 我的答案 尽管我的同事们做出了令人赞赏的贡献,但我还是选择编写一个writing4ѭ函数-该函数将所有参数作为一个命令运行,并在失败时显示该命令及其错误代码-具有以下好处: -我只需要在要检查的命令前加上ѭ4即可,这使它们保持一行,并且不会影响脚本的简洁性 -每当脚本在这些命令之一上失败时,脚本的最后输出行就会显示一条消息,清楚地显示哪个命令及其退出代码失败,从而使调试更加容易 示例脚本:
#!/bin/bash
die() { echo >&2 -e \"\\nERROR: $@\\n\"; exit 1; }
run() { \"$@\"; code=$?; [ $code -ne 0 ] && die \"command [$*] failed with error code $code\"; }

case \"1\" in
  \"1\")
  run ls /opt
  run ls /wrong-dir
  ;;
esac
输出:
$ ./test.sh
apacheds  google  iptables
ls: cannot access /wrong-dir: No such file or directory

ERROR: command [ls /wrong-dir] failed with error code 2
我测试了带有多个参数,bash变量作为参数,带引号的参数的各种命令,而
run
函数并没有破坏它们。到目前为止,我发现的唯一问题是运行回声,但该回声中断了,但我仍然不打算检查回声。     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)