Preguiçoso Resultado de cálculo das funções bash no alias

5

Eu quero abrir uma nova janela de terminal na localização atual com um simples comando no Ubuntu

gnome-terminal --working-directory='pwd' & disown

O trabalho é bom para mim. Mas quando eu coloco alias para bashrc

alias clone="gnome-terminal --working-directory='pwd' & disown "

pwd Calculado no início. Então eu recebo algo como.

$ type clone
 clone is aliased to 'gnome-terminal --working-directory=/home/user & disown '

É possível fazer pwd calcular somente quando eu chamar alias. Ou eu preciso escrever a função bash exceto alias?

    
por Stepan Loginov 03.12.2015 / 13:29

1 resposta

10

Use apenas aspas simples ao redor do comando alias declaration para que a substituição do comando ( pwd ) não ocorra enquanto declarar (e só será expandida quando o alias for chamado):

alias clone='gnome-terminal --working-directory='pwd' & disown'

Comece também a usar a sintaxe de substituição de comandos $() em vez de% e '' :

mais antiga e problemática
alias clone='gnome-terminal --working-directory="$(pwd)" & disown'

Observe também que gnome-terminal é projetado de tal maneira que sempre que você faz

gnome-terminal

abriria uma nova janela com o mesmo PID do original. Isso ocorre porque é o mesmo processo pelo design, sair não mata o (s) outro (s). Então você não precisa do disown e do backgrounding ( & ), apenas:

alias clone='gnome-terminal --working-directory="$(pwd)"'

faria.

Além disso, como apontado por @Digital Trauma, gnome-terminal sempre começa no diretório de trabalho atual, portanto, --working-directory não é necessário, pois você o define como pwd . Então você pode apenas fazer:

alias clone='gnome-terminal' 
    
por heemayl 03.12.2015 / 13:36