管道 - 将管道插入字符串的中间

管道 - 将管道插入字符串的中间

我如何让管道插入字符中间一个字符串?这是我的示例(运行 Raspian):

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

这可能吗?另外,请注意,我不想使用静态 IP。

答案1

我认为您不想做您要求做的事情。如果您想要的只是将一个命令的输出用作另一命令的参数,那么类似$(...)或 的结构`...`就是您的朋友。例如:

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

请注意,这不是您所要求的,但它可以满足您的要求。

如果您确实希望将 stdin (管道)用作参数,您可以使用xargs(1)while或者在 shell 中快速循环。

这会将 stdin 放在行尾:

echo Hello | xargs echo "The word is:"

或者如果你想替换行内的某些内容:

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

但是,如果您无法理解 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 -

相关内容