alias/função com argumentos de linha de comando

alias/função com argumentos de linha de comando

Estou cansado de digitar manage.py startserver 10.211.55.4:4000, então decidi criar um alias para isso. A única coisa é: a porta às vezes muda. Então eu fiz isso no perfil bash:

function runserver() {
   python manage.py runserver 10.211.55.4:$1
}

Mas então quando eu chamo: runserver 3000, ele inicia, mas imediatamente para de dizer:

"Erro: esse endereço IP não pode ser atribuído". No entanto, se eu digitar a mesma coisa diretamente na linha de comando, ela funcionará sem reclamações.

Responder1

Seguindo as linhas de sua tentativa original, você pode ajustar essa função para o seguinte:

function runserver() {
    python manage.py runserver 10.211.55.4:$PORT
}

e então chame assim:

PORT=3000 runserver

Responder2

Na verdade, este é um erro que você recebe do Python/Django quando fornece um endereço IP ao qual ele não pode se vincular (um que não faz parte do sistema), conforme mostrado em um exemplo real recém-executado abaixo:

$ python manage.py runserver 123.123.123.123:8000
Validating models...

0 errors found
June 03, 2014 - 22:36:58
Django version 1.5.7, using settings 'tv.settings'
Development server is running at http://123.123.123.123:8000/
Quit the server with CONTROL-C.
Error: That IP address can't be assigned-to.

Então você precisa corrigir seu endereço IP (veja a saída de ifconfig --allpara ver o que está disponível) ou apenas vincular a todos eles com:

function runserver() {
    python manage.py runserver 0:$1
}

O lado bash das coisas é sólido.

Responder3

Você está fazendo isso certo.

Suspeito que você esteja enfrentando um problema de rede em seus testes, e o fato de o teste com falha ter usado a função foi uma coincidência. Ao fechar uma conexão TCP, a porta permanece em uso por um pequeno período de tempo (30s), caso houvesse pacotes pendentes que ainda não foram recebidos (os pacotes podem chegar fora de ordem). Isto é oTIME_WAITestado. Para permitir que um novo servidor seja reiniciado imediatamente,definir a SO_REUSEADDRbandeiracom setsockopt(há um exemplo no Pythonsocketdocumentação).

Responder4

Podemos criar um alias com comando de grupo e redirecionamento { list; }de string aqui . <<<O objetivo principal é redirecionar stdinpara o comando. Existem algumas maneiras apresentadas abaixo

alias runserver='{ xargs -I % python manage.py runserver 10.211.55.4:%;} <<<'

alias runserver='{ IFS= read -r port; python manage.py runserver 10.211.55.4:"$port";} <<<'

alias runserver='{ port=$(line); echo python manage.py runserver 10.211.55.4:"$port";} <<<'

Observe que o espaço depois {e o ponto e vírgula antes }são obrigatórios.

informação relacionada