To invoke a login shell using `sudo` just use `-i`. When command is not specified you'll get a login shell prompt, otherwise you'll get the output of your command.

Example (login shell):

 sudo -i

Example (with a specified user):

 sudo -i -u user

Example (with a command):

 sudo -i -u user whoami

Example (print user's `$HOME`):

 sudo -i -u user echo \$HOME

Note: The backslash character ensures that the dollar sign reaches the target user's shell and is not interpreted in the calling user's shell.

I have just checked the last example with *strace* which tells you exactly what's happening. The output bellow shows that the shell is being called with `--login` and with the specified command, just as in your explicit call to bash, but in addition *sudo* can do its own work like setting the `$HOME`.

 # strace -f -e process sudo -S -i -u user echo \$HOME
 execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
 ...
 [pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
 ...

I noticed that you are using `-S` and I don't think it is generally a good technique. If you want to run commands as a different user without performing authentication from the keyboard, you might want to use SSH instead. It works for `localhost` as well as for other hosts and provides public key authentication that works without any interactive input.

 ssh user@localhost echo \$HOME

Note: You don't need any special options with SSH as the SSH server always creates a login shell to be accessed by the SSH client.