1

Задачка такова: вывод команды - список файлов, вперемешку текстовых и бинарников, нужно вывести первый не-бинарный файл [и передать его cat, но это к делу не относится].
Не охота городить никаких циклов, можно ли сделать это проще, в одном конвейере?

(Для проверки типа файла мне вполне достаточно вывода file).

Leap 42.3 Calculate Linux, Xfce, Emacs, ..

2 (15.06.2017 21:41:20 отредактировано 1000Mhz)

Туплю я чот нынче  bu
ОТВЕТ таков: написать функцию, которая делает нужные вам проверки, и засунуть ее в конвейер, все!

Leap 42.3 Calculate Linux, Xfce, Emacs, ..

3

1000Mhz пишет:

Туплю я чот нынче  bu
ОТВЕТ таков: написать функцию, которая делает нужные вам проверки, и засунуть ее в конвейер, все!

Всё же без циклов в функции это решить нереально.

 Консоль:

#!/bin/bash

func()
{
     a=0
     while read n; do
     arr[$a]=$n
     let a+=1
     done
     
     b=1
     for ((i=1;i<=$a;i++)); do
        if file ${arr[$i]}|grep text >/dev/null
        then
          tmp=${arr[$i]}
          arr[$i]=${arr[1]}
          arr[1]=$tmp #поменяли местами
          break
        fi
     done
     
     for ((i=1;i<$a;i++)); do
     echo ${arr[$i]}
     done
}

ls|func
ls /bin|func


Но зато я сделал то что работает, можете проверять. Надеюсь правильно