问题背景

有两个写好的脚本,第 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

运行效果如下: