Взаимодействующие программы stdin и stdout (создание программы робота для игры)

Вы можете получить использование каталога / без «%» с помощью awk. По сути, awkв следующей команде:

  • Выбирает последнюю строку вывода с учетом заголовка df -END;
  • удаляет "%";
  • выводит пятое поле (print $5 ).

    df -h / | awk '  END { gsub("%",""); print $5 } '
    

Запуск:

$ df -h / | awk '  END { gsub("%",""); print $5 } '
4

Или чтобы получить все номера:

$ df -h / | awk '  END { gsub("%",""); gsub("G",""); print $2" "$3" "$4" "$5 } '
234 7,6 214 4
0
23.01.2020, 12:03
1 ответ

Это можно сделать с помощью каналов и FIFO.

Например, вот мой тестовый скриптblackbox.sh:

#!/bin/bash

# Here i output the value to be added.
echo "10 30"

# Here i read the result and depending on it, write good or not good in a file
read result
if [ "${result}" -eq 40 ]; then
    echo good > result.txt
else
    echo not good > result.txt
fi

Запуск вручную:

$./blackbox.sh 
10 30 <~~~~ Script output
40 <~~~~~~~ My input
$ cat result.txt 
good
$ 

Теперь я создаю FIFO с mkfifo coinи снова запускаю следующую строку:

$ rm result.txt && cat coin |./blackbox.sh | ( read a b ; echo $((a+b)) > coin )
$ cat result.txt 
good

Обратите внимание, что:

  • Любая запись в FIFO блокируется до тех пор, пока он не открыт для чтения.
  • Конвейер вывода blackbox.shво что-то, очевидно, сделает его невидимым для вас.
  • Я добровольно выбрал простой пример, в котором вывод blackbox.sh легко разобрать... Я позволю вам адаптировать его к вашим потребностям.
  • $(( ))разрешить арифметику в Bash.
0
28.01.2020, 02:54

Теги

Похожие вопросы