エディターを開くための簡単な関数があります。
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がポップアップするはずです。