Посмотрите на ssh-agent
и sshpass
.
Если они не решают вашу проблему, объясните, почему они не решают ее.
Замена команд происходит в "подпрограммной среде", не обязательно в полноценной подпрограмме; оболочка будет избегать создания бесполезного процесса, если эффект от наличия подпрограммной среды может быть достигнут без неё. Если вы хотите увидеть полноценную подпрограмму, дайте ей что-то, для чего нужна полноценная подпрограмма; сравните:
$ echo "$(ps fax)"
PID TTY STAT TIME COMMAND
...
1317 ? Ss 0:00 /usr/sbin/sshd -D
1751 ? Ss 0:00 \_ sshd: alexp [priv]
1788 ? S 0:00 \_ sshd: alexp@pts/0
1789 pts/0 Ss+ 0:00 \_ -bash
1822 pts/0 R+ 0:00 \_ ps fax
...
$ echo "$(ps fax; echo)"
PID TTY STAT TIME COMMAND
...
1317 ? Ss 0:00 /usr/sbin/sshd -D
1751 ? Ss 0:00 \_ sshd: alexp [priv]
1788 ? S 0:00 \_ sshd: alexp@pts/0
1789 pts/0 Ss+ 0:00 \_ -bash
1823 pts/0 S+ 0:00 \_ -bash
1824 pts/0 R+ 0:00 \_ ps fax
...