Como obtenho uma variável com o comando e os argumentos atuais? Gostaria de usar o código de escape para imprimir isso em uma barra de título do Xterm.
Vejo que Terminal.app no MacOS está determinando o nome do comando invocado de alguma forma. Vejo a seguinte implementação para zsh, no entanto, estou procurando por 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
Estou lendo este post sobre o uso do DEBUG trap do ksh ou o poster também comenta que "executar uma tarefa em segundo plano que inspeciona regularmente a saída de ps -o stat= -o args= para ver quais processos são executados em primeiro plano e qual comando eles estão executando" é preferível. Alguém tem mais informações sobre isso?
Com ksh93:
Faria algo semelhante ao seu código zsh: exibe comandos simples que estão sendo executados no título, pouco antes de serem executados (para linhas de pipeline, ele só imprime os comandos simples no componente mais à direita) e ao retornar ao prompt
hostname:current-directory
($HOME
substituído por~
).Seções relevantes da página do manual :
${.sh.command}
sendo o equivalente do ksh93zsh
ao$ZSH_DEBUG_CMD
.A
functrace
opção foi adicionada em 2022 , portanto disponível apenas em 93u+m/1.0.0 2022-08-01, sendo a versão mais recente no momento da escrita 93u+m/1.0.10 2024-08-01.ksh93u+m é o esforço da comunidade que mantém o ksh93 com base no código do ksh93u+ 2012-08-01, a última versão estável da AT&T Software Technology, liderada por Martijn Dekker (o
m
em ksh93u+m). Um esforço separado para manter o ksh93 com base na última versão beta da AST e que levou ao ksh2020 de curta duração foi abandonado.Observe que
DEBUG
o trap (também suportado porzsh
) e o zshpreexec
funcionam em diferentes estágios da execução do shell.O
preexec
gancho é invocado quando um usuário pressiona Enterpara enviar código de shell no prompt de um shell interativo para avaliação (seja esse código de shell contendo um comando simples ou vários comandos compostos, como loop), enquanto aDEBUG
armadilha é invocada para cada "comando" (não todos os tipos de comando) sendo executado.