我有一个简单的功能来打开编辑器:
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。
答案 0 :(得分:2)
如果您需要的输入是已修改的文件,那么在您执行cat filename
open_an_editor filename
如果你确实需要编辑器的输出,那么你需要交换stderr和stdin,即:
nano "$1" 3>&1 1>&2 2>&3
如果您需要“友好”的用户输入,请参阅this question了解如何使用whiptail
答案 1 :(得分:0)
如果您需要从函数输出并存储在变量中,您只需显示文件中的内容。
open_an_editor()
{
cat "$1"
}
smth=$(open_an_editor file.txt)
答案 2 :(得分:0)
如果你想要的只是让用户输入一个值,那么read
就足够了:
OLDIFS="$IFS"
IFS=$'\n'
read -p "Enter a value: " -e somevar
IFS="$OLDIFS"
echo "$somevar"