The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Подстановка переменных"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Подстановка переменных"  +/
Сообщение от SLario (ok) on 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' как отдельные файлы и ничего не находит. У меня есть чувство, что дело в кавычках. Какие кавычки надо ставить, чтобы в строку команды подставились значения переменных, а не результат их выполнения?

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

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Подстановка переменных"  +/
Сообщение от SLario (ok) on 27-Авг-09, 15:18 
Хм, а если поставить маску
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
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Подстановка переменных"  +/
Сообщение от phpcoder email(??) on 27-Авг-09, 15:25 
>Хм, а если поставить маску
>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

Советую использовать find.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Подстановка переменных"  +/
Сообщение от SLario (ok) on 27-Авг-09, 15:34 
Спасибо, но я хотел бы обойтись без find. Правильно сформированная строка работает так, как мне нужно, так что мне осталось только корректно подставить значения переменных в строку и запустить её! Похоже, что ls берёт не целиком сформированную строку "$SrcPath"/"$FileMask", а только до первого пробела, и использует значения, перечисленные в FileMask, как список входных директорий для команды. Я пробовал экранировать пробелы, указав в константе FileMask="*.xml\ |\ grep\ -v\ 'Default'", но это не помогло. Есть ли способ сначала сформировать текстовую строку полностью, а затем отправить её на выполнение всю целиком, без разделения?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Подстановка переменных"  +/
Сообщение от angra (ok) on 28-Авг-09, 09:21 
Ваша проблема в том, что вы не понимаете элементарного - пайпу(|) в командах обрабатывает шелл, а не ls. Решить изначальную задачу можно по разному, например так:
eval "ls -1 $SrcPath/$FileMask | sed s- $SrcPath/-- > $FileListFN"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Подстановка переменных"  +/
Сообщение от SLario (ok) on 28-Авг-09, 10:20 
angra, спасибо за решение! Возможно, я действительно пока не врубился в концепцию. У меня всё заработало, именно такого результата я и хотел добиться!
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




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

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