Как извлечь поле из результата команды в разных версиях linux? - PullRequest
0 голосов
/ 22 января 2020

Я пытался извлечь размер процесса с помощью команды:

size=`ps -eo vsz,pid | grep $pid | cut -'d' -f1`

Однако это работало только на некоторых компьютерах, но не на всех. Поэтому на тех, где он не работал, я попытался:

size=`ps -eo vsz,pid | grep $pid | awk '{print $1}'`

, однако, теперь это не сработало на компьютерах, где работала первая команда.

То, что я подразумеваю под "работающим" и "не работающим", это то, что иногда:

echo "|$size|"

будет возвращать что-то вроде:

|8762348

9835|

И, таким образом, следующее возвращает арифметическая ошибка c:

(( $size > $threshold ))

из-за символов перевода строки или возврата каретки, хранящихся в $ size. Есть ли способ надежного извлечения просто первого поля в разных версиях linux?

1 Ответ

0 голосов
/ 25 января 2020

Сначала вы просите ps отобразить информацию обо всех процессах, затем вы пытаетесь выбрать 1 из них.

У вашей команды были проблемы на some computers, и вы пометили вопрос обоими ksh и linux, поэтому я не уверен, какую команду лучше всего использовать в вашем случае:

size=$(ps -q ${pid} -o vsz --no-headers)
# or
size=$(ps -p ${pid} -o vsz | grep -v "VSZ")
...