Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

bash

37K
27 января 2010 года
gepa
16 / / 22.12.2008
Написать программу, осуществляющую выполнение команды ОС UNIX ls таким образом, чтобы данные на стандартный ввод команды ls (ключи, имена файлов) в параллельном процессе потомке поступали из стандартного вывода основного процесса (где они вводились бы по запросу) через межпроцессный канал. Предусмотреть в программе возможность неоднократного прерывания от клавиатуры. При поступлении трех сигналов прерывания дополнительно вывести количество строк для каждого файла, указанного в аргументах. В остальных случаях просто продолжать выполнение программы.

Код:
while [ 1 ]
do

k=" "
n=" "
p=0;

trap 'prer' 2 // обработчик прерываний prer на сигнал SIGINT
prer()
{  //функция обработки прерываний
    let p++ // счетчик прерываний
    echo "prerivanie"
}

while [ -z $k ] // пока не существует переменной k
do
echo "Key=?"
read k
done

while [ -z $n ] // пока не существует переменной n
do
echo "ima faila?"
read n
done

trap 'prer1' 2  // установка второго обработчика прерываний
prer1()
{
    let p++
    echo "bolee 2-h prerivaniy"
    if [ $p -gt 2 ]; then // если поступило более 2 прерываний
    echo "dlina '$n wc-l '"
    fi
}
sleep 1

k=$k''$n // конкотинация строк
echo $k | (read fr; ls $fr) // передача через конвейер в саб-shell и выполнение команды ls
done


done


проблема в том, что когда я задаю имя файла например 111.txt то вылезает ошибка
Цитата:
ls: неверный ключ -- «.»
Попробуйте `ls --help' для получения более подробного описания.


если вводить имя файла без точки, то просто выводится список всех файлов

51K
27 января 2010 года
Indian
37 / / 23.12.2009
Цитата:
k=$k[COLOR="Blue"]''[/COLOR]$n


Надо вставить тут пробел.

37K
27 января 2010 года
gepa
16 / / 22.12.2008
Цитата: Indian
Надо вставить тут пробел.



спасибо, заработало, только появилась другая проблема длина не выводится(

51K
27 января 2010 года
Indian
37 / / 23.12.2009
Цитата:
echo "dlina '$n wc-l '"


echo "dlina `wc -l $n`"

37K
27 января 2010 года
gepa
16 / / 22.12.2008
Цитата: Indian
echo "dlina `wc -l $n`"



уже пробовал, не помогло..

51K
27 января 2010 года
Indian
37 / / 23.12.2009
Слегка переделал.
Код:
while [ 1 ]
do

k=" "
n=" "
p=0

trap 'prer' 2
prer()
{  
    let p++
    echo "prerivanie"
}

while [ -z $k ]
do
echo "Key=?"
read k
done

while [ -z $n ]
do
echo "ima faila?"
read n
done



k=$k' '$n
echo $k | (read fr; ls $fr)
#-------------------Вывели размер файла---------------------
#-----------------Далее: ждем 3 прерывания--------------------
p=0 #считаем по-новой, от 0 до 3
trap 'prer1' 2  
prer1()
{
    let p++
   
    if [ $p -gt 2 ]; then
    echo
    echo "bolee 2-h prerivaniy"
    echo "dlina `wc -l $n`"
    fi
}
   
read  #Ctrl-C отменяет sleep, а read на него не реагирует.
#Вообщем, три раза Ctrl-C и выводится длина.
done

Теперь надо доделать ввод/вывод на несколько файлов.
37K
27 января 2010 года
gepa
16 / / 22.12.2008
заработало, спасибо)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог