The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Подстановка переменных, !*! SLario, 27-Авг-09, 13:17  [смотреть все]
Уважаемые коллеги!
Я хочу получить список файлов по маске, написал такой скрипт:

#!/bin/bash

FileMask="*.xml | grep -v 'Default'"               # маска файла, формат такой же, как и в командной строке
SrcPath="/usr/ScriptSL/USSD/in"                    # папка-источник, в которой надо найти все файлы по маске
FileListFN="/usr/ScriptSL/USSD/XML_20090827.lst"   # название файла, в который надо вывести названия файлов

# Скрипт должен выводить все файлы, которые подходят по маске, в один столбец, вырезать из них имя папки-источника и класть в указанный файл
ls -1 "$SrcPath"/"$FileMask" | sed s-"$SrcPath"/-- > "$FileListFN"

Вот то, что получается, если сделать echo строки выше:

ls -1 /usr/ScriptSL/USSD/in/*.xml | grep -v 'Default' | sed s-/usr/ScriptSL/USSD/in/-- > /usr/ScriptSL/USSD/XML_20090827.lst

Это как раз то, что мне нужно, такая строка работает в shell, если её скопипэйстить. Однако, при попытке запуска shell вываливает мне то полный список файлов, подходящих к маске, потом пристыковывает к нему кусок скрипта после первого "|" (ничего не работает), то пытается искать grep, -v, 'Default' как отдельные файлы и ничего не находит. У меня есть чувство, что дело в кавычках. Какие кавычки надо ставить, чтобы в строку команды подставились значения переменных, а не результат их выполнения?

Заранее большое спасибо!

  • Подстановка переменных, !*! SLario, 15:18 , 27-Авг-09 (1)
    Хм, а если поставить маску
    FileMask="*.xml"
    , то скрипт работает. С полной маской (исключающей все файлы, название которых включает слово Default) я получаю такой вывод:
    |: No such file or directory
    grep: No such file or directory
    -v: No such file or directory
    'Default': No such file or directory
    • Подстановка переменных, !*! phpcoder, 15:25 , 27-Авг-09 (2)
      • Подстановка переменных, !*! SLario, 15:34 , 27-Авг-09 (3)
        Спасибо, но я хотел бы обойтись без find. Правильно сформированная строка работает так, как мне нужно, так что мне осталось только корректно подставить значения переменных в строку и запустить её! Похоже, что ls берёт не целиком сформированную строку "$SrcPath"/"$FileMask", а только до первого пробела, и использует значения, перечисленные в FileMask, как список входных директорий для команды. Я пробовал экранировать пробелы, указав в константе FileMask="*.xml\ |\ grep\ -v\ 'Default'", но это не помогло. Есть ли способ сначала сформировать текстовую строку полностью, а затем отправить её на выполнение всю целиком, без разделения?



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру