2

エディターを開くための簡単な関数があります。

open_an_editor()
{{
    nano「$1」
}

のように呼び出された場合open_an_editor file.ext、それは機能します。しかし、関数から出力を取得する必要がある場合— smth=$(open_an_editor file.ext)—エディターが表示されないため、スクリプトがスタックします。ここで何が欠けていますか?

更新:スクリプト引数で値が指定されていない場合に、ユーザーにエディターで値を書き込むように要求する関数を作成しようとしています。

#!/ bin / bash
open_an_editor()
{{
    if ["$ 1"]
    それから
        エコー「$1」
        0を返す
    fi
    tmpf = $(mktemp -t pref)
    echo"デフォルト値。編集してください">"$tmpf"

    #そしてここにエディターが表示されます、
    #ユーザーが値を編集して保存できるようにする

    #これはエディターを表示せずにスタックします:
    #nano "$ tmpf"

    #しかし、これは、Kimvaisの助けを借りて、完全に機能します。
    nano "$ tmpf" 3>&1 1>&2 2>&3

    猫「$tmpf」
    rm "$ tmpf"
}

something = $(open_an_editor "$ 1")
#そして私はその値で何か役に立つことができます、
#たとえば、その中の文字を数える
echo -n "$ something" | wc -c

したがって、スクリプトが引数を指定して呼び出された場合./script.sh "A value"、関数はそれを使用し、すぐに7バイトをエコーし​​ます。しかし、引数なしで呼び出された場合./script.sh—nanoがポップアップするはずです。

4

3 に答える 3

2

必要な入力が編集されたファイルである場合は、明らかにcat filenameopen_an_editor filename

エディターの出力が実際に必要な場合は、stderrとstdinを交換する必要があります。 nano "$1" 3>&1 1>&2 2>&3

「フレンドリーな」ユーザー入力が必要な場合は、ホイップテールの使用方法に関するこの質問を参照してください

于 2010-03-02T06:08:54.500 に答える
0

関数から出力を取得して変数に格納する必要がある場合は、ファイルの内容を表示するだけです。

open_an_editor()
{
    cat "$1"
}
smth=$(open_an_editor file.txt)
于 2010-03-02T06:04:47.910 に答える
0

ユーザーが値を入力するreadだけの場合は、次のようにします。

OLDIFS="$IFS"
IFS=$'\n'
read -p "Enter a value: " -e somevar
IFS="$OLDIFS"
echo "$somevar"
于 2010-03-02T10:04:20.233 に答える