如何获取当前命令和参数的变量?我想使用转义代码将其打印在 Xterm 标题栏中。
我看到 MacOS 上的 Terminal.app 以某种方式确定了所调用命令的名称。我看到了 zsh 的后续实现,但我正在寻找 ksh。
if [ "$SHELL" = '/usr/bin/zsh' ]
then
case $TERM in
rxvt|*term)
precmd() { print -Pn "\e]0;%m:%~\a" }
preexec () { print -Pn "\e]0;$1\a" }
;;
esac
fi
我正在阅读这篇关于使用 ksh 的 DEBUG trap 的帖子,或者发帖人还评论说“运行后台任务,定期检查 ps -o stat= -o args= 的输出,以查看哪些进程在前台运行以及它们正在执行什么命令”是首选。有人有更多关于此的信息吗?
使用 ksh93:
会执行与你的 zsh 代码类似的操作:在执行之前显示标题中正在执行的简单命令(对于管道线,它只打印最右边组件中的简单命令),并在返回提示时(
hostname:current-directory
用$HOME
替换~
)。手册页的相关部分:
${.sh.command}
zsh
是ksh93的等价物$ZSH_DEBUG_CMD
。该
functrace
选项于 2022 年添加,因此仅在 93u+m/1.0.0 2022-08-01 中可用,截至撰写本文时最新版本为 93u+m/1.0.10 2024-08-01。ksh93u+m是社区努力维护 ksh93,该努力基于 ksh93u+ 2012-08-01 中的代码,这是 AT&T 软件技术的最新稳定版本,由 Martijn Dekker(
m
ksh93u+m 中的)领导。基于 AST 的最新测试版维护 ksh93 的单独努力,导致了短暂的 ksh2020,该努力已被放弃。注意
DEBUG
trap(也支持zsh
)和 zshpreexec
在 shell 执行的不同阶段的工作。preexec
当用户Enter在交互式 shell 的提示下按下提交 shell 代码进行评估时(无论该 shell 代码包含一个简单命令还是几个或复合命令,如循环),都会调用钩子,而对于DEBUG
正在运行的每个“命令”(并非所有类型的命令),都会调用陷阱。