BASH SHELL; DEBIAN STRETCH
Como visto aqui , criei uma função de alias "parece funcionar bem, na maioria das vezes" para o comando su (na verdade, não consigo encontrar nenhum problema com ela... ainda). Eu o inseri em meu arquivo /etc/bash.bashrc .
function su() { if [[ $1 == "--" ]]; then command su "$@"; else command su -l "$@"; fi; }
No entanto, eu sei que provavelmente poderia ter alguma melhoria.
(O que eu quero que esta função realize é bastante simples. Se eu pudesse usar aliases regulares, eu gostaria de algo como:
alias su='su -l
Ealias 'su --'=su
No entanto, percebo que o nome de um alias não pode ter espaços... e a lógica parece um pouco circular... )
Minha função de shell tem alguma armadilha oculta? Isso afetará negativamente a operação de "su" se uma opção diferente for chamada (por exemplo, "su -c")?
Se você chamar
su
com--
o primeiro argumento, deseja executarsu "$@"
, caso contrário, deseja chamarsu -l "$@"
:Isso parece ser exatamente o que sua função está fazendo atualmente e não vejo falhas nela. A única diferença é que o escrevi usando a sintaxe POSIX portátil. O único problema em potencial é se você deseja usar
su
de alguma outra maneira, por exemplosu -c ...
(que seria transformado emsu -l -c ...
, que pode não ser exatamente o que você deseja, pois limpa o ambiente e altera o diretório de trabalho atual). Usecommand su
ou\su
para esses casos.A única coisa que poderia ser modificada aqui, mantendo a funcionalidade original da função acima, pode ser reduzir o número de branches que chamam
su
. Isso pode ser feito modificando a lista de argumentos antes da chamada. O seguinte precede a lista de argumentos-l
se o primeiro argumento não for--
:Você não seria capaz de fazer nada semelhante com um alias, pois um alias é uma substituição de texto simples e, portanto, não possui argumentos que possam ser examinados ou alterados da mesma forma que uma função shell.