Newsgroup: it.comp.os.linux.development
Titolo: Directory superiore in bash

Non vorrei che questa domanda fosse da *.iniziare, ma... quale e' il
metodo "corretto" per ottenere il path alla parent dir di quella
corrente, da bash?
Per adesso sto usando dirname...funzionare funziona ma non so perché mi
suona strano
Poi ho notato una cosa un po' strana, ma non troppo: se ho la struttura 
a -> b (a e b dir)
dove cioe' "a" è link simbolico a "b" e faccio "ls a/.." vedo sempre la
dir che sta sopra a b, cioè alla dir reale.
Quello che in effetti volevo ottenere è un ls della dir su cui lo invoco,
cioè vedere la dir superiore ad a facendo "ls a/.."
-- 
Herbie

 writes:
H> Non vorrei che questa domanda fosse da *.iniziare, ma... quale e'
H> il metodo "corretto" per ottenere il path alla parent dir di quella
H> corrente, da bash?  Per adesso sto usando dirname...funzionare
H> funziona ma non so perché mi suona strano
Beh, c'è anche l'ouytput di ( cd .. ; pwd)
H> Poi ho notato una cosa un po' strana, ma non troppo
Per nulla  strana. Un link  simbolico non ha  nulla a che fare  con la
struttura del file system. È un file dal contenuto particolare.
Comunque `dirname $PWD` (il tuo  metodo, se non erro) dovrebbe dare la
risposta  che cerchi,  mentre quello  che  ho indicato  io ritorna  la
directory superiore reale.
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software
A Cesare avrei detto di scrivermi a 
fn...@rat.vg


$ ls .  # mostra il contenuto della dir corrente ;-)
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >


Io farei p="`cd -P ..; pwd`"
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 cioè vedere la dir superiore ad a facendo "ls a/.."
a me un ls .. da la dir reale superiore, mentre un pwd da la dir
attraverso il link (se sono entrato da quello)
a te?

 Poi ho notato una cosa un po' strana,...
Cosa dice:
alias | grep ls
?

 a te?
sì, la stessa cosa, è che volevo ottenere un "ls .." che, essendo dentro
il symlink, mi desse l'ls della dir sopra il symlink. Alla fine lo
ottengo calcolando la parent dir via dirname e facendo ls su quella
-- 
Herbie

 ls -d ./..
a me questo comando da sempre "./.." come risultato
-- 
Herbie

 $ ls .  # mostra il contenuto della dir corrente ;-)
eh ma sei un simpaticone... 
no ok la mia domanda poteva esser fraintesa, il punto e' che era solo un
esempio ls a/.. nel senso che il path era assoluto ed era un altro
-- 
Herbie

 directory superiore reale.
ok erano le mie stesse conclusioni ma non ne ero del tutto sicuro
-- 
Herbie


Afaik, non puoi, se non lavorando con pwd o facendo accrocchioni con il
comando cd . Quando hai un file il cui path assoluto contiene un link
simbolico e lo apri per lettura/scrittura il kernel provvede in
automatico a tradurre il nome con quello vero. Questo implica che ls
funziona come se lo lanciassi da dentro la directory vera (visto che
deve aprire il file speciale directory per elencarne il contenuto), per
quello vedi il vero padre.
I comandi come pwd invece usano la variabile d'ambiente PWD e da lì si
ricavano dove sei e ti danno quell'output. Quindi quando fai "cd.. ; ls"
fai a mano quello che il kernel fa per i link simbolici, solo che lo fai
come vuoi tu :-)

 a me questo comando da sempre "./.." come risultato
Ehm... errore mio.

 reale.  
Scusate se torno sull'argomento dopo due giorni
e soprattutto la mia risposta affrettata.
Veniamo al problema: la gestione della directory 
corrente avviene tramite il comando cd e le 
variabili OLDPWD e PWD. 
Per conoscere la directory corrente basta fare:
echo $PWD
E per cambiare directory basta fare:
export $PWD=nuovadirectory
Giusto? No, sbagliato!
L'unico modo corretto per conoscere la directory 
corrente e` il comando pwd
E per cambiare directory cd, popd, pushd
Guardate cosa succede sul mio sistema:
[user@localhost ~]$ pwd
/home/user
[user@localhost ~]$ echo $PWD
/home/user
[user@localhost ~]$ PWD=/
[user@localhost /]$ echo $PWD
/
[user@localhost /]$ pwd
/home/user
[user@localhost /]$ cd
[user@localhost ~]$ pwd
/home/user
[user@localhost ~]$ echo $PWD
/home/user
[user@localhost ~]$
Cosa mi sfugge?
cd non agisce su $PWD ed $OLDPWD?
pwd non legge $PWD semplicemente ed espande il 
path completo?

 reale.  
Scusate se torno sull'argomento dopo due giorni
e soprattutto la mia risposta affrettata.
Veniamo al problema: la gestione della directory 
corrente avviene tramite il comando cd e le 
variabili OLDPWD e PWD. 
Per conoscere la directory corrente basta fare:
echo $PWD
E per cambiare directory basta fare:
$PWD=nuovadirectory


 path completo?
No. Grazie al cielo no, altrimenti saresti veramente nella merda piu`
totale (dopo aver cambiato il valore di PWD, intendo).


 intendo).
Grazie per avermi chiarito la questione.

 lo meno nella mia copia)
Probabilmente il manuale assumeva PWD come variabile read-only
(e - di conseguenza - anche OLDPWD).


cioè vedere la dir superiore ad a facendo "ls a/.."
Te lo posto anche se magari te l'han gia' detto... un po' ne
ho letto, ma qui nidifico la sostituzione senza usare PWD:
ls `dirname $( pwd )`
-- 
Saluti, Dalet

ottengo calcolando la parent dir via dirname e facendo ls su quella
Ah ho capito, e' per i symlink che ti serve... infatti a
ripensarci dicevo: ma perche' non interrompe a scrivere
il path un livello prima?!
Allora guarda questo:
ls `dirname $( ls -l pippo | cut -d" " -f9 )`
-- 
Saluti, Dalet