2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 bash
Сообщение27.01.2010, 16:33 


30/04/09
35
Написать программу, осуществляющую выполнение команды ОС 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' для получения более подробного описания.

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

 Профиль  
                  
 
 Re: bash
Сообщение27.01.2010, 21:21 


04/02/08
325
Буково
Вы хоть сами вдумайтесь в то, что написали? Ошибка на ошибке. Вот так более-менее работает, хотя, честно говоря. странное задание...
Код:
#!/bin/bash
p=0
prer()
{  #функция обработки прерываний
   let p++ # счетчик прерываний
   echo "Поступило прерывание"
   if [ $p -gt 4 ]; then # если поступило  4 прерывания - убиваем
   echo "goodby"
   exit 0
   fi
   if [ $p -gt 2 ]; then # если поступило более 2 прерываний
   echo "Поступило два и более прерывания"
   echo -n "Длина файла $(wc -l $n | awk '{print $1}')"
   fi
}
while true
trap 'prer $n' 2 # обработчик прерываний prer на сигнал SIGINT
do
k=""
while [ -z "$k" ] # пока не существует переменной k
do
echo "Ключ"
read k
done
n=""
while [ -z "$n" ] # пока не существует переменной n
do
echo "Введите имя файла?"
read n
done
sleep 1
k="$k $n" # конкатенация строк
echo $k | (read fr; ls $fr) # передача через конвейер и выполнение команды ls
done

 Профиль  
                  
 
 Re: bash
Сообщение28.01.2010, 00:35 


30/04/09
35
спасибо

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group