У вас есть два скрипта, один выдает две строки и два числа. Вам решать, как разобрать это во втором скрипте как две строки и два числа.
Поскольку оба скрипта находятся под вашим контролем, вы можете пересылать данные из одного скрипта в другой любым способом, который позволяет второму скрипту читать данные.
Вы сами определяете формат, порядок и интерпретацию данных, которые вы передаете между двумя сценариями. Вы даже можете отправлять данные в двоичном коде, если это имеет для вас смысл.
Не существует типов данных, которые можно применить к данным, кроме тех, которые вы создаете сами, выбирая конкретный «контракт» или «протокол» между вашими двумя сценариями или программами.
Некоторые стандартные инструменты Unix, такие как sort
и cut
, предполагают ввод данных в определенном формате, но их можно заставить изменить интерпретацию входных данных с помощью параметров командной строки.
Надуманный пример:
#!/bin/sh
echo 'first string'
echo 'second string'
echo '1.1'
echo '3.14'
Затем второй скрипт читает это:
#!/bin/sh
IFS= read -r string1
IFS= read -r string2
read number1 number2
Или с помощью JSON:
#!/bin/sh
echo '{ "string1": "hello", "string2": "world", "numbers": [1.1,3.14] }'
Второй сценарий:
#!/bin/sh
jq -r '"A number: \(.numbers[])"'
С расширенными глобусами (shopt extglob
, установленными в Bash ), !(a).py
должны соответствовать всем именам файлов, оканчивающимся на .py
, кромеa.py
:
$ shopt -s extglob
$ ls
a.py bar.py foo.py foo.txt
$ echo !(a).py
bar.py foo.py
Но вы также можете просто исключить этот файл вручную с помощью теста, для этого не потребуются никакие специфические функции Bash -:
for f in./*.py; do
[ "$f" = a.py ] && continue
python "$f"
done