명령줄 인수가 있는 별칭/함수

명령줄 인수가 있는 별칭/함수

입력하는 것이 지겨워서 manage.py startserver 10.211.55.4:4000별칭을 만들기로 결정했습니다. 유일한 것은 포트가 때때로 변경된다는 것입니다. 그래서 저는 bash 프로필에서 이렇게 했습니다:

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

하지만 다음을 호출하면 runserver 3000시작되지만 즉시 다음과 같은 말이 중지됩니다.

"오류: 해당 IP 주소는 할당할 수 없습니다." 그러나 명령줄에 동일한 내용을 입력하면 아무런 불만 없이 작동합니다.

답변1

원래 시도에 따라 해당 기능을 다음과 같이 조정할 수 있습니다.

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

그런 다음 다음과 같이 호출하십시오.

PORT=3000 runserver

답변2

이는 실제로 아래의 실제 실행 예에서 볼 수 있듯이 Python/Django에 바인딩할 수 없는 IP 주소(시스템의 일부가 아닌 주소)를 제공할 때 Python/Django에서 반환되는 오류입니다.

$ 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.

따라서 IP 주소를 수정하거나( ifconfig --all사용 가능한 항목을 보려면 의 출력을 확인) 다음을 사용하여 IP 주소 모두에 바인딩해야 합니다.

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

배쉬 측면은 건전합니다.

답변3

당신은 제대로하고 있습니다.

테스트 중 네트워킹 문제가 발생한 것으로 의심되며, 실패한 테스트에서 해당 기능을 사용한 것은 우연의 일치였습니다. TCP 연결을 닫으면 아직 수신되지 않은 보류 중인 패킷이 있는 경우(패킷이 순서 없이 도착할 수 있음) 포트가 짧은 시간(30초) 동안 사용 상태로 유지됩니다. 이것이TIME_WAIT상태. 새 서버를 즉시 다시 시작하려면,SO_REUSEADDR깃발 을 세우다with setsockopt(Python에 예제가 있습니다.socket선적 서류 비치).

답변4

그룹 명령 { list; }과 here-string <<<리디렉션을 사용하여 별칭을 만들 수 있습니다. 주요 목표는 stdin명령으로 리디렉션하는 것입니다. 아래에 몇 가지 방법이 나와 있습니다.

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";} <<<'

뒤의 공백 {과 앞의 세미콜론이 }필요합니다.

관련 정보