2

我有一个简单的功能来打开编辑器:

open_an_editor()
{
    纳米“1美元”
}

如果调用 like open_an_editor file.ext,它可以工作。但是如果我需要从函数中获取一些输出smth=$(open_an_editor file.ext)——我看不到编辑器,脚本就卡住了。我在这里想念什么?

更新:我正在尝试编写一个函数,如果脚本参数中没有给出它,它会要求用户在编辑器中写入一个值。

#!/bin/bash
open_an_editor()
{
    如果 [ "$1" ]
    然后
        回声“$ 1”
        返回 0
    菲
    tmpf=$(mktemp -t 首选项)
    echo "默认值,请编辑" > "$tmpf"

    # 这里应该出现编辑器,
    # 允许用户编辑值并保存

    # 这将在不显示编辑器的情况下卡住:
    #nano "$tmpf"

    # 但是,在 Kimvais 的帮助下,它可以完美运行:
    纳米“$tmpf” 3>&1 1>&2 2>&3

    猫“$tmpf”
    rm "$tmpf"
}

某事=$(open_an_editor "$1")
# 然后我可以用这个值做一些有用的事情,
# 例如计算其中的字符数
回声 -n "$something" | 厕所-c

因此,如果使用参数调用脚本./script.sh "A value",该函数将使用该参数并立即回显 7 个字节。但是如果不带参数调用./script.sh—— nano 应该会弹出。

4

3 回答 3

2

如果您需要的输入是编辑后的文件,那么您显然需要cat filename在完成open_an_editor filename

如果您确实需要编辑器的输出,则需要交换 stderr 和 stdin 即: nano "$1" 3>&1 1>&2 2>&3

如果您需要“友好”的用户输入,请参阅this question on how to usewhiptail

于 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 回答