Come posso trovare aiuto per il comando punto `.` in * nix?


21

Ho bisogno di aiuto per il comando punto .come in . ./my_script.sh(intendo il primo punto.)

Ho già provato a trovare una pagina man usando man .e man \.. Come posso visualizzare una pagina man in cui spiega l'uso del comando .?


14
@ C0deDaedalus: il nome canonico per "." è FULL STOP. Ciò che la gente chiama dipende da dove sono stati allevati.
RedGrittyBrick

5
help .
Corri e

2
Nei documenti, tuttavia, si chiama dot. Vedi le specifiche formali su pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html
Charles Duffy

11
@jamesqf .è un comando, in particolare un shell incorporato. In Bash è equivalente a source.
wjandrea,

4
@jamesqf: .è POSIX, non solo bash. Ad esempio è anche in zsh e ksh.
MSalters il

Risposte:


79

Prima di tutto dovresti invocare type ., probabilmente otterrai qualcosa del tipo:

. is a shell builtin

I builtin sono parti della tua shell, non hanno le loro pagine di manuale. Alcuni di questi potrebbero sembrare averli, ad esempio echoè incorporato in Bash ma molto probabilmente c'è un eseguibile separato come /bin/echonel tuo sistema e in questo caso si man echoriferisce a quest'ultimo . Questi due echos probabilmente non sono strettamente equivalenti.

La shell può fornire informazioni su qualsiasi built-in tramite helpbuilt-in; prova help help, help typee infine:

help .

I builtin possono anche essere elencati nella pagina del manuale della shell. Ad esempio (nel mio Debian) i built-in di Bash sono coperti direttamente man bash, ma per i built-in di Zsh man zshmi dice di eseguire man zshbuiltins. In generale, le shell possono o meno spiegare i loro builtin.


7
+1 per indicare che .è una shell-built-in e questo dovrebbe essere contrassegnato come risposta perché OP chiede how to find help for . in *nix ?.
C0deDedalo

7
+1 per l'uso di type .per dimostrare che alcuni comandi sono incorporati nella shell.
Roger Lipscombe,

1
Sulla maggior parte di Debian, i builtin di Bash sono anche estratti nella bash-builtins(1)pagina del manuale, che ha dimensioni più convenienti.
Toby Speight,

Inoltre, invocare "type" funziona solo se stai usando una shell che ha un "type" incorporato. Se ti capita di usare tcsh, "digita". dà "tipo: comando non trovato."
jamesqf,

1
Anche . --helpfunziona
Digital Trauma

25

Prova a usare man shoo man bashla pagina man per qualunque shell tu stia usando. (Forse man $SHELL.)

Questo non è ufficialmente chiamato il comando "punto", ma il sourcecomando. La ricerca della parola sourcepuò essere utile.

ad esempio, bash man page (cerca "ogni comando incorporato"), e troverai rapidamente la documentazione.

Per quanto riguarda la spiegazione dell'uso, posso farlo proprio qui. Mi riferirò semplicemente a questo come al sourcecomando, riconoscendo che può essere abbreviato in un solo periodo in cui stai usando alcune shell, e con alcune shell quel comando potrebbe essere necessario (perché il punto potrebbe essere riconosciuto ma l'intera parola sourcepotrebbe non essere).

Se si utilizza il sourcecomando, la shell leggerà ogni riga dal file di script e tenterà di eseguirlo. È necessario disporre delle autorizzazioni di "lettura" sul file. (Non importa se si dispone di autorizzazioni di "esecuzione".) Se si modifica una variabile, è probabile che influisca sulla shell corrente.

