Salida de qué command se usó para ingresar al cd

Me gustaría tomar el resultado de un command y cd al directory principal. Por ejemplo, digamos que tengo lo siguiente:

which someprogram 

Con salida:

 /home/me/somedirectory/someprogram 

Y me gustaría cd al directory en el que vive un progtwig:

 cd /home/me/somedirectory 

Me gustaría lograr esto en una línea. ¿Cuál es la manera más elegante, tramposa y corta de hacer esto?

Use dirname :

 cd "`dirname $(which program)`" 

En bash, recomiendo el type -p sobre el which . which es un command externo y es complicado a veces . Puede usar sed para eliminar todo después de la final / , o usar la utilidad dirname propósito especial.

 cd "$(dirname -- "$(type -p program)")" cd "$(type -p program | sed 's:[^/]*$::')" 

En la command-line, si sabe que el directory no contiene ningún carácter especial (espacios en blanco o \[?* ), Puede omitir las comillas. También puede usar las comillas inversas en lugar de uno de los $(…) (anidar las comillas inversas es difícil, no vale la pena aquí).

 cd `dirname $(type -p program)` cd $(dirname `type -p program`) cd `type -p program | sed 's:[^/]*$::'` 

En zsh, hay una syntax más compacta.

 cd ${$(whence -p program):h} cd ${$(echo =program):h} cd ${${_+=program}:h} 

(Sí, el último es críptico. Utiliza la syntax ${VAR+TEXT} en la variable _ , con el valor being =program que es equivalente a $(whence -p program) .)