Question

J'ai une fonction simple à ouvrir un éditeur:

open_an_editor()
{
    nano "$1"
}

Si elle est appelée comme open_an_editor file.ext, cela fonctionne. Mais si je dois obtenir une sortie de la fonction - smth=$(open_an_editor file.ext) - Je ne vois pas l'éditeur, le script seulement stucks. Que suis-je manque ici?

Mise à jour:. Je suis en train d'écrire une fonction qui demande à l'utilisateur d'écrire une valeur dans l'éditeur, si elle n'a pas été donné dans les arguments de script

#!/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

Alors, si le script a été appelé avec un ./script.sh "A value" argument, la fonction serait tout simplement l'utiliser et l'écho immédiatement 7 octets. Mais si elle est appelée sans arguments ./script.sh -. Nano devrait apparaître

Était-ce utile?

La solution

Si l'entrée dont vous avez besoin est le fichier modifié, vous devez évidemment cat filename après que vous faites le open_an_editor filename

Si vous avez besoin en fait la sortie de l'éditeur, alors vous devez échanger stderr et stdin i.e.: nano "$1" 3>&1 1>&2 2>&3

Si yo besoin entrée utilisateur 'friendly', voir cette question sur la façon d'utiliser whiptail

Autres conseils

si vous avez besoin pour obtenir une sortie de la fonction et stocker dans la variable, vous affichez tout ce qui est dans le fichier.

open_an_editor()
{
    cat "$1"
}
smth=$(open_an_editor file.txt)

Si tout ce que vous voulez est un utilisateur d'entrer une valeur alors read suffit:

OLDIFS="$IFS"
IFS=$'\n'
read -p "Enter a value: " -e somevar
IFS="$OLDIFS"
echo "$somevar"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top