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

Col*_*lup 2 bash pipe

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

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

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

gho*_*oti 5

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

sudo python ~/testsite/manage.py runserver $(hostname -I):80
Run Code Online (Sandbox Code Playgroud)

请注意,这不是您要求的,而是您想要的。

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

这将 stdin 放在行尾:

sudo python ~/testsite/manage.py runserver $(hostname -I):80
Run Code Online (Sandbox Code Playgroud)

或者,如果您想替换该行内的某些内容:

echo Hello | xargs echo "The word is:"
Run Code Online (Sandbox Code Playgroud)

但是,如果您无法理解 xargs 的(有些神秘的)用法,那么使用它可能会很棘手。xargs 命令也因操作系统而异;该-J选项适用于 BSD 和 OSX,但不适用于某些较旧的 Linux 发行版。不知道你用的是什么操作系统。

循环可能更容易:

echo Hello | xargs -J % echo % is the word.
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下:

echo Hello | while read word; do echo "$word is the word."; done
Run Code Online (Sandbox Code Playgroud)

循环只运行一次,但您可以更轻松地组合命令行。天啊。