Есть несколько вещей, которые вы можете сделать, чтобы получить переменную для Python.Вы можете передать его в качестве аргументов или вы также можете прочитать Python в этой строке через sys.stdin.
Передать строку в качестве аргументов Python:
$ bar=$(tail -1 numbers.txt )
$ echo $bar
6.3 70.5 10 20.5 10 20 10 30
$ python -c "import sys; print sys.argv" $bar
['-c', '6.3', '70.5', '10', '20.5', '10', '20', '10', '30']
Передать строку через stdin:
$ echo "$bar" | python -c "import sys; print sys.argv; print sys.stdin.read()"
['-c']
6.3 70.5 10 20.5 10 20 10 30
Обратите внимание, что эти значения являются строками, и вам необходимо преобразовать их в float (), прежде чем выполнять какие-либо математические операции с ними.Также со вторым вариантом вам придется разделить строку и затем преобразовать их в число с плавающей точкой.
Для дополнительного удовольствия от маршрута stdin, посмотрите на: https://docs.python.org/3.7/library/fileinput.html
IЯ бы порекомендовал вам написать скрипт на python вместо использования python -c
, так как он может быть довольно быстрым.Назовите скрипт: process_numbers.py со следующим содержимым:
#!/usr/bin/env python
import sys
# quick list comprehension to convert args to floats
numbers = [float(i) for i in sys.argv[1:]]
print numbers
print numbers[0]*10 + 2
Затем в вашем скрипте bash:
python process_numbers.py $(tail -1 numbers.txt)
[6.3, 70.5, 10.0, 20.5, 10.0, 20.0, 10.0, 30.0]
65.0