【问题标题】:Can I execute nested or chained commands in UNIX shell?我可以在 UNIX shell 中执行嵌套或链式命令吗?
【发布时间】:2010-09-19 14:28:46
【问题描述】:

我可以在 UNIX shell 中的另一个命令中执行命令吗?

如果不可能,我可以使用上一个命令的输出作为下一个命令的输入吗,如:

command x 然后command y

command y 在哪里我想使用command x 的输出?

【问题讨论】:

  • @Mohammad:我删除了 svn 标签,因为这与 svn 无关,这是一个通用的命令管道问题。
  • 我认为您需要描述您遇到的更大问题。 究竟你想完成什么?
  • 1.我想找到所有存储库.... 2. 我想找到所有存储库的整个目录....注意:执行步骤一的结果超过 500 个存储库所以我需要通过简单的方法执行步骤二的方法,,,,
  • 我执行以下命令:-find / -type f -name fs-type -exec svnlook tree {} \; |egrep "/$" ... 结果是 svnlook: Can't open file '/var/lib/svn/repos/b1me/products/payone/generic/code/core/db/fs-type/format':不是目录svnlook:无法打开文件'/var/lib/svn/repos/b1me/products/payone/generic/code/fees/db/fs-type/format':不是目录.....也许我们必须让 find 命令给我们没有“db/fs-type/format”的路径,但我怎么能做到这一点???

标签: linux command-line ubuntu nested solaris


【解决方案1】:

您可以为此使用反引号。

例如,这将 cat file.txt

cat `echo file.txt`

这将打印日期

回显日期是`date`

反引号之间的代码将被执行并被其结果替换。

【讨论】:

  • 请给我更详细的例子
  • 但请在以下情况下解决方案是什么:我执行“find / -type f -name fs-type -print”这个逗号找到所有存储库......现在我需要找到所有目录通过这个命令“svnlook tree /var/lib/lib.org.15-01-2008/svn/repos/pstest | egrep”/$
  • 那你需要看一下find的-exec选项
  • 是否可以嵌套反引号?我正在尝试在命令中使用此表达式的结果: realpath --relative-to=pwd git top pwd (其中 git top 是在存储库顶部执行的别名。想法是把它在 find 命令中,这将为我提供结果的相对路径,用于 selecta 模糊选择 vim 绑定。
  • googlefoo 显然让我失望了:这里是 linuxmisc.com/12-unix-shell/d9c594a376ffed37.htm - $ FOO=` echo \` echo hello \` ` - 即逃避内部的
【解决方案2】:

你可以这样做;

x=$(grep $(dirname "$path") file)

这里dirname "$path"会先运行,其结果会被替换,然后grep会运行,在file中搜索dirname的结果

【讨论】:

  • 但请在以下情况下解决方案是什么:我执行“find / -type f -name fs-type -print”这个逗号找到所有存储库......现在我需要找到所有目录通过此命令“svnlook tree /var/lib/lib.org.15-01-2008/svn/repos/pstest | egrep”/$ ..... 我该如何解决它
  • @Mohammed:将其添加到您的主要问题中。
  • 我想找到我所有的存储库,然后找到它的全部内容
【解决方案3】:

你到底想做什么?从您正在执行的命令中不清楚。也许如果您描述您正在寻找的内容,我们可以为您指明正确的方向。如果要对“find”命令返回的一系列文件(或目录)名称执行命令,Colin 是正确的,您需要查看“find”的“-exec”选项。如果您希望对文件中列出的或来自标准输入的一堆参数执行命令,则需要查看“xargs”命令。如果您想将单个命令的输出放到另一个命令的命令行上,那么使用“$(command)”(或 'command' [用反引号替换 ')就可以了。有很多方法可以做到这一点,但在不知道你在尝试什么的情况下,很难提供更多帮助。

【讨论】:

    【解决方案4】:

    这是我使用嵌套系统命令的示例。 我在 find 命令之上运行了“ls -ltr”。它执行 它在查找输出上串行。

    ls -ltr $(find .-name "srvm.jar")

    【讨论】:

    • 您知道find 末尾的-ls 吗?喜欢这里:find . -name "srvm.jar" -ls.
    最近更新 更多