É possível definir um comando no bash?

25

Por exemplo, posso definir:

gb = cd /media/Dan/evolution

... para que toda vez que executo gbno bash, eu possa cdnesse diretório específico?

Encontrei algo online: o aliascomando. Mas parece que não pode fazer o trabalho acima.

É possível fazê-lo? Quão?

zen
fonte
10
alias gb='cd /media/Dan/evolution'
Nykakin
4
@ Zen, aceite a resposta se resolver o problema. Este é um gesto de dizer obrigado para o usuário que você ajudou a resolver o problema :)
Ramesh
2
Nota: É sobre bash: o Linux é um kernel. O Linux é frequentemente utilizado incorretamente para se referir a todo o sistema operacional. Isso pode resultar em confusão. Por exemplo, a pergunta "posso fazer isso no Linux?" É se você pode fazer isso em algum computador, então sim. Porque você pode implementar qualquer sistema operacional que desejar, usando um kernel Linux. Portanto, precisamos saber qual deles você está usando Ubuntu Gnu + Linux + provavelmente X11 (se estiver em uma área de trabalho, ou seja, não em um servidor sem uma tela).
CTRL-ALT-DELOR
@richard Bom ponto, embora tecnicamente seja uma posixreclamação, não apenas bash.
11
@richard De fato, esse é o problema. Funciona já que as pessoas não querem dizer Android e esses sabores, mais ou menos. Não estou dizendo que é uma coisa boa, mas é o que é. Minha indicação estava implícita desde que eu estava comentando sua declaração de linux. Eu estava apenas me deixando claro, já que o assunto era o termo confuso. (Eu poderia ter entendido mal o seu último comentário)
Keyser

Respostas:

50

basta digitar:

alias gb='cd /media/Dan/evolution'

Para tornar essa configuração permanente (para que ela permaneça após você reiniciar ou abrir outro console), adicione esta linha ao arquivo ~ / .bashrc (assumindo que você use o bash como shell padrão)

roupão
fonte
Para torná-lo ainda mais agradável, você pode criar um arquivo de alias dedicado para seus aliasses, digitar ~ / .bash_aliases e chamá-lo de dentro do seu arquivo ~ / .bashrc, assim: [-e ~ / .bash_aliases] &&. ~ / .bash_aliases Dessa forma, você não "polui" o arquivo ~ / .bashrc com outras coisas.
22814 GeertVc #
39

Alternativa ao alias

gb() { cd /media/Dan/evolution; }

Isso define a função shell gb, que não aceita argumentos, e executa cd / media / Dan / evolution. Como em outras sugestões, isso pode ser adicionado ao ~ / .bashrc

user1207217
fonte
Com a desvantagem de que o comando alias mostra o alias definido, uma definição dessa função pode resultar em "comportamento inesperado". Vou votar até tu por causa da completitude :)
vfbsilva
7
Na verdade não. Você pode simplesmente digitar: declare -f gb para ver o que ele faz
Paul Calabro
11
Além disso, essa opção é mais flexível, pois permite adicionar sua lógica personalizada na definição da função para aceitar argumentos e fazer o que for necessário. Aliases apenas permitem passar argumentos e executar ações predefinidas .
Paul Calabro
5
@PaulCalabro Ainda melhor, type gbfuncionará se for um alias ou uma função.
Sparhawk
POSIXAMENTE: { echo 'true() { : ; }' >./script ; . ./script ; command -V true ; command -V /usr/bin/true ; }- true is a shell function\n/usr/bin/true is /usr/bin/true- os \ncaracteres eram literalmente novas linhas na saída.
mikeserv
11

É possível e aliasé o comando que você está procurando. Por exemplo, alias ll="ls -l"no bash permite digitar em llvez de ls -l. Observe que não há espaços usados ​​ao definir um alias. man aliaspode ser útil também.

Schaiba
fonte
-3

Como alternativa, é possível escrever um programa C que chama o comando desejado e salvá-lo em / usr / bin.

#include <stdio.h>
#include <string.h>

int main () {
    char command[50]; //notice you can change this to fit your needs
    int return_val;

    strcpy( command, "echo \"cd /media/Dan/evolution\" | bash -i" );
    return_val = system(command); 

   //this is equivalent to entering the command in a new bash, 
   //which will return and exit

    return return_val;
}

Para compilá-lo, vá para o diretório em que a fonte foi salva (no bash) e execute (você pode precisar do sudo):

 gcc ./gb.c -o /usr/bin/gb

Após mais pesquisas aqui , percebi que simplesmente inserir seu comando system()não funcionará para comandos bash incorporados. É por isso que você precisa criar uma instância de um bash interativo e repetir seus comandos. É muito complicado e provavelmente inútil, a menos que você queira, digamos, encurtar uma chamada para um script de shell (em some_scriptvez de sh ~/radgeRayden/Scripts/some_script).

Referência para a função system ()

radgeRayden
fonte
2
Você realmente tentou isso? Isso não funciona.
Dennis
11
Pela mesma razão que sh -c "cd /media/Dan/evolution"não funciona. Dica: subshell
Digital Trauma
5
cd/ subshell questões à parte, qual é a vantagem de agrupar um comando shell no programa c, quando você poderia facilmente (ou mais facilmente) colocar esse comando em um script shell?
Digital Trauma
11
Não é especialista nisso, mas algo assim (espero, algo mais útil) não deve ser colocado em / usr / local / bin?
18714 Joe
2
Mesmo que isso PODE funcionar, não deve entrar em / usr / local / bin, pois é específico para um usuário.
29414 Johan