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

16
    

У этого вопроса уже есть ответ:

    
  •              Почему бы не " что «команда работает для« cd »? Я не могу найти исполняемый файл для 'cd'!                                      4 ответов                          
  •     

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

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

    
задан Guildenstern 24.04.2015 в 17:39
источник

5 ответов

32

Вы не получаете никаких файлов против этих команд, потому что они являются оболочками ( bash ) встроенными, а не отдельными исполняемыми файлами (например, двоичные файлы, скрипты). Собственно, встроенные оболочки компилируются в исполняемый файл оболочки; если вы хотите, вы можете проверить исходный код, чтобы убедиться в этом. Поскольку which или whereis ищет только внешние исполняемые файлы, вы не получаете никаких выходных данных для встроенных модулей.

Чтобы найти, является ли команда встроенным или псевдонимом или функцией или внешним файлом, лучше всего использовать встроенный type :

$ type fg
fg is a shell builtin

$ type bg
bg is a shell builtin

$ type jobs
jobs is a shell builtin

Также обратите внимание, что ваша команда find не является синтаксически правильной. Правильный (простейший) синтаксис - find /where/to/search -name 'name_to_search' .

Также обратите внимание, что несколько команд реализованы как как встроенная оболочка, так и отдельный автономный исполняемый файл. Для таких команд всегда помните, что встроенная команда будет иметь приоритет над внешним. Таким образом, при запуске echo something запускается встроенный echo . Если вы хотите запустить исполняемый файл echo , вам нужно вызвать его по-другому. Один из способов - использовать полный путь к исполняемому файлу: /bin/echo something .

Чтобы отобразить все доступные версии команды, запустите type с опцией -a :

$ type -a echo
echo is a shell builtin
echo is /bin/echo

Чтобы получить документацию для встроенных модулей оболочки, вы можете проверить man страницы bash или использовать команду help (которая является встроенной командой):

help jobs

Также, как отметил @terdon , вы должны использовать type вместо which .

    
ответ дан heemayl 24.04.2015 в 17:48
источник
6

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

    
ответ дан steeldriver 24.04.2015 в 17:45
4

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

Другие команды, которые должны быть встроены, включают cd , %код%, %код%, %код%, %код%, %код%, %код%, %код%, eval (aka exec ), %код%, %код%, %код%, %код%, и exit . У вашей оболочки может быть более длинный список, в зависимости от того, насколько расширенная функциональность реализована. POSIX имеет другой, но перекрывающий список «специальных встроенных утилит» - - Я не уверен, почему такие вещи, как export и history , считаются командами, а не ключевыми словами контрольной структуры, или почему POSIX не рассматривает такие вещи, как read must-build-in когда они не могут быть реализованы каким-либо другим способом. (Вы можете написать программу с именем set , которая называется source , но она изменит только настройку для сам, а не для последующих процессов, созданных оболочкой, поэтому он не будет выполнять свою спецификацию.)

    
ответ дан zwol 24.04.2015 в 21:10
2

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

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

    
ответ дан Florian Diesch 24.04.2015 в 17:46
2

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

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

man bash
    
ответ дан Registered User 24.04.2015 в 17:44