我如何让管道插入字符中间一个字符串?这是我的示例(运行 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 -