2015-12-21 2 views
-1

Я довольно много смотрю на Google, stackexchange, stackoverflow и т. Д. До сих пор ни один из примеров не удовлетворял довольно простому варианту использования символа звездочки (а не подстановки) в сценарии bash.Как передать звездочку (*) команде внутри сценария Bash?

Следующие примеры команд работают точно так же, как необходимо в (интерактивном) окне терминала. Обе команды дают одинаковые результаты.

find /home/will/ref/ -path "*Java Develop*.pdf" 
    # 
    target="Java Develop" 
    find /home/will/ref/ -path "*$target*.pdf" 

вопрос, и цель, как успешно поместить эту команду в сценарий с find цели

  • "Java Разработка"

передается в качестве аргумента? Для сценария, названного, get-ref следующим образом. не

get-ref "Java Develop"` 

Ни один из следующих методов (не исчерпывающий) перечень попыток:

  1. find /home/will/ref/ -path \"\*$target\*.pdf\"
  2. find /home/will/ref/ -path \"*$target*.pdf\"
  3. find /home/will/ref/ -path "*$target*.pdf"

Плюс несколько вариаций вокруг этих примеров, включая сдачи -path argume nt string в переменной - все до сих пор удается сплит цель, используя пробел, или принять аргумент и ничего не возвращать. При использовании в командной строке возвращается около 3 x файлов.

Чтобы быть ясным, я не занимаюсь пространством внутри $target, потому что эта сторона работает нормально. В конечном итоге $target будет параметром сценария в любом случае.

- обновление 2015-12-22 -

Похоже, что версия Bash имеет важное значение. Эта версия:

$ bash -version 
    GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) 
    Copyright (C) 2013 Free Software Foundation, Inc. 
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 

Друг побежал более или менее теми же вариантами, что и выше, и они работают. Когда я запускал свой скрипт на своем ПК, тот же результат, без вывода.

Чтобы ответить на следующие вопросы:

  • Все выходит из строя либо не «найти» что-то; или давая ошибку о строке «Devel» из-за неверных балансовых котировок, которые мы предполагаем.
  • Я использовал set -x, и результаты нашли ответ, который работает над этим bash (см. Опубликованный ответ).

Я просто отправлю свою версию в качестве ответа; возможно, у кого-то будет лучший способ или, по крайней мере, объяснение, позволяющее Bash с крючка.

Опасность состоит в том, что звездочки (*) как-то не видны или обработаны, как ожидалось, когда одна и та же команда используется внутри сценария Bash.

+1

Как № 3 не подходит для вас? С информацией, которую вы предоставили, я считаю, что она должна работать. – tripleee

+0

Я бы ожидал, что 3 тоже будет работать. Что относительно '-path '* $ {target} *. Pdf" '? – Stphane

+1

Просьба представить фактическую реализацию 'get-ref'. (Скорее всего, вы используете '$ 1' вместо' '$ 1' '.) – rici

ответ

0

С небольшой помощью мы нашли рабочую версию для этого скрипта. Это довольно коротко, поэтому я опубликую его здесь и приведу пример.

Первый сценарий, получить-исх:

#!/bin/bash 
    # 
    # file:  get-ref 
    # usage:  get-ref <pattern> 
    # 
    #  <pattern> ...... target pattern to find 
    # _____________________________________ 
    # 
    target=$1 
    searchPath="$HOME/ref/" 
    # 
    # _____________________________________ 
    # 
    # 
    find $searchPath -path "*$target*.pdf" 
    # 
    echo " -------------------------------" 
    echo 
    exit 

(отладочный код опущен). Этот скрипт выглядит как шаблон №3 из вопроса. Это может означать, что у меня был ответ один раз, но он не работал по какой-либо другой причине (Ненавижу, когда это произойдет).

Этого метод работал с моим другом Bhodi дистрибутивом хотя < пожимают плечами> его set -x не показал сингл кавычки (') ниже. Однако ...

Путь -path обрабатывается было обнаружено, когда мы использовали, set -x который показал находку команда выглядит как это Bash:

  • + find /home/william/_ref/ -path'"*Java Dev*.pdf"'

Кажется, что скрипт (а не командный терминал) вводит одиночные кавычки (') вокруг аргумента -path. Это был недостающий фактор.

Выход:

$ get-ref "Java Dev" 
    + find /home/william/_ref/ -path '*Java Dev*.pdf' 
    /home/will/ref/technique/games/The Well-Grounded Java Developer.pdf 
    /home/will/ref/technique/bi/JasperReports 3.5 for Java Developers.pdf 
    /home/will/ref/lang/ada/Ada for the Cpp or Java Developer.pdf 

Finale ...

Я рад, что я могу (сейчас) найти документ или электронную книгу Я хочу, когда мне нужно. Спасибо за комментарии, которые они определенно отслеживали.

 Смежные вопросы

  • Нет связанных вопросов^_^