Обозначьте процесс и выполните что-то с помощью одной команды

Вероятно, было бы проще сделать только со сценарием, но мне интересно, почему я не могу сделать это с помощью одной команды. То, что я пробовал до сих пор:

$ (ls >/dev/null &) && echo $! 3135 $ (ls >/dev/null &) ; echo $! #bad idea, but if that worked, I could just add `sleep 0.1` 3135 $ ls >/dev/null & ; echo $! bash: syntax error near unexpected token `;' $ `ls >/dev/null &` && echo $! 3135 $ `ls >/dev/null &` ; echo $! 3135 

Число 3135 – это PID последнего фонового процесса, который содержит переменную $! , и он остается неизменным (также я использую Konsole и для успешного завершения процесса, он печатает что-то вроде [1] PID ) . Увы, ни одна из выполненных команд не отправляет процесс на задний план.

  • Приложение в терминале все еще работает, но не доступно напрямую
  • Выполняется скрипт Python во время блокировки экрана
  • Как измерить время нескольких команд в фоновом режиме?
  • Запуск сценария bash bash в фоновом режиме
  • не может убить процесс gedit из своего PID
  • Как создать контейнер systemd-nspawn?
  • Получить PID функции, выполняемой в фоновом режиме
  • Выполните две команды параллельно, но только дождитесь завершения одной команды, прежде чем запускать следующую
  • One Solution collect form web for “Обозначьте процесс и выполните что-то с помощью одной команды”

    Это должно делать то, что вы хотите:

     $ ls > /dev/null & echo $! 

    Поскольку вы форсировали фоновую команду в подпроцесс различными способами, первая оболочка не имела никакого фонового процесса и, следовательно, $! не обновлялся.

    Теперь фоновый процесс запускается той же оболочкой, что и для выполнения echo $! так что теперь он делает то, что вы хотите.

    Linux и Unix - лучшая ОС в мире.