Linux: Posso criar um atalho para um comando cd complexo sem recorrer a um script de shell?

6

Em um servidor em que trabalho, sempre tenho que trabalhar em um diretório, vamos chamá-lo de /foo/bar . Nesse diretório é uma lista de diretórios do site. Dentro de cada um dos diretórios esses está um diretório para cada desenvolvedor. Então, a árvore se parece com isso:

/foo/bar/
         site1/
               userA/
               userB/
               userC/
         site2/
               userA/
               userB/
               userC/
         site3/
               userA/
         ...

Eu configurei um alias para o diretório raiz em meu .bash_profile, fb=/foo/bar , então meu fluxo de trabalho é assim:

$ cd $fb
$ cd site2
$ cd userA

A primeira e a terceira linha nunca mudam - sempre vou para o diretório userA de qualquer diretório de site para o qual eu mude.

Minha pergunta: Existe uma maneira inteligente de compactar isso em um único comando que acabei de passar no argumento "site2" sem ter que construí-lo em um script de shell? Ou o shell script é o único caminho?

    
por abeger 06.03.2013 / 22:44

4 respostas

6

Você poderia fazer algo com uma função bash

site() {
    cd /foo/bar/site${1}/userA
}

Coloque isso no seu .bashrc e chame como

site 2

irá levá-lo para / foo / bar / site2 / userA

    
por 06.03.2013 / 22:56
3

Use uma função bash como esta.

function myCD() {
   local site
   local user
   case $# in
     0)  read -p site: site
         read -p user: user
         ;;
     1|2)
        site=${1}
        user=${2:-userA}
        ;;
    *)
       echo "don't accept more as 2 arguments" >&2
       return 1
       ;;
   esac
   cd ${fb}/${site}/${user}
}
    
por 06.03.2013 / 22:59
3

Basta vinculá-los ao seu diretório pessoal:

ln -s /foo/bar/site{$1}/userA ~/workspace/$1

Dessa forma, todos eles parecerão locais para você. Não é preciso se preocupar até que um novo site seja adicionado.

Ou faça o que eu faço: Montá-los na minha estação de trabalho local via SSH diretamente no meu home-dir .. IDE e tudo o que são o que são, geralmente é mais eficiente.

mkdir ~/workspace/site1
sshfs -o idmap=user $USER@server:/foo/bar/baz/site1/userA ~/workspace/site1

Para desmontar,

fusermount -u ~/workspace/site1

De ajuda do ubuntu

Pop que em seu script de login, bingo, toda a sua base de trabalho são nos pertence!

    
por 07.03.2013 / 23:10
2

Você provavelmente poderia usar apenas um alias como

alias site2="cd /foo/bar/site2/userA"

Você também pode querer examinar a variável de ambiente CDPATH. Veja a man page do seu shell.

    
por 06.03.2013 / 22:59

Tags