重击外壳;Debian 扩展
如此处所示,我为su命令创建了一个“似乎在大多数情况下都可以正常工作”的别名函数(实际上,我还没有发现它有任何问题……还)。我已将它插入到我的/etc/bash.bashrc文件中。
function su() { if [[ $1 == "--" ]]; then command su "$@"; else command su -l "$@"; fi; }
但是,我知道它可能会有一些改进。
(我想要这个函数完成的是相当简单的。如果我可以使用常规别名,我想要这样的东西:
alias su='su -l
和alias 'su --'=su
但是,我意识到别名的名称不能有空格......而且逻辑似乎有点循环......)
我的 shell 函数是否有任何隐藏的陷阱?如果调用不同的选项(例如“su -c”),它是否会对“su”的操作产生负面影响?
如果你调用
su
with--
作为第一个参数,你想执行su "$@"
,否则你想调用su -l "$@"
:这似乎正是您的功能当前正在执行的操作,我看不出其中有任何错误。唯一的区别是我使用可移植的 POSIX 语法编写它。
su
唯一的潜在问题是,如果您想以其他方式使用,例如su -c ...
(将转换为su -l -c ...
,这可能不是您想要的,因为它会清除环境并更改当前工作目录)。在这些情况下使用command su
或。\su
在保留上述函数的原始功能的同时,这里唯一可以修改的可能是减少调用
su
. 这可以通过在调用之前修改参数列表来完成。如果第一个参数-l
不是--
:你不能用别名做任何类似的事情,因为别名是纯文本替换,因此没有可以像 shell 函数一样检查或更改的参数。