C'è qualche differenza tra questi (quasi gli stessi) comandi di directory?
1. cd
2. cd ~
3. cd ~/
L'ho provato nella mia shell e tutti portano alla directory home. C'è qualche possibile scenario in cui sono diversi?
C'è qualche differenza tra questi (quasi gli stessi) comandi di directory?
1. cd
2. cd ~
3. cd ~/
L'ho provato nella mia shell e tutti portano alla directory home. C'è qualche possibile scenario in cui sono diversi?
Risposte:
POSIX definisce che ...
...Se cd non è stato dato alcun argomento, utilizzerà il valore di $HOME se la variabile è impostata, e non fare nulla in caso contrario (nonostante ciò anche dice che i risultati non sono specificati). - cd
... se un argomento è ~ o inizia con ~/, la tilde sarà espansa al valore di $HOME se la variabile è impostata; i risultati non sono specificati altrimenti. - tilde expansion
Così Se $HOME è impostato, quindi tutti e tre i comandi sono equivalenti. (Barre aggiuntive dopo che i nomi delle directory non hanno significato).
Tuttavia, se $HOME è non impostare, quindi i risultati di entrambi ~ -estensione e cd siamo imprecisato :
Nel bash , AT & amp; T ksh e cimelio sh , chiaro cd fallirà con "nessuna directory home".
Nel csh , zsh , trattino e MirBSD mksh , chiaro cd non farà nulla
Nel tcsh , chiaro cd cercherà la home directory usando getpwuid().
Per quanto riguarda la ~ espansione...
bash e tcsh si espanderà ~ alla directory principale da getpwnam().
AT & amp; T ksh si espanderà ~ al tuo nome utente (?!).
Nel csh e zsh , ~ si espanderà su una stringa vuota. ( cd ~ quindi non fare nulla, come semplice cd, in quelle conchiglie.)
Nel trattino e MirBSD mksh , il ~ rimarrà un letterale ~. (Utilizzando cd ~ proverà a cambiare in una directory denominata tale).
cimelio di famiglia sh non si espande mai ~ anche se $HOME è impostato - probabilmente è precedente alla convenzione.
Di questi, solo csh e zsh attenersi alla definizione di espansione di POSIX ~ al valore di $HOME anche se è vuoto.
(Il pesce la shell imposta sempre $HOME a partire dal getpwnam() all'avvio se la variabile è vuota e rifiuta di modificarla in seguito.)
cd ~<username> ti porterà a <username> è a casa.
Bene, posso immaginare uno scenario in cui 1 è diverso da 2 e 3. Prova a definire la seguente funzione in bash:
cd () { if (($#)) ; then builtin cd "$1" ; else cd / ; fi ; }
/, mentre 2. e 3. ti porteranno a casa.