파이프 - 문자열 중간에 파이프를 삽입합니다.

파이프 - 문자열 중간에 파이프를 삽입합니다.

파이프 삽입 문자를 만드는 방법가운데문자열? 다음은 내 예입니다(Raspian 실행).

hostname -I | sudo python ~/testsite/manage.py runserver {the ip from the first command}:80

가능합니까? 또한 고정 IP를 사용하고 싶지 않습니다.

답변1

내 생각엔 당신이 요청한 일을 하고 싶지 않은 것 같아요. 원하는 것이 한 명령의 출력을 다른 명령의 인수로 사용하는 것이라면 $(...)or와 같은 구성이 `...`친구입니다. 예를 들어:

sudo python ~/testsite/manage.py runserver $(hostname -I):80

이는 귀하가 요청한 것이 아니지만 귀하가 원하는 대로 수행됩니다.

실제로 stdin(파이프)을 매개변수로 사용하려면 다음을 사용할 수 있습니다.xargs(1)while또는 쉘에서 빠른 루프를 수행하십시오.

이렇게 하면 stdin이 줄 끝에 배치됩니다.

echo Hello | xargs echo "The word is:"

또는 한 줄 내의 내용을 바꾸려면 다음을 수행하세요.

echo Hello | xargs -J % echo % is the word.

그러나 xargs의 사용법을 이해하지 못하면 xargs를 사용하는 것이 까다로울 수 있습니다. xargs 명령은 운영 체제에 따라 다릅니다. 이 -J옵션은 BSD 및 OSX에서 작동하지만 일부 이전 Linux 배포판에서는 작동하지 않습니다. 어떤 운영 체제를 사용하고 있는지 모르겠습니다.

루프가 더 쉬울 수 있습니다.

echo Hello | while read word; do echo "$word is the word."; done

또는 귀하의 경우:

hostname -I | while read ip; do
    sudo python ~/testsite/manage.py runserver ${ip}:80
done

루프는 한 번만 실행되지만 명령줄을 더 쉽게 결합할 수 있습니다. YMMV.

답변2

대시를 사용하여 이전 명령 "hostname -I"의 표준 출력을 나타낼 수 있다고 생각합니다.

hostname -I | sudo python ~/testsite/manage.py runserver -

IPv6를 차단하려면:

hostname -I | some command to cut ipv6 |sudo python ~/testsite/manage.py runserver -

관련 정보