Bash Zenity Spaces Forms — Чтение ввода

Привет, я новичок в Bash, и у меня проблема с чтением ввода с пробелами. Я использую zenity, это мой код:

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

Когда я пытаюсь найти файл в папке - «Пространство имен», это не работает, потому что знак пробела совпадает с именем.

Если вы знаете, как я могу сделать это с пробелами, пожалуйста, помогите. Спасибо вам всем!


person Eken    schedule 01.05.2017    source источник


Ответы (1)


Это ваш код, исправленный для некоторых проблем (теперь он работает):

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

Некоторые комментарии:

1) Очень желательно использовать двойные кавычки, когда вы присваиваете значение переменной или расширяете переменную. Это исключает word splitting. См. это.

2) Избегайте использования переменных в ВЕРХНЕМ РЕГИСТРЕ - оболочка Bash использует переменные в ВЕРХНЕМ РЕГИСТРЕ, и вам следует избегать этого, чтобы избежать конфликта имен.

3) В некоторых ваших конкатенациях переменных были ошибки, я их исправил.

Примечание: ваш пользователь должен ввести имя каталога, включая косую черту, например /folder/ или / (для корневого каталога).

Надеюсь, это поможет!

person Jamil Said    schedule 01.05.2017
comment
У меня есть еще один вопрос. как должна выглядеть команда, когда я хочу найти все файлы по типу, например mp3? Не работает найти: ‘/home/mint/- Disc 1/*.mp3’ - person Eken; 03.05.2017
comment
Вам следует изучить параметр iname для find (например: find -iname *.mp3). см.: linux.die.net/man/1/find. Всякий раз, когда вы застряли на чем-то, хорошей отправной точкой будет поиск справочной страницы команды, в этом случае вы можете выполнить поиск по запросу find man linux. Удачи! - person Jamil Said; 03.05.2017