2014 dxdy logo

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

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




 
 bash
Сообщение27.01.2010, 16:33 
Написать программу, осуществляющую выполнение команды ОС 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 
Вы хоть сами вдумайтесь в то, что написали? Ошибка на ошибке. Вот так более-менее работает, хотя, честно говоря. странное задание...
Код:
#!/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 
спасибо

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group