我知道执行Bash命令后会分配一些bash变量。其中有些是$?
来获取进程的返回值,或者是$BASH_COMMAND
来获取实际的调用行,$1
,$2
等来获取调用参数,等等。
一个简单的陷阱陷阱(取自this question)使我可以存储最后执行的命令:
alariva@trinsic:~/test$ trap 'previous_command=$this_command; this_command=$BASH_COMMAND' DEBUG
alariva@trinsic:~/test$ ls -l #I want to read this comment
total 0
-rw-rw-r-- 1 alariva alariva 0 Aug 23 01:30 readme.md
alariva@trinsic:~/test$ echo $previous_command
ls -l
alariva@trinsic:~/test$ echo $?
0
我需要获取上一条命令后可能出现的注释,但是我不知道会存储它的任何变量。有什么办法阅读吗?
我想得到与此类似的行为:
alariva@trinsic:~/test$ ls -l #I want this comment
readme.md
alariva@trinsic:~/test$ echo $BASH_COMMENT
I want this comment
alariva@trinsic:~/test$
当然,当前的情况是我无法从中获取任何信息:
alariva@trinsic:~/test$ echo $BASH_COMMENT
alariva@trinsic:~/test$
我还知道,在Bash解释该调用之后,注释可能会被完全删除,因此在这种情况下,我想知道是否存在一种变通方法(如钩子或类似方法)在它真正到达bash之前就可以读取。
到目前为止,这是我实现的目标:
alariva@trinsic:~/test$ ls -l #tosto
total 0
alariva@trinsic:~/test$ LAST=`fc -l | cut -c 6- | tail -n2 | head -n1`
alariva@trinsic:~/test$ echo "${LAST##*\#}"
tosto
alariva@trinsic:~/test$
不确定这是否是最好的解决方案,是否可以在所有情况下使用,但看起来像我想要实现的行为。有任何内置/替代方法可以做到这一点吗?
答案 0 :(得分:0)
到目前为止,我提出的最接近的解决方案是
alariva@trinsic:~/test$ ls -l #tosto
total 0
alariva@trinsic:~/test$ LAST=`fc -l | cut -c 6- | tail -n2 | head -n1`
alariva@trinsic:~/test$ echo "${LAST##*\#}"
tosto
alariva@trinsic:~/test$
虽然在我使用的大多数情况下都可以使用,但是在发现多个#
的某些情况下,它仍然无法获得完整的评论:
alariva@trinsic:~/test$ ls -l #tosto #only partial
total 0
alariva@trinsic:~/test$ LAST=`fc -l | cut -c 6- | tail -n2 | head -n1`
alariva@trinsic:~/test$ echo "${LAST##*\#}"
only partial
alariva@trinsic:~/test$
欢迎对此答案进行改进。