Differenza tra quasi gli stessi comandi di directory


2

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:


9

POSIX definisce che ...

  1. ...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

  2. ... 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.)


1
Lo sai a memoria o hai davvero fatto il possibile?
slhck

3
Ho già installato le shell, quindi ...
grawity

Il tuo commento sul ksh di AT & amp; T che si espande al nome utente mi ha ricordato un trucco accurato in bash, dash e probabilmente altri: cd ~<username> ti porterà a <username> è a casa.
GnP

0

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 ; }
  1. ti porterà a /, mentre 2. e 3. ti porteranno a casa.

2
perfetta causa voglio andare a casa :(
Belmark Caday
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.