2017-04-19 1 views
0

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 

私はしかし、「」」に送信されますから、標準出力にある、あなたの関数「B」のすべてにおいてNO成功

+1

新しい画面を開いて終了するとダイアログが表示されないので、完了したらその画面のスペースが残ってしまいます。 'tput smcup'と' tput rmcup'を使うのと同じように動作することを確かめてください。 – 123

+0

良い点。なぜ新しいスクリーンを開いて閉じないのですか? – Cedric

答えて

1

と、$(a $*)または `$の*`でそれを実行しようとしていますsed "これは、 "dialog"と "cat"の両方が "sed"にリダイレクトされた標準出力を持っていることを意味します。それを動作させるためのトリックは、関数「B」から「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 $* 

:ここ

は、固定されたバージョンです。これを達成するために、私は "ダイアログ"の標準出力を同じ場所にリダイレクトしました。エラー出力はその時点で(これをエラー画面と呼びましょう)、エラー出力はファイルにリダイレクトされますが、標準出力がどこにあったかには影響しませんにリダイレクトされます(エラー画面)。

echo "$*"が1行だけ出力するので、reg-expをsedから変更しました。「。」を追加したいと思っていました。各引数がすべてスクリプトの後に渡された後にスクリプトに渡された後

+0

この品質のお返事ありがとうございます – Cedric

関連する問題