Cosa fa il comando incorporato in bash?


35

So cos'è un comando incorporato, ma cosa fa builtinse stesso? L'esecuzione which lsmi mostra /bin/ls, ma l'esecuzione which builtinnon restituisce nulla.

man builtinmi dà solo un elenco di comandi integrati, uno dei quali è builtin. Il resto della pagina man spiega cos'è un builtin, ma non cos'è builtin.

builtin --helpmi dice builtin: usage: builtin [shell-builtin [arg ...]]ma non ancora cosa fa.

Fa parte di bash in un modo in cui altri comandi integrati non lo sono?


3
Hai dimenticato help builtin.
Ignacio Vazquez-Abrams,

3
which builtinnon restituisce risultati, perché whichriporta la posizione dei comandi esterni . Se chiedi alla shell type builtin, questo ti dirà, ovviamente builtin is a shell builtin. Troverai lo stesso con alias, setecc.
Toby Speight,

1
builtin help builtin
theonlygusti,

Risposte:


50

Il builtincomando si assicura di eseguire la versione integrata della shell del comando anziché eseguire un altro comando con lo stesso nome.

Ad esempio, supponiamo che tu abbia definito una funzione shell chiamata cdper stampare un po 'di stato extra ogni volta che cambi directory. Ma hai sbagliato e ora non puoi cambiare directory correttamente. Quindi ora puoi digitare builtin cd ~per riportare correttamente nella tua home directory senza eseguire la tua funzione di shell rotta.

E a proposito, la mia copia della pagina man di bash ha una sezione chiamata "SHELL BUILTIN COMMANDS", e definisce il significato del builtincomando in quella sezione (trascritto di seguito).

builtin shell-builtin [argomenti]

    Eseguire l'integrato della shell specificato, passandogli gli argomenti e
    restituisce il suo stato di uscita. Ciò è utile quando si definisce una funzione
    il cui nome è lo stesso di una shell incorporata, mantenendo il
    funzionalità dell'integrato all'interno della funzione. Il cd incorporato è
    comunemente ridefinito in questo modo.

    Lo stato di ritorno è falso se la shell-builtin non è una shell incorporata
    comando.

14
bella risposta. Ma mi chiedo, come puoi essere sicuro che il builtincomando sia il vero builtin di bash?
Pacopaco,

14
@Pacopaco: non puoi :-). È possibile ignorare builtin, anche: function builtin { echo "Hi from builtin :-)"; }. Quindi builtinnon funziona più.
sleske

12
@Pacopaco, type builtinti dirà se è il vero builtin. A meno che non typesia stato sostituito con un non incorporato type...
Toby Speight

10
oh ... sfortunatamente si può: alias unset = "echo unset è ignorato"; alias alias = "echo alias viene ignorato" ... Quindi niente fortuna qui.
Olivier Dulac il

8
Adoro questa discussione in corso!
Sam Weaver,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.