我正在尝试将现有的bash脚本移植到Solaris和FreeBSD。它在Fedora和Ubuntu上运行良好。
此bash脚本使用以下命令集将输出刷新到临时文件。
file=$(mktemp)
# record test_program output into a temp file
script -qfc "test_program arg1" "$file" </dev/null &
脚本程序在FreeBSD和Solaris上没有-qfc选项。在Solaris和FreeBSD上,脚本程序只有-a选项。到目前为止,我已经完成了以下工作:
1)更新到最新版本的bash。这没有用。
2)尝试找出“脚本”程序源代码的确切位置。我也找不到它。
有人可以帮助我吗?
答案 0 :(得分:2)
script
是一个独立的程序,不是shell的一部分,正如您所注意到的,只有-a
标志可用于所有变体。 FreeBSD版本支持类似于-f
(-F <file>
)的内容,并且不需要-c
。
这是一个丑陋但更便携的解决方案:
buildsh() {
cat <<-!
#!/bin/sh
SHELL="$SHELL" exec \\
!
# Build quoted argument list
while [ $# != 0 ]; do echo "$1"; shift; done |
sed 's/'\''/'\'\\\\\'\''/g;s/^/'\''/;s/$/'\''/;!$s/$/ \\/'
}
# Build a shell script with the arguments and run it within `script`
record() {
local F t="$(mktemp)" f="$1"
shift
case "$(uname -s)" in
Linux) F=-f ;;
FreeBSD) F=-F ;;
esac
buildsh "$@" > "$t" &&
chmod 500 "$t" &&
SHELL="$t" script $F "$f" /dev/null
rm -f "$t"
sed -i '1d;$d' "$f" # Emulate -q
}
file=$(mktemp)
# record test_program output into a temp file
record "$file" test_program arg1 </dev/null &