Entendi! Agradecemos a Stephane Chazelas pela ajuda. O truque era procurar pelos processos filhos ... D'oh!
Meu script agora é:
#!/usr/bin/env bash
ppid=$(xdotool getactivewindow getwindowpid) # PID of process in the window
pid=$(pgrep -P $ppid | tail -n1) # PID of the last child
cwd="$(readlink /proc/${pid:-$ppid}/cwd)" # current CWD of pid, or ppid if no pid
cd "$cwd"
"$@"
Você pode usá-lo simplesmente prefixando qualquer comando com o nome do script, por exemplo. incwd urxvt
.
A única ressalva é que alguns programas, como evince
, redefinem seus cwd
. Eu duvido que exista algo que eu possa fazer nesses casos.