Доступ к возвращаемому значению сценария python из сценария bash

Нотация var=$(command)запускает commandи присваивает свой вывод var. Поскольку home/admin17/folder/data_log— это файл, а не команда, это должно привести к ошибке:

log=$(home/admin17/folder/data_log)
bash: home/admin17/folder/data_log: command not found

Если вы хотите сохранить имя файла как переменную, вам нужно:

log=home/admin17/folder/data_log

Затем все остальное должно работать так, как вы ожидаете.:

log=home/admin17/folder/data_log
read -p "Number of log entries" num
cat $log | tail -n $num

Или, избегая бесполезного использования кота (UUoC):

log=home/admin17/folder/data_log
read -p "Number of log entries: " num
tail -n "$num" "$log"
1
04.03.2021, 20:03
1 ответ

У вас тут две проблемы. Во-первых, вы используете оболочку, которая не поддерживает массивы. Скорее всего shили dash. Я предполагаю, что хотя у вас есть строка bash shebang, вы вызываете свой скрипт с помощью sh script.sh, что означает, что он интерпретируется тем, что shнаходится в вашей системе. Например, на dash(, который по умолчанию shв Debian и Ubuntu ), вы получите:

$ out=$(echo 23.3 43.6 )
$ echo ${out[0]}
dash: 2: Bad substitution

Однако в bash вы получите:

$ out=$(echo 23.3 43.6 )
$ echo ${out[0]}
23.3 43.6

Следующая проблема заключается в том, что даже если вы запускаете это в bash, массивы работают иначе:

$ out=$(echo 23.3 43.6 )
$ echo ${out[0]}
23.3 43.6
$ echo ${out[1]}   ## prints nothing but a newline since the variable is empty

$

Чтобы получить массив в bash, нужно поместить элементы в круглые скобки:

$ out=( $(echo 23.3 43.6 ) )
$ echo ${out[0]}
23.3
$ echo ${out[1]}
43.6
3
18.03.2021, 22:27

Теги

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