ssh no muestra la salida completa del command

Tengo una list de serveres 20+ que me gustaría get el shell que están usando. Mientras estoy conectado a un server, puedo ejecutar el siguiente command

$ ps -p $$ PID TTY TIME CMD 12022 pts/6 00:00:00 bash 

En lugar de tocar cada server y hacer esto intenté buclearlo con una list

 $ for i in `cat servlist`; do echo $i ; ssh $i ps -p $$ ; done serv1 PID TTY TIME CMD serv2 PID TTY TIME CMD serv3 PID TTY TIME CMD 

Looping esto no muestra el resultado esperado. Luego intenté enviar ssh a un único server y ejecutar el command, pero obtuve el mismo error.

 $ ssh serv4 ps -p $$ PID TTY TIME CMD 

Por qué sucede esto, nada salta a la vista en las páginas del manual ssh.

Eso es porque el process no existe.

El $$ se evalúa localmente y todos los serveres pasan el mismo número. Un número que no es un PID actualmente utilizado en los serveres.

Todo el $ stuff lo hace el shell, no los commands. Necesitas escaping, para que sea evaluado por el shell en el server.

Pruebe \$\$


p.ej

 for i in $(cat servlist); do echo $i; ssh $i 'ps -p $$'; done 

no probado