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 -i
orsu
或su -
没有。
它在 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
拥有一切。你可以看一下这个答案了解这是关于什么的。不要跳过该答案下面的评论!