Estou tentando redirecionar com o diretório de trabalho atual no xterm.
xterm -ls -geometry 80x30 -e 'cd /home/work/test1/; pwd; make | tee test1.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/temp/test2/; pwd; make | tee test2.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/tmp/test3/; pwd; make | tee test3.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/my_test4/; pwd; make | tee my_test4.log;'
xterm -ls -geometry 80x30 -e 'cd /home/work/append/my_test5/; pwd; make | tee my_test5.log;'
...
Quero redirecionar a saída para um arquivo cujo nome seja a data e hora atuais e o último nome do diretório atual no xterm.
for example).
xterm -ls -geometry 80x30 -e 'cd /home/work/append/my_test5/; pwd; make | tee my_test5_03:19:12-11-2023.log;'
Como redirecionar a saída para um arquivo cujo nome é a data e hora atuais e o nome do diretório atual no xterm?
Tentar:
sh
em vez de deixar o xterm invocar$SHELL
para interpretar o que ele pensa ser código shellerrexit
opção para não executarmosmake
secd
falhar, por exemplo.nounset
adicionado para garantir, mas não deve ser necessário para este código simples.xterm
de ondesh
foi invocado) usando$OLDPWD
whichcd
define$PWD
antes de alterar o diretório.sh
o stdout viatee
; não há diferença aqui, pois ambos vão para o terminal quexterm
emula).${1##*/}
se expande para$1
despojado de tudo até a extremidade direita/
. Você também pode usar$(basename -- "$1")
which funciona melhor se$1
terminar em a/
, mas não funciona corretamente se terminar em nova linha.Observe que isso
tee
substituirá o arquivo se ele já existisse; você pode adicionar a-a
opção de anexá-lo.Observe que o status de saída de
make
(esh
) é perdido, poisxterm
não o propaga de volta ao chamador.Alternativa para usar
errexit
é encadear os 3 comandos em&&
vez de apenas novas linhas, enounset
usar${var?error message}
para que tudo fique mais explícito:Uma alternativa ao uso
tee
seria usarzsh
seumultios
recurso que permite reter fluxos stdout e stderr separados. Lá,$OLDPWD
também pode ser escrito~-
e o carimbo de data / hora pode ser calculado internamente usando expansão de prompt e$var:t
é um nome de base adequado.O status de saída de
make
é preservado, embora você precise de um emulador de terminal que o propague em vez dexterm
para que isso seja útil.