Dove sono installati i comandi 'fg', 'bg' e 'jobs'? [duplicare]

16
    

Questa domanda ha già una risposta qui:

    
  •              Perché non dovrebbe? quale 'comando funziona per' cd '? Non riesco a trovare l'eseguibile per "cd"!                                      4 risposte                          
  •     

fg , bg e jobs vengono utilizzati per la gestione dei lavori. E per qualche ragione (forse sono solo io), non sono in grado di trovare dove sono i loro binari né le loro manpage ( whereis stampa nessuna informazione). which non dà output. I comandi stessi funzionano comunque bene.

Ho eseguito comandi come find /bin bg , ma senza colpi. Ho anche eseguito find / bg per creare una rete estesa.

    
posta Guildenstern 24.04.2015 - 19:39

5 risposte

32

Non stai ricevendo alcun file contro quei comandi perché sono shell built-in ( bash ), non file eseguibili separati (ad esempio file binari, script). In realtà, i built-in della shell sono compilati nell'eseguibile della shell; se vuoi puoi controllare il codice sorgente per esserne sicuro. Poiché which o whereis cerca solo i file eseguibili esterni, non ottieni alcun output per i file incorporati.

Per scoprire se un comando è un built-in o un alias o una funzione o un file esterno, il modo migliore è utilizzare% built-in% co_de:

$ type fg
fg is a shell builtin

$ type bg
bg is a shell builtin

$ type jobs
jobs is a shell builtin

Nota anche che il tuo comando type non è sintatticamente corretto. La sintassi corretta (la più semplice) è find .

Si noti inoltre che pochi comandi sono implementati sia come built-in della shell sia come eseguibile indipendente separato. Per tali comandi, ricorda sempre che il comando integrato avrà la precedenza su quello esterno. Pertanto, quando esegui find /where/to/search -name 'name_to_search' , viene eseguito il% di% di conversione incorporato. Se vuoi eseguire il binario eseguibile echo something devi chiamarlo in un modo diverso. Un modo è utilizzare il percorso completo dell'eseguibile: echo .

Per visualizzare tutte le versioni disponibili di un comando, esegui echo con l'opzione /bin/echo something :

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

Per ottenere la documentazione per i built-in della shell, puoi controllare la pagina type di -a o utilizzare il comando man (che è un comando incorporato):

help jobs

Anche se @terdon ha sottolineato dovresti usare bash invece di help .

    
risposta data heemayl 24.04.2015 - 19:48
6

Sono incorporati nella shell - puoi ottenere informazioni di base sull'utilizzo digitando help fg o help jobs al prompt della shell bash, o informazioni più dettagliate dalla manpage di bash.

    
risposta data steeldriver 24.04.2015 - 19:45
4

Aggiungendo alla risposta di heemayl, vale la pena sottolineare che fg , bg e jobs devono essere incorporati nella shell, perché manipolano le strutture di dati nella memoria della shell e / o lo stato del kernel associato al processo della shell. Non sarebbe possibile scrivere un comando esterno che faccia ciò che fg fa.

Altri comandi che devono essere incorporati includono cd , %codice%, %codice%, %codice%, %codice%, %codice%, %codice%, %codice%, eval (alias exec ), %codice%, %codice%, %codice%, %codice%, e exit . La tua shell potrebbe avere un elenco più lungo, a seconda di quanta funzionalità estesa implementa. POSIX ha un elenco diverso, ma sovrapposto, di "utilità integrate speciali" - - Non sono sicuro del perché cose come export e history contano come comandi piuttosto che parole chiave di controllo-struttura, o perché POSIX non considera cose come read must-build-in quando non possono essere implementati in altro modo. (Potresti scrivere un programma chiamato set che ha chiamato source , ma cambierebbe solo le impostazioni per stesso, non per i processi successivi creati dalla shell, quindi non soddisferebbe le sue specifiche.)

    
risposta data zwol 24.04.2015 - 23:10
2

Questi sono comandi integrati della shell. Non esiste un binario per loro in quanto fanno parte di Bash (o di qualsiasi shell che si sta utilizzando).

Sono documentati per esempio nella manpage di Bash (vedi la sezione "COMANDI INCORPORATI DELLA SHELL")

    
risposta data Florian Diesch 24.04.2015 - 19:46
2

fg , bg e jobs non sono utilità separate, ma fanno parte di bash (comandi incorporati della shell).

puoi trovare ulteriori informazioni su di loro in bash manual usando il comando

man bash
    
risposta data Registered User 24.04.2015 - 19:44

Leggi altre domande sui tag