Vai alla directory principale di un file con cd?


9

Sto scrivendo un .sh per fare un po 'di lavoro per me, ma ora sono nel punto in cui devo cd nella directory in cui si trova il file /path/to/file.end. Terminal non consente

cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory

purtroppo non c'è soluzione alternativa che conosco, quindi sarebbe bello se tu potessi aiutare!


4
Uhm, vuoi dire cd /path/to? Ciò cambierà la directory nella directory in cui si trova il file file.end.
Alaa Ali,

1
No, il file è variabile e vorrei inserire il percorso del file (rilasciarlo nel terminale) e quindi andare nella cartella in cui si trova
Azsgy

Risposte:


10

Tipo cd $( dirname /path/to/file.end). Questo ti porterà dentro /path/to.

Spiegazione:

  • dirnamerestituisce il percorso completo per un file (senza il nome file, con il quale si otterrebbe basename), ovvero dirname /etc/apt/apt.conf.d/99update-notifierrestituisce/etc/apt/apt.conf.d
  • l'espressione $(anything)è sostituita dal risultato del comando tra parentesi. Quindi cd $( dirname /etc/apt/apt.conf.d/99update-notifier)viene eseguito comecd /etc/apt/apt.conf.d

Un'altra notazione (ma vecchia e scoraggiata) per lo stesso era

cd `dirname /path/to/file.end` 

8

Non è possibile cdinserire un file. Ecco una (riga di comando) funzione che verrà automaticamente cdin un percorso per un determinato percorso file completo:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }

Ho capito bene ?: funzione fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} la risposta è: bash: errore di sintassi vicino al token imprevisto `pwd 'mi dà un errore in questo modo :(
Azsgy

2
@Atsch, hai bisogno di un punto pwde virgola prima , e se stai definendo una funzione in una riga, hai bisogno di un punto e virgola dopo pwd.
Glenn Jackman,

@glennjackman la funzione si chiude senza alcun output o cambio di dir :(
Azsgy

eseguire la funzione, quindi immettere echo $?- qual è lo stato di uscita?
Glenn Jackman,

dannatamente non avrei dovuto dubitare di me stesso. L'alternativa mi è sembrata migliore quando l'ho trovata _O-
Rinzwind il

1

Se aggiungi "/ .." al nome del file che ti porterà alla directory corretta, ad es cd /path/to/file.end/... Funziona comunque su Cygwin.


4
Non funziona in bash;) touch test && cd /home/test/test/..dicebash: cd: /home/test/test/..: No such file or directory
Rinzwind il
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.