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.