Se, d'altra parte, provi a eseguire il file, la tua shell chiederà al sistema operativo di occuparsi di questa richiesta. Ciò richiederà autorizzazioni di "esecuzione". (Su alcuni sistemi, come OpenBSD, non avrai bisogno di autorizzazioni di "lettura" per questo. Su altri sistemi, incluse molte varianti di Unix, lo farai.) Potrebbe essere necessario che il file inizi con un'intestazione appropriata (ad es. #!/bin/sh) il sistema riconosce che si tratta di un file di script. Il sistema operativo eseguirà una copia della shell richiesta e comunicherà a quella shell di eseguire il contenuto dello script. Se l'ambiente shell viene modificato (ad esempio, una variabile ottiene un nuovo valore, la directory di lavoro viene modificata (con  cd), viene reindirizzato un descrittore di file (con exec), ecc.), avrà un impatto solo sulla sotto-shell chiamata per lo script e non può modificare l'ambiente nella shell padre che ha chiamato il file di script.


15
È solo sourcein bash. Nella specifica POSIX, si chiama "il comando punto" (e l' sourcealias non è supportato).
Charles Duffy,

1
Uno script necessita delle autorizzazioni di lettura, altrimenti l'interprete non può accedervi. Vedi Può uno script essere eseguibile ma non leggibile?
wjandrea,

1
L'esecuzione di uno script non apre una sotto-shell, ma solo un normale processo figlio, proprio come l'esecuzione di un programma compilato. Vedi questa risposta su "Una sub-shell è la stessa cosa di una shell secondaria?"
wjandrea,

1
Quindi, scrivo man bashe poi cosa /.? Non molto utile /sourcesarebbe utile, ma per quello avresti bisogno di saperlo .e sourcesono la stessa cosa.
Joker_vD

1
Ho trovato il vostro paragrafo "Come per spiegare l'uso ..." un po 'fuorviante, in quanto implica che essa possa essere .e potrebbe essere source, ma come @CharlesDuffy già accennato, è sempre . in qualsiasi shell POSIX-compliant e ha solo l'alias sourcein un guscio.
Tom Fenech,

6

Nessun altro l'ha menzionato, poiché spesso è stato dimenticato.

Il tuo più grande indizio verrebbe dal comando utile whatis.

tim@musha ~ $ whatis .
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis source
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis bash
bash (1)             - GNU Bourne-Again SHell
tim@musha ~ $ whatis lynx
lynx (1)             - a general purpose distributed information browser for the World Wide Web
tim@musha ~ $ whatis linux
linux: nothing appropriate.
tim@musha ~ $ whatis whatis
whatis (1)           - display one-line manual page descriptions

MODIFICARE:

Alcune persone hanno sottolineato nei commenti che questo non è in alcune distrobuzioni - forse è un pacchetto installabile o abilitato in qualche modo - L'ho avuto di default in gentoo;)

Include il meraviglioso che - che ti dice quale eseguibile è chiamato, e dove ti dà tutti i percorsi di un eseguibile che chiami, ed è pagine man (se esiste in più percorsi).


1
Un buon suggerimento ma sembra che non funzioni ovunque. Ad esempio, in AIX con ksh, whatis .ritornaman: 0703-307 . is not found.
aturegano il

4
whatis .non restituisce nulla su Ubuntu 16.04
Vadim Kotov

E ".: Niente di appropriato." su OpenSuSE usando tcsh.
jamesqf,

2
Ah, dalla sua pagina man: "whatis - mostra le descrizioni delle pagine del manuale di una riga". Quindi sembra essere una versione molto breve di man.
Xen2050,

Un'opzione più compatibile può essere: apropos (che dovrebbe essere uguale all'esecuzione di "man -k"). Per "." o "fonte" (che fa parte della parola "risorsa") questo non funziona troppo bene, a causa di troppi falsi positivi, ma probabilmente funzionerebbe con altri esempi (bash, lince e whatis). Su Debian Linux: " whatis ." ha dato " .: nothing appropriate." su OpenBSD, ha prodotto 47 righe di output. Per questo esempio specifico (usando " whatis ." in Gentoo), i risultati potrebbero non essere straordinariamente buoni (il che significa che questa tecnica non è generalmente utile per molti altri scenari di esempio).
TOOGAM

4

man source mostrerà la spiegazione di cui hai bisogno.

Il punto è uguale al comando sorgente.

source esegue lo script nella shell corrente anziché in una subshell (è il solito modo).

L'uso sourcedelle variabili impostate all'interno dello script viene conservato al termine dello script.


2
In quale distro (s) man sourcefunziona? Non nel mio Debian, da qui la domanda.
Kamil Maciorowski il

1
Funziona in CentOS 6.5. Immagino sia più legato alla versione di bash. Nel mio caso è 4.1.2 (1)
jcbermu,

@jcbermu, nessuna versione di bash fornisce una pagina man separata per l' sourceupstream - è più probabile che abbia fatto CentOS.
Charles Duffy,

Sul mio sistema, man sourceti dà man bash_builtins, che non spiega nulla, ma ti rimanda abash(1)
Scott

1
Sul mio sistema (Ubuntu LTS) man sourcemi dà source(3tcl)... type commande quindi se il comando è incorporato help commandè probabilmente il modo corretto ...
Hastur

0

È .sinonimo del sourcecomando shell e quindi in bash , la sua sintassi viene visualizzata da ...

help source

Funziona esattamente come i comandi includee importin altre lingue in quanto legge il file di destinazione e lo interpreta come se fosse parte dello script corrente. Pertanto, quel file verrà eseguito nella sua interezza prima dei comandi nel resto dello script corrente.

Di solito dovrebbe essere all'inizio dello script corrente e viene spesso utilizzato per caricare variabili e / o definizioni di funzioni.

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.