更改用户并在bash下执行一个命令

更改用户并在bash下执行一个命令,bash,Bash,基本上,我想切换到用户postgres并获得数据库列表。这是一个结构脚本,它从文本文件中逐个读取命令行,执行它们,然后将它们的输出保存到文件中 su-postgres&&psql-c'\l' 当我在bash下直接执行此操作时: (ssha)root ~$su - postgres && psql -c '\l' postgres@localvm:~$ 我看到了一个相关的问题,但这不适用于我的每命令一行方案,我不需要完整的脚本,只需要一个命令。您可以使用su-c: su - po

基本上,我想切换到用户postgres并获得数据库列表。这是一个结构脚本,它从文本文件中逐个读取命令行,执行它们,然后将它们的输出保存到文件中

su-postgres&&psql-c'\l'

当我在bash下直接执行此操作时:

(ssha)root ~$su - postgres && psql -c '\l'
postgres@localvm:~$

我看到了一个相关的问题,但这不适用于我的每命令一行方案,我不需要完整的脚本,只需要一个命令。

您可以使用
su-c

su - postgres -c "psql -c '\l'"
虽然通常您也会有
sudo
,它更健壮,更易于使用:

sudo -u postgres psql -c '\l'

您可以使用
su-c

su - postgres -c "psql -c '\l'"
虽然通常您也会有
sudo
,它更健壮,更易于使用:

sudo -u postgres psql -c '\l'

su
用于替换用户并作为新用户运行交互式shell。您正在寻找的工具是
sudo
,其目的是作为另一个用户仅运行一个命令。@axiac fair point。我倾向于忘记这一点,因为我(或结构)已经在根目录下,所以不要自动想到
sudo
。ttg的第二个配方完美无瑕。
su
用于替代用户并作为新用户运行交互式shell。您正在寻找的工具是
sudo
,其目的是作为另一个用户仅运行一个命令。@axiac fair point。我倾向于忘记这一点,因为我(或结构)已经在根目录下,所以不要自动想到
sudo
。ttg的第二个配方完美无瑕。