bash 跨脚本交互

问题背景

有两个写好的脚本,第1个脚本的某个输出,是第2个脚本的输入。由于第一个脚本输出的内容较多,且包含大量说明文字,不方便通过管道直接连接起来。

考虑封装一段客户端脚本,先调用脚本1,再调用脚本2,最后给出脚本2的输出。

这就涉及 bash 的跨脚本交互问题。

解决方案

其实很简单,使用 source 命令。

实例

现在有两个脚本,第二个脚本的输入,是第一个脚本的输出。

s1.sh:

#!/bin/bash

name="Lily"

echo 'name is '$name

s2.sh:

#!/bin/bash

if (($# < 1))
then
    echo "Need name, like 'Tom'"
    exit 1
fi

origin_name=$1

name="Super-$origin_name"
echo "Hello, $name!"

运行效果如下:

我们来编写一段测试脚本:

test.sh:

#!/bin/bash

source ./s1.sh >> /dev/null
echo 'before:' $name
source ./s2.sh $name >> /dev/null
echo 'after:' $name

运行效果如下: