У меня есть простая функция для открытия редактора:
open_an_editor()
{
nano "$1"
}
Если вызывается как open_an_editor file.ext
, это работает. Но если мне нужно получить какой-то вывод из функции - smth=$(open_an_editor file.ext)
- я не могу увидеть редактор, скрипт просто завис. Что мне здесь не хватает?
Обновление: я пытаюсь написать функцию, которая попросила бы пользователя написать значение в редакторе, если оно не было задано в аргументах сценария.
#!/bin/bash
open_an_editor()
{
if [ "$1" ]
then
echo "$1"
return 0
fi
tmpf=$(mktemp -t pref)
echo "default value, please edit" > "$tmpf"
# and here the editor should show up,
# allowing user to edit the value and save it
# this will stuck without showing the editor:
#nano "$tmpf"
# but this, with the help of Kimvais, works perfectly:
nano "$tmpf" 3>&1 1>&2 2>&3
cat "$tmpf"
rm "$tmpf"
}
something=$(open_an_editor "$1")
# and then I can do something useful with that value,
# for example count chars in it
echo -n "$something" | wc -c
Итак, если скрипт вызывался с аргументом ./script.sh "A value"
, функция просто использовала бы это и немедленно выводила бы 7 байтов. Но если вызывается без аргументов ./script.sh
- должен появиться nano.