Aliasing 'python' para 'ipython' somente quando 'python' é executado sem args

4

Eu pensei que seria legal ter um alias (em ~ / .zshrc) para ter um 'python' aliado ao 'ipython' SOMENTE quando 'python' for executado sem args (caso contrário, os programas não serão iniciados). Primeiro de tudo, como expressar "sem args" em um pseudônimo? Em segundo lugar, o que você acha disso?

    
por mbologna 16.02.2013 / 15:35

2 respostas

5

Aliases de shell, por definição, não oferecem uma maneira de usá-los condicionalmente. Eles se aplicam a qualquer coisa que você execute a partir de um prompt interativo.

A maneira de fazer isso é com uma função. (Veja No Bash, quando alias, quando escrever e quando escrever uma função? para saber mais sobre o porquê isso é diferente.)

function python () {
    test -z "$1" && ipython || command python "$@"
}

Algo parecido com essas linhas no arquivo rc do seu shell fará com que seu shell execute esta função ao invés do binário diretamente. Se o primeiro argumento estiver em branco, ele disparará o ipython para você, caso contrário, passará todos os argumentos para qualquer binário python em seu caminho (observe o uso de command para forçar o binário em vez da função a executar e causar uma recursão em si mesmo.

    
por 16.02.2013 / 16:14
1

Não tenho certeza se você pode fazer isso em um alias de zsh, mas por que não colocar esse script de shell pequeno em ~/bin as python :

#!/bin/bash
if test -z "$1"; then
    exec /usr/bin/ipython
else
    exec /usr/bin/python "$@"
fi
    
por 16.02.2013 / 16:00

Tags