Где установлены команды `fg`,` bg` и `jobs`? [Дубликат]

Этот вопрос уже имеет ответ здесь: Почему бы не `` `` команда работать для `cd`? Я не могу найти исполняемый файл для `cd`! 4 ответа

fg, bg и jobs используются для управления заданиями. И по какой-то причине (возможно, это только я), я не могу найти, где находятся их двоичные файлы или их manpages (whereis не печатает никакой информации). which не выводит.

Я запускал команды вроде find /bin bg, но без хитов. Я также запустил find / bg, чтобы использовать широкую сеть.

1
задан 27 April 2015 в 02:30

4 ответа

Они встроены в оболочку - вы можете получить базовую информацию об использовании, набрав help fg или help jobs в командной строке bash или более подробную информацию из man-страницы bash.

6
ответ дан 23 May 2018 в 21:04

Добавляя к ответу heemayl, стоит отметить, что fg, bg и jobs должны быть встроены в оболочку, поскольку они управляют структурами данных в памяти оболочки и / или состоянием ядра, связанными с процесс оболочки. Невозможно написать внешнюю команду, которая делает то, что делает fg.

Другие команды, которые должны быть встроены, включают cd, eval, exec, exit, export, history, read, set, source (aka .), shift, trap, ulimit, umask и wait. У вашей оболочки может быть более длинный список, в зависимости от того, насколько расширенная функциональность реализована. POSIX имеет другой, но перекрывающий список «специальных встроенных утилит» - я не уверен, почему такие вещи, как break и continue, считаются командами, а не ключевыми словами контрольной структуры или почему POSIX должны быть рассматривать такие вещи, как umask, должны быть встроены, когда они не могут быть реализованы каким-либо другим способом. (Вы можете написать программу под названием /bin/umask, которая называется umask(2), но она изменит настройку только для себя, а не для последующих процессов, созданных оболочкой, поэтому она не будет соответствовать ее спецификации.)

4
ответ дан 23 May 2018 в 21:04
  • 1
    Я думаю, что вы в основном правы, @zwol, особенно если команде нужно управлять состоянием оболочки. Однако, если он управляет системным состоянием ядра, я думаю, что любой исполняемый файл с подходящими разрешениями должен быть в состоянии сделать это. Вероятно, поэтому sysctl не является встроенным, например. – Randall Cook 25 April 2015 в 00:21
  • 2
    @RandallCook Я не сказал общесистемного состояния ядра, я сказал состояние ядра, связанное с процессом оболочки, например, umask и ограничения ресурсов. (Я считаю, что текущие Unix-файлы позволяют вам изменять ограничения ресурсов для другого процесса, учитывая достаточные привилегии, но это не было возможно.) – zwol 25 April 2015 в 05:06

Это команды, встроенные в оболочку. Для них нет двоичных файлов, поскольку они являются частью Bash (или любой другой оболочки, которую вы используете).

Они задокументированы, например, на странице управления Bash (см. раздел «КОМАНДЫ ПО ОБЕСПЕЧЕНИЮ ШЕЛКОВ»)

2
ответ дан 23 May 2018 в 21:04

fg, bg и jobs не являются отдельными утилитами, но они являются частью bash (команды встроенных команд).

вы можете найти больше о них в руководстве bash, используя команда

man bash
2
ответ дан 23 May 2018 в 21:04
  • 1
    Вы можете пояснить, что с помощью инструкции "bash manual" вы имеете в виду запуск команды man bash. – IQAndreas 25 April 2015 в 11:27
  • 2
    @IQAndreas Спасибо. Я внес изменения. – Registered User 25 April 2015 в 11:45

Другие вопросы по тегам:

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