如何执行命令对话框并将其结果用于另一个函数?重点原因?输出原因?

时间:2017-04-19 22:10:12

标签: bash dialog sh

如何在函数中执行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 $ *`执行它,但没有成功

1 个答案:

答案 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 "$*"只输出一行,我想你想添加一个“。”在每个参数传递给脚本之后而不是在所有参数之后。