Существует разница между предоставлением аргумента для программы и записью стандартного ввода программы, который вы делаете.
В первом случае программа считывает список аргументов в виде массива строк, который может быть интерпретирован программой. Во втором случае программа по существу считывает из специального файла и обрабатывает его содержимое. Все, что вы ставите после имени программы, являются аргументами. ps
ожидает много возможных аргументов, например -p
и PID процесса. В вашей команде вы не предоставляете PID в качестве аргумента, скорее пишите в stdin из ps
, который он игнорирует.
Но вы можете использовать xargs
, который считывает стандартный ввод и использует его в качестве аргументов команды:
ps -ef | cut -d " " -f 6 | sort | tail -n1 | xargs ps -p
Это то, что xargs
делает (от man
):
xargs - build and execute command lines from standard input
Или вы может использовать замена команды, as janos показывает. В этом случае оболочка вычисляет выражение внутри $()
как команду и вместо этого выводит свой вывод. Итак, после того, как произойдет расширение, ваша команда выглядит как ps -p 12345
.
man bash
:
Command Substitution
Command substitution allows the output of a command to replace the com‐
mand name. There are two forms:
$(command)
or
`command`
Bash performs the expansion by executing command and replacing the com‐
mand substitution with the standard output of the command, with any
trailing newlines deleted. Embedded newlines are not deleted, but they
may be removed during word splitting. The command substitution $(cat
file) can be replaced by the equivalent but faster $(< file).
Можете ли вы расширить о обеих системах, а также о подстановки команд? – user2559696
@ user2559696 Там вы идете, я попытался добавить немного больше деталей. –
Альтернативно, если ваша команда ps поддерживает опцию -o, вы можете указать, какой столбец будет печататься. Например, «ps -eo pid» будет печатать PID, «ps -eo pid, ppid» будет печатать как PID, так и PPID. С помощью этой опции вам не нужно будет вырезать вывод ps. Еще одно замечание. Ваш скрипт начнется с высокого PID и процессов, которые он запускает.Ваш вывод может захватить эти PID вместо фактического процесса, который вы хотите захватить. – alvits