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