Ubuntu:运行另一个命令的输出


13

我有输出不同命令行的命令行,例如:

> commandlineA param1 param2
  commandlineB param1

我希望有一个命令行执行,它将使用给定的参数运行commandlineB。

有没有简单的方法可以使用单个命令行来执行此操作,或者我需要运行一个小的bash文件,该文件将输出存储在变量中然后运行它?

谢谢


2
搜索了好一阵子,但我想我不得不自己发布一个问题.... $(commandlineA param1 param2)完成了工作。
Lior Ohana

Answers:


17

您似乎自己已经解决了这个问题,但是可以使用:

$(command parameter1 parameter2)

编辑编辑:以下内容有些错误,尽管它确实在子shell中运行命令,但事实证明环境变量仍然可用。抱歉误导别人...

编辑:它将在子shell中运行,不会使用任何未导出的环境变量。如果要在同一外壳中运行命令,则需要使用:

eval $(command parameter1 parameter2)

给出的另一个答案是通过bash本身进行管道传输:

echo 'uname -a' | bash 

这也将在子shell中执行,以便在需要的同一个shell中运行:

echo 'uname -a' | bash -c

顺便说一句,您也可以使用反斜杠代替$()语法,但是不建议这样做


(1)我不完全知道您的意思是“将在子shell中运行”。使用未导出的环境变量。(2)我没有任何理由在eval这里使用。如果有原因,请解释一下。(3)您的最后一个示例(带有  -c)是完全错误的。
斯科特,

您是正确的,我再次检查了,发现那里不对。当以列表形式运行时,bash shell分支和环境变量仍然可用。所以你是正确的,对此感到抱歉。
克里斯·夏洛克

4

用这个:

commandlineA param1 param2 | bash

例:

echo "uname -a" | bash

输出:

Linux k1104 2.6.38-8-generic#42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU / Linux

这没有什么问题,但是它将生成另一个bash shell。
克里斯·夏洛克

所以会$(commandlineA param1 param2)
tripleee

@tripleee:您正在比较橙子和南瓜。  printf '\143\144\040\057\n' | bash最终是无操作的,因为命令是在一个新的,单独的(和瞬时的)shell进程中执行的。相反,这$(printf '\143\144\040\057\n')将导致当前的,活动的,交互式的Shell更改目录。
斯科特,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.