Search code examples
tmux

Getting command running in a tmux pane


Is there a way to show the command which is currently running at a tmux pane?

I tried 'history', but it does not seem to show the commands which I had executed at tmux.

I also tried 'ps -ef', but it does not show the full command in the case like "./a.sh ; ./b.sh"


Solution

  • I found several answers online that include ps ... | tail -1. Unfortunately, these don't always work because sometimes the order of the commands is swapped, e.g. for two separate panes I get:

    $ ps -t /dev/pts/12 -o args=
    -bash
    mpv some_movie.mp4
    $ ps -t /dev/pts/10 -o args=
    micro some_file.txt
    -bash
    

    I really wanted a single line of output so that I could show it in the status bar, but what I ultimately ended up going with is ps --forest via run-shell. It seems to always reliably show the correct order and with more information should there be nested commands running (e.g. via a bash script). Its output looks like:

    $ ps --forest -o args -g $$
    COMMAND
    -bash
     \_ ps --forest -o args -g 1695
    

    Solution

    So in my .tmux.conf, I've got:

    bind '`' run-shell 'ps --forest -o pid,args -g #{pane_pid}'
    

    It will replace the contents of your pane with the output from the ps --forest command. Once you type esc or ^C, the ps output disappears, and your pane goes back to whatever it was doing :) Ends up looking like:

    running nested scripts running script.sh, which calls other-script.sh, which sleeps for 30s

    viewing process tree viewing pane process tree via keybinding