Seu comando ps
está imprimindo o PID do processo pai (PPID). Quando você estiver executando um emulador de terminal, $$
(o PID do processo atual) estará apontando para sua sessão de shell e seu PPID será o emulador de terminal que o iniciou.
Os scripts são executados em suas próprias subshells . Isso significa que o processo pai de um script é o shell que o lançou. Portanto, quando você executar o comando, não estará executando xterm -e htop
, mas bash xterm -e htop
. Para ilustrar:
$ bash top
/sbin/top: /sbin/top: cannot execute binary file
Você pode testar isso executando echo $(echo $cterminal -e "htop")
de um script e da linha de comando.
Para executar o script a partir de um emulador de terminal GUI, você pode usar o PPID do PPID:
cterminal="$(ps -p $(ps -p $PPID -o ppid=) o args=)"
Por fim, não use $(echo ...)
para executar seu comando, basta executá-lo:
#!/usr/bin/env bash
$(ps -p $(ps -p $PPID -o ppid=) o args=) -e top