Como passar argumentos de linha de comando para um alias de shell?

Como faço para passar os argumentos da linha de comando para um alias? Aqui está uma amostra:

 alias mkcd = 'mkdir $ 1;  cd $ 1; '

Mas, neste caso, o $ xx está sendo traduzido no alias, criando tempo e não em tempo de execução. Eu, no entanto, criei uma solução usando uma function de shell (depois de pesquisar um pouco) como abaixo:

 function mkcd () {
   mkdir $ 1
   cd $ 1
 }

Só queria saber se existe uma maneira de criar aliases que aceitem parâmetros CL.
BTW – eu uso ‘bash’ como meu shell padrão.

Você encontrou o caminho: crie uma function em vez de um alias. O shell C tem um mecanismo para fazer argumentos para aliases, mas o bash e o shell Korn não, porque o mecanismo de function é mais flexível e oferece o mesmo recurso.

Apenas para reiterar o que foi postado para outros shells, no Bash os seguintes trabalhos:

 alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah' 

Executando o seguinte:

 blah one two 

Dá a saída abaixo:

 First: one Second: two 

Você não pode em ksh, mas você pode em csh.

 alias mkcd 'mkdir \!^; cd \!^1' 

Em ksh, a function é o caminho a percorrer. Mas se você realmente quiser usar o alias:

 alias mkcd='_(){ mkdir $1; cd $1; }; _' 

Para citar a página man do bash:

Não há mecanismo para usar argumentos no texto de substituição. Se argumentos forem necessários, uma function shell deve ser usada (veja FUNÇÕES abaixo).

Parece que você respondeu sua própria pergunta – use uma function em vez de um alias

Você também pode achar este comando útil:

mkdir dirname && cd $_

onde dirname é o nome do diretório que você deseja criar

Na verdade, você não pode fazer o que quiser com os aliases do Bash, pois os aliases são estáticos. Em vez disso, use a function que você criou.

Procure aqui mais informações: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/ . (Sim, eu sei que é mactips.org, mas é sobre Bash, então não se preocupe.)

Descobri que as funções não podem ser escritas no arquivo ~ / .cshrc. Aqui no alias que aceita argumentos

por exemplo, argumentos passados ​​para o comando ‘find’

 alias fl "find . -name '\!:1'" Ex: >fl abc 

onde abc é o argumento passado como!: 1

Isso funciona em ksh:

 $ alias -x mkcd="mkdir \$dirname; cd \$dirname;" $ alias mkcd mkcd='mkdir $dirname; cd $dirname;' $ dirname=aaa $ pwd /tmp $ mkcd $ pwd /tmp/aaa 

A opção “-x” torna o alias “exportado” – o alias é visível em subshells.

E esteja ciente do fato de que os aliases definidos em um script não são visíveis nesse script (porque os aliases são expandidos quando um script é carregado, não quando uma linha é interpretada). Isso pode ser resolvido com a execução de outro arquivo de script no mesmo shell (usando ponto).

A maneira mais fácil, é usar a function não alias. você ainda pode chamar uma function a qualquer momento do cli. No bash, você pode simplesmente adicionar o nome da function () {command} que carrega o mesmo que um alias.

 function mkcd() { mkdir $1; cd $1 ;} 

Não tenho certeza sobre outras conchas

Eu acho que você é capaz de fazer isso com funções shell se você estiver usando o bash: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/

Aqui está uma function de exemplo simples usando python. Você pode ficar em ~ / .bashrc
Você tem que ter um espaço após a primeira chave esquerda
O comando python precisa estar entre aspas duplas para obter a substituição da variável
Não se esqueça que ponto e vírgula no final

function count () {python -c “para num em xrange ($ 1): print num”;}

 $ count 6 0 1 2 3 4 5 $ 

Um alias vazio executará seus argumentos:

 alias DEBUG=