如何在函数中执行dialog
,以便其他函数可以使用其结果?
function a(){
echo IN A
TMPFILE=$(mktemp)
dialog --nocancel --no-lines --no-button --no-description --menu " -" 20 50 8 \
`echo "$*" | sed 's/^\(.*\)$/\1 ·/g'` 2>$TMPFILE
clear
cat $TMPFILE
}
function b(){
echo IN B
a $* | sed 's/\(.*\)/oo\1oo/g'
}
echo IN PROG
b $*
为了执行它,我运行:
./aaaa.sh ff1 dd2 ee33 ff66 ll11
结果如下。它没有显示对话框,但应该有许多空行。
IN PROG
IN B
ooIN Aoo
oo
ff1oo
我试图用$(a $*)
或`a $ *`执行它,但没有成功
答案 0 :(得分:1)
在你的函数“b”中,“a”标准输出上的所有内容都被发送到“sed”。这意味着“对话框”和“猫”都将其标准输出重定向到“sed”,这将以当前形式打破它。
这是固定版本:
function a(){
echo IN A
TMPFILE=$(mktemp)
dialog --nocancel --no-lines --no-button --no-description --menu " -" 20 50 8 \
`echo "$*" | sed 's/\([^[:space:]]\+\)/\1 ·/g'` >&2 2>$TMPFILE
clear
cat $TMPFILE
}
function b(){
echo IN B
a $* | sed 's/\(.*\)/oo\1oo/g'
}
echo IN PROG
b $*
使其工作的诀窍是没有“对话框”标准输出(表格)从功能“b”发送到“sed”。为了实现这一点,我将“对话框”的标准输出重定向到当时错误输出的同一位置(让我们将其称为错误屏幕),然后将错误输出重定向到文件,但这不会影响标准输出的位置重定向到(错误屏幕)。
我还从sed修改了reg-exp,因为echo "$*"
只输出一行,我想你想添加一个“。”在每个参数传递给脚本之后而不是在所有参数之后。