代码之家  ›  专栏  ›  技术社区  ›  Geo

如何使用新的环境变量管道连接到下一个命令?

  •  0
  • Geo  · 技术社区  · 12 年前

    我有一个shell脚本,它声明了一些变量:

    export X=1
    export Y=2
    

    我希望能够做这样的事情:

    . ./path/to/script | command_that_has_access_to_X_and_Y
    

    基本上,以某种方式获取脚本的源代码,这样管道后面的命令就可以访问这些变量。这样的事情有可能吗?

    编辑: 我想运行的命令之一是pg_dump,凭据位于shell文件中:

    基本上,我正在尝试运行这个:

    bash -c "pg_dump \$PRODUCTION_DB --password \$PRODUCTION_PASSWORD --user \$PRODUCTION_USERNAME --host \$PRODUCTION_HOST > #{backup_name}.sql"
    
    2 回复  |  直到 12 年前
        1
  •  2
  •   chepner    12 年前

    没有必要使用管道。假设你有 export 第一个脚本中的命令,这些变量将可用于第二个脚本。

    . ./path/to/script
    command_that_has_access_to_X_and_Y
    

    管道只是一种将一个脚本的标准输入连接到另一个脚本标准输出的工具。这是使用临时文件的有效替代方案; x | y 或多或少与

    x > tmp.txt
    y < tmp.txt
    

    除了操作系统处理从 x y 以便两者可以同时运行 y 接收输入作为 x 产生它。

        2
  •  1
  •   konsolebox    12 年前

    您可以改为通过回声发送:

    左侧的脚本:

    #!/bin/bash
    X='Something X'
    Y='Something Y'
    echo "$X"
    echo "$Y"
    

    右侧命令:

    ... | bash -c "read -r X; read -r Y; echo \"\$X : \$Y\""
    

    生产:

    Something X : Something Y