Bash 如何从管道中运行命令

Bash 如何从管道中运行命令,bash,shell,Bash,Shell,我想从管道上运行命令,如“history”或“!23” 我怎样才能做到这一点 为什么下面的命令不起作用 echo“history”| xargs eval$1 首先回答(2): history和eval都是bash内置的。因此,xargs无法运行其中任何一个 xargs不使用$1参数manxargs了解正确的语法 对于(1),执行您正在尝试的操作并没有多大意义,因为shell历史不太可能在调用之间同步,但您可以尝试以下操作: { echo 'history'; echo '!23'; } |

我想从管道上运行命令,如“history”或“!23”

  • 我怎样才能做到这一点
  • 为什么下面的命令不起作用
  • echo“history”| xargs eval$1
    
    首先回答(2):

    • history
      eval
      都是bash内置的。因此,
      xargs
      无法运行其中任何一个
    • xargs
      不使用
      $1
      参数
      manxargs
      了解正确的语法
    对于(1),执行您正在尝试的操作并没有多大意义,因为shell历史不太可能在调用之间同步,但您可以尝试以下操作:

    { echo 'history'; echo '!23'; } | bash -i
    
    或:

    请注意,管道在子壳内部运行。环境变化不会被保留:

    x=1; echo "x=2" | while read -r cmd; do eval "$cmd"; done; echo "$x"
    
    首先回答(2):

    • history
      eval
      都是bash内置的。因此,
      xargs
      无法运行其中任何一个
    • xargs
      不使用
      $1
      参数
      manxargs
      了解正确的语法
    对于(1),执行您正在尝试的操作并没有多大意义,因为shell历史不太可能在调用之间同步,但您可以尝试以下操作:

    { echo 'history'; echo '!23'; } | bash -i
    
    或:

    请注意,管道在子壳内部运行。环境变化不会被保留:

    x=1; echo "x=2" | while read -r cmd; do eval "$cmd"; done; echo "$x"
    
    你可以这样试试 首先将历史记录命令重定向到文件(剪切行号)

    现在创建这个脚本hcmd.sh(参考此)

    你可以这样试试 首先将历史记录命令重定向到文件(剪切行号)

    现在创建这个脚本hcmd.sh(参考此)


    谢谢你,我感谢你花时间传播你的一些知识。我会对此表示支持,但我没有足够的“声誉”。谢谢你,我感谢你抽出时间传播你的一些知识。我会支持这一点,但我没有足够的“声誉”。
    #!/bin/bash
    while IFS='' read -r line || [[ -n "$line" ]]; do
        echo "Text read from file: $line"
        $line
    done < "cmd.txt"
    
    ./hcmd.sh