2017-05-01 7 views
0

Salut, je suis nouveau avec Bash et j'ai un problème avec la lecture d'entrée avec des espaces. J'utilise zenity, voici mon code:Bash Zenity Spaces Forms - Entrée de lecture

RESULT=$(zenity --forms --title="Title"\ 
    --text="Text"\ 
    --add-entry="File Name"\ 
    --add-entry="Directory") 


    NAME=$(echo $RESULT| cut -d '|' -f 1) 
    DIRECTORY=$(echo $RESULT| cut -d '|' -f 2) 

    if [ $DIRECTORY ]; then 
     COMMAND="$COMMAND $DIRECTORY " 
    fi 

    if [ $NAME ]; then 
     COMMAND="$COMMAND -name $NAME " 
    fi 

    find $COMMAND 

Quand je suis en train de rechercher le fichier dans le dossier - « Nom de l'espace » cela ne fonctionne pas, parce que le signe de l'espace, même avec le nom.

Si vous savez comment je peux le faire avec des espaces, s'il vous plaît aider. Merci à tous!

Répondre

0

Ceci est votre code, fixe pour certains problèmes (il fonctionne maintenant):

#!/bin/bash 

result="$(zenity --forms --title="Title"\ 
    --text="Text"\ 
    --add-entry="File Name"\ 
    --add-entry="Directory")" 


    name="$(echo "$result"| cut -d '|' -f 1)" 
    directory="$(echo "$result"| cut -d '|' -f 2)" 

    if [ "$directory" ]; then 
     command="$directory" 
    fi 

    if [ "$name" ]; then 
     command="$command$name" 
    fi 

    find "$command" 

Quelques commentaires:

1) Il est très conseillé d'utiliser des guillemets doubles lorsque vous attribuez une valeur à une variable ou lorsque vous développez une variable. Cela exclut word splitting. Voir this.

2) Évitez d'utiliser des variables dans UPPERCASE - le shell Bash utilise des variables dans UPPERCASE et vous devriez éviter de le faire pour éviter une collision de noms.

3) Une partie de votre concaténation variable a eu quelques erreurs, j'ai corrigé ces erreurs.

Remarque: votre utilisateur doit entrer le nom du répertoire, y compris les barres obliques, telles que /folder/ ou / (pour le répertoire racine).

J'espère que cela aide!

+0

J'ai une autre question. comment la commande devrait ressembler quand je veux trouver tous les fichiers par type exemple mp3? Cela ne fonctionne pas find: '/ home/mint/- Disc 1/*. Mp3' – Eken

+0

Vous devriez regarder dans l'option 'iname' pour' find' (ex: find -iname * .mp3). voir: https://linux.die.net/man/1/find. Chaque fois que vous êtes bloqué sur quelque chose, un bon point de départ est de chercher la page man de la commande, dans ce cas vous pouvez chercher "find man linux". Bonne chance! –