É possível criar aliases de areia?

8

Estou procurando uma maneira de fazer o seguinte alias funcionar para qualquer nome de arquivo.

alias dim='cd /home/jason/Documents; vim *the desired file*; cd'

Gostaria de saber se existe uma maneira de alterar esse alias para torná-lo para que eu possa digitar qualquer nome de arquivo como tal:

dim *the desired file*

E ainda obtém o mesmo resultado. Basicamente, existe uma maneira de chamar o que for digitado após o nome do alias no próprio alias? Algo como:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'
Jason Basanese
fonte
//, qual foi o objetivo disso?
Nathan Basanese

Respostas:

8

Não, você não pode fazer isso usando aliases de shell. Você precisa usar uma função.

Aqui está uma função simples para fazer o trabalho:

dim() {
cd /home/jason/Documents
vim "$1"
cd
}

A função dimterá um nome de arquivo como argumento. Você pode colocar esse trecho de código no final do seu ~/.bashrcarquivo e executá-lo como:

dim file.txt

Substitua file.txtpor qualquer nome de arquivo desejado.

Para executá-lo a partir da sessão atual do shell, primeiro sourceo ~/.bashrcarquivo:

. ~/.bashrc
heemail
fonte
3
O que significa "$ 1"? Sou iniciante e estou tentando aprender, em vez de apenas copiar e colar e encerrar o dia.
Jason Basanese
1
@JasonBasanese Agradeço a sua decisão :) $1indica o primeiro parâmetro posicional ou argumento para a função .. pense nisso como uma maneira de dar entrada a uma função ou script .. como todas as linguagens de programação bashtambém usam isso .... você encontrar inúmeros recursos sobre isso no Google ..
heemayl
3

Não com aliases, use funções.

Na página do manual do Bash :

APELIDO

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

Portanto, sua função pode ser:

função dim () {cd ~ jason / Documents; vim $ *; cd -;}

CijcoSistems
fonte
1
~ / Documentos não funcionariam bem nesse caso? Além disso, o que os símbolos $ e * significam neste caso? e é necessário - após o CD? Normalmente, basta digitar cd e ele sobe em um diretório.
Jason Basanese
“Geralmente eu posso apenas digitar cd e ele sobe em um diretório” - eu só conheço um plano cdpara levá-lo ao seu diretório pessoal; cd ..sobe um nível. cd -traz para o diretório anterior da qual você cd'ed.
Chriki
1
@ JasonBasanese: Sim ~ / Documentos funcionariam para todos (se for uma função para todos os usuários). $*é como $1 $2 $3...apenas dar a lista inteira ao vim, não o primeiro argumento digitado. E, como Chriki disse, cd -retornará ao diretório anterior (o que você era quando invocou a função).
CijcoSistems 17/07/2015