У меня есть простая функция, чтобы открыть редактор:Как открыть редактор из функции bash?
open_an_editor() { nano "$1" }
Если названный как open_an_editor file.ext
, это работает. Но если мне нужно получить какой-то результат от функции - smth=$(open_an_editor file.ext)
- я не вижу редактор, скрипт просто stucks. Что мне здесь не хватает?
Обновление: Я пытаюсь написать функцию, которая попросит пользователя написать значение в редакторе, если оно не было дано в аргументах сценария.
#!/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.
Какой именно результат вы ожидаете от редактора? –
что вы пытаетесь сделать? сделайте это более ясным – ghostdog74
Я думаю, что вы имели в виду значение A \. Вы можете использовать 'tr', чтобы избежать пробелов, прежде чем передавать его в ваш редактор по выбору. Это не редактор, его VFS и основная файловая система. Пространства так же приемлемы, как и пробелы, когда дело доходит до имен файлов, но их нужно избегать. tr '' '\' может быть началом. –