pipes - Inserindo o pipe no meio da string [duplicate]

1

Como eu faria um pipe inserir caracteres no meio de uma string? Aqui está o meu exemplo (rodando o Raspian):

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

Isso é possível? Além disso, observe que não gostaria de usar um IP estático.

    
por Colby Gallup 18.11.2015 / 15:42

2 respostas

2

Eu não acho que você queira fazer o que você está pedindo para fazer. Se tudo o que você quer é a saída de um comando usado como argumento de outro comando, as estruturas como $(...) ou '...' são suas amigas. Por exemplo:

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

Note que isto NÃO é o que você pediu, mas faz o que você quer.

Se você realmente quer que stdin (a pipe) seja usado como argumento, você pode usar xargs (1) ou um loop rápido de while no seu shell.

Isso coloca stdin no final da linha:

echo Hello | xargs echo "The word is:"

ou se você quiser substituir algo dentro da linha:

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

Mas os xargs podem ser difíceis de usar se você não for capaz de entender seu uso (um tanto misterioso). O comando xargs também varia de sistema operacional para sistema operacional; A opção -J funciona no BSD e OSX, mas não em algumas distribuições Linux mais antigas. Eu não sei qual sistema operacional você está usando.

Um loop pode ser mais fácil:

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

Ou no seu caso:

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

O loop só é executado uma vez, mas você pode montar sua linha de comando com um pouco mais de facilidade. YMMV.

    
por 18.11.2015 / 17:07
-2

Eu acho que você pode usar um traço que representa a saída padrão do comando anterior "hostname -I"

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

Se você quiser cortar o ipv6:

hostname -I | some command to cut ipv6 |sudo python ~/testsite/manage.py runserver -
    
por 18.11.2015 / 16:10

Tags