有bash回显执行命令的最终形式,可以吗?

时间:2012-05-05 11:41:23

标签: bash echo

我有一个小的bash脚本build1c.sh

if [ "$1" = "" ]; then
    echo "You must give a .c file to compile."
    exit 1
fi

cfile=$1
stem=${cfile%.*}

set -o verbose

gcc -c -g -Wall $cfile
gcc -o $stem $stem.o common.o reentrant.o -lssl -lcrypto

set +o verbose # optional here

目的是仅回显正在执行的gcc命令。我工作到一定程度。当我拨打build1c.sh client2.c时,我会看到输出

gcc -c -g -Wall $cfile
gcc -o $stem $stem.o common.o reentrant.o -lssl -lcrypto

set +o verbose # optional here

仍然很古怪,对吗?那些var引用($cfile$stem)没有得到它们的最终形式,所以回声变得毫无用处。

你知道,我喜欢看的是

gcc -c -g -Wall client2.c
gcc -o client2 client2.o common.o reentrant.o -lssl -lcrypto

是否有正确而简洁的方法来解决这个问题?

BTW:次要请求:我可以抑制set +o verbose本身的回声吗?

2 个答案:

答案 0 :(得分:2)

set -o verbose替换为set -x

答案 1 :(得分:2)

function echo_and_execute {
    echo "$@"
    "$@"
}

echo_and_execute gcc -c -g -Wall $cfile
echo_and_execute gcc -o $stem $stem.o common.o reentrant.o -lssl -lcrypto