Is there a single line command to do `su`?

Solution 1:

If you want to write a script that runs as a different user something like this works, though it dows output the word "password" without a newline to standard out

su - username <<!
enterpasswordhere
enter commands to run as the new user
!

if you have a user named fred with a password of 1234 and want to get an ls of fred's home directory as fred, without the password string displayed, it would look like

su - fred <<! >/dev/null 2>&1
1234
whoami > /dev/tty
ls > /dev/tty
!

Solution 2:

I belive, there is not and it would not be a good idea. Here's why:
If you write a password in a command like su <username> -p <password>, it would be stored in plain text in your bash history. This is certainly a huge security issue.

If you need to run commands with su (or sudo) in an automated way, write a shellscript containig the commands without su or sudo and run su <username> script.sh