Pass-Befehle als Eingabe für einen anderen Befehl (su, ssh, sh usw.)

Ich habe ein Skript, in dem ich einen Befehl starten und dann einige zusätzliche Befehle übergeben muss.as Befehle zu diesem Befehl. Ich habe es versuch

su
echo I should be root now:
who am I
exit
echo done.

... aber es funktioniert nicht: Dassu ist erfolgreich, aber dann starrt mich die Eingabeaufforderung nur an. Wenn ich @ eingeexit an der Eingabeaufforderung dasecho undwho am i etc starte die Ausführung! Und dieecho done. wird überhaupt nicht ausgeführt.

Ähnlich, ich brauche dafür zu arbeiten überssh:

ssh remotehost
# this should run under my account on remotehost
su
## this should run as root on remotehost
whoami
exit
## back
exit
# back

Wie löse ich das?

Ich suche nach Antworten, die dies allgemein lösen und die nicht spezifisch für @ sinsu oderssh im Speziellen. Diese Frage soll ein @ werd canonical für dieses bestimmte Muster.