Quero saber se posso passar um argumento com um comando de alias.
por exemplo:
alias d="dmesg|grep -iw usb|tail -5"
Agora d
imprimirá as últimas 5 linhas. Se eu quiser usar d para imprimir um número diferente de linhas, preciso alterar d
novamente a declaração do comando alias .
Existe alguma maneira de modificar a declaração de um alias para não precisar redigitar a declaração para alterar o número de linhas. Como incorporar a passagem do número de linhas como argumento e declarar alias para d
? Ou existe algum outro método para resolver isso?
command-line
bash
alias
srk_cb
fonte
fonte
Respostas:
Os aliases não aceitam argumentos. Com um alias como
alias foo='bar $1'
, o$1
será expandido pelo shell para o primeiro argumento do shell (que provavelmente não é nada) quando o alias for executado.Então: use funções , em vez disso.
num=${1:-5}
usa o primeiro argumento, com um valor padrão 5, se não for fornecido.Então você pode fazer:
Ou, se você alterar as opções que você usou um pouco:
Então você pode passar
-n
opções adicionais :Se várias
-n
opções forem especificadas paratail
, apenas a última será usada.fonte
~/.bashrc
ou seja,rc.local
ou onde?Você precisa ter uma função para isso, conforme descrito no SO e aqui . Tente o seguinte:
e chame o
foo
com:fonte
Solução de limitações de alias com comando de grupo e cadeia de caracteres here
Os aliases não podem aceitar argumentos, mas podemos "simular" isso. Tomemos, por exemplo, um exemplo da minha resposta a esta pergunta .
Pontos principais que estão acontecendo aqui:
read
construído para ler uma string em uma variáveld
. Como queremos ler uma sequência completa, incluindo caracteres em branco (novas linhas, guias, espaços), usamosIFS=
e desabilitamos as barras invertidas-r
.<<<
o operador here-string permite redirecionar qualquer string que forneça como argumento para omkcd
alias; o uso seria tãomkcd "some directory"
{ list; }
estrutura (que é conhecida comogroup command
nobash
manual). Observe que o espaço à esquerda{
e;
a lista individual de comandos são necessários.No seu exemplo específico, poderíamos fazer:
Também poderíamos usar a divisão de palavras para armazenar argumentos separados por espaço:
Ou podemos usar matrizes para fornecer vários argumentos:
Mas essa é uma boa abordagem?
Não necessariamente. O problema dessa abordagem é que ela é muito específica - argumentos não podem ser citados facilmente, o que significa que só podemos ter argumentos sem espaços.
Obviamente, isso não é algo que seria amplamente utilizado, simplesmente porque no mundo real temos que lidar com argumentos complexos, portanto essa abordagem não é muito prática. As funções são muito mais flexíveis. E a necessidade de citar args string se torna irritante rapidamente.
Apesar das limitações, isso funciona com cadeias simples como argumentos nos quais podemos permitir a divisão de palavras, assim, parcialmente nos permite fornecer argumentos para aliases.
fonte