Bash 别名未在 Debian 上加载,但在 Mint 上,当 sudo -s 时会加载

Bash 别名未在 Debian 上加载,但在 Mint 上,当 sudo -s 时会加载

ls两台机器上定义了完全相同的别名:

$ cat ~/.bash_aliases | grep -e "alias ls=" -e "alias l=" -e "alias lll="
alias ls='\ls --kibibytes --color=always --group-directories-first'
alias l='ls'
alias lll='l -la'

Linux 薄荷 (18.1)

(我坐在这台机器前。)

$ sudo -s
[sudo] password for ...

$ lll
(very long list of files)

GNU/Linux Debian Stretch(9,测试)

(我ssh到这台机器。)

$ ssh username@ip_address_of_server -p port_number

$ sudo -s
[sudo] password for ...

$ lll
lll: command not found

问题

如何实现sudo -s在 Debian 上获取我的个人别名的目标,就像在 Linux Mint 上一样?


sudo -s解释

sudo -s在我的 Linux Mint 上有源别名,而sudo -iorsusu -没有。

它在 Linux Mint 上可以满足我的需要,我定义了很多有用的别名,并且我希望它也可以在我的 Debian 服务器上工作。

答案1

您需要.bash_alias在正确的 shell 初始化文件中获取该文件。初始化文件根据 shell 的启动方式而有所不同。通过 ssh 调用它和在本地计算机上调用它是不同的。但随后再次调用它sudo -s会使其在两台计算机上相同,因为它启动了一个交互式非登录 root shell。但要获得相同的别名,您需要具有相同的定义。

如果您坚持使用sudo -s,那么将您的.bash_aliases文件来源到 ssh 用户的.bashrc.因此,将此行添加到就足够了~/.bashrc

. ~/.bash_aliases

请注意,该lll别名在您之前在您的 Mint 上有效sudo -s,但在 Debian 上则不然,因为那是一个 ssh 会话,因此是一个登录 shell,而在 Mint 上它只是交互式的。如果您希望别名在 ssh Debian 上立即可用,您必须向您的.profile文件添加另一个源。

这是相当复杂的,要了解整个情况,您需要阅读一些内容并了解登录和交互式 shell。man bash拥有一切。你可以看一下这个答案了解这是关于什么的。不要跳过该答案下面的评论!

相关内容