“su”命令的别名

“su”命令的别名

bash shell;德比安伸展运动

正如所见这里,我为命令(实际上,我还没有发现它有任何问题......)。我已将其插入我的/etc/bash.bashrc文件。

function su() { if [[ $1 == "--" ]]; then command su "$@"; else command su -l "$@"; fi; }

然而,我知道它可能需要一些改进。

(我想要这个函数完成的事情相当简单。如果我可以使用常规别名,我想要类似的东西:

alias su='su -lalias 'su --'=su

但是,我意识到别名的名称不能有空格......而且逻辑似乎有点循环......

难道我的shell函数有什么隐藏的陷阱吗?如果调用不同的选项(例如“su -c”),是否会对“su”的操作产生负面影响?

答案1

如果您以第一个参数调用su--则需要执行su "$@",否则您需要调用su -l "$@"

su () {
    if [ "$1" = -- ]; then
        command su "$@"
    else
        command su -l "$@"
    fi
}

这似乎正是您的函数当前正在执行的操作,我认为它没有任何错误。唯一的区别是我使用可移植的 POSIX 语法编写它。唯一的潜在问题是如果您想su在某些情况下使用其他例如su -c ...(它将转换为su -l -c ...,这可能不完全是您想要的,因为它会清除环境并更改当前工作目录)。用于command su这些情况。

在保留上述函数的原始功能的同时,这里唯一可能修改的可能是减少调用su.这可以通过在调用之前修改参数列表来完成。-l如果第一个参数不是--,则以下内容会在参数列表前面添加:

su () {
    [ "$1" != -- ] && set -- -l "$@"
    command su "$@"
}

您将无法对别名执行任何类似操作,因为别名是纯文本替换,因此没有可以像 shell 函数一样检查或更改的参数。

相关内容