ejemplos comandos comando basicos linux bash shell cd

basicos - comandos shell linux



bash-cómo canalizar el resultado del comando which to cd (7)

¡No necesita un tubo, puede hacer lo que quiera usando la expansión del parámetro Bash!

Sugerencia adicional: utilice "tipo -P" en lugar del comando "que" externo si está utilizando Bash.

# test touch /ls chmod +x /ls cmd=''ls'' PATH=/:$PATH if cmdpath="$(type -P "$cmd")" && cmdpath="${cmdpath%/*}" ; then cd "${cmdpath:-/}" || { echo "Could not cd to: ${cmdpath:-/}"; exit 1; } else echo "No such program in PATH search directories: ${cmd}" exit 1 fi

¿Cómo podría canalizar el resultado de un comando para cd ?

Esto es lo que intento hacer:

which oracle | cd cd < which oracle

Pero ninguno de ellos funciona.

¿Hay alguna manera de lograr esto (en lugar de copiar / pegar, por supuesto)?

Editar: pensándolo bien, este comando fallaría, porque el archivo de destino NO es una carpeta / directorio .

Así que estoy pensando y buscando una mejor manera de deshacerme de la parte final "/ oracle" ahora (sed o awk, o incluso Perl) :)

Editar: Bueno, eso es lo que tengo al final:

cd `which oracle | sed ''s///oracle//g''`



Con dirname para obtener el directorio:

cd $(which oracle | xargs dirname)

EDITAR: tenga cuidado con las rutas que contienen espacios, vea el comentario de @anishpatel a continuación


En respuesta a su pregunta editada, puede quitar el nombre del comando utilizando dirname :

cd $(dirname `which oracle`)


OK, aquí una solución que usa citas correctas:

cd "$(dirname "$(which oracle)")"

Evite los backticks, son menos legibles y siempre cite las sustituciones de procesos.


Utiliza tubería en los casos en que el comando espera parámetros de la entrada estándar. ( Más sobre esto ).

Con el comando cd ese no es el caso. El directorio es el argumento del comando. En tal caso, puede usar la sustitución de comando. Use palos o $(...) para evaluar el comando, almacenarlo en variable ..

path=`which oracle` echo $path # just for debug cd $path

aunque se puede hacer de una manera mucho más simple:

cd `which oracle`

o si tu camino tiene caracteres especiales

cd "`which oracle`"

o

cd $(which oracle)

que es equivalente a la notación de retroceso, pero se recomienda (los backticks se pueden confundir con apóstrofes)

.. pero parece que quieres:

cd $(dirname $(which oracle))

(lo que le muestra que puede usar el anidamiento fácilmente)

$(...) (y también backticks) funcionan también en cadenas de comillas dobles, lo que ayuda cuando el resultado puede contener espacios.

cd "$(dirname "$(which oracle)")"

(Tenga en cuenta que ambas salidas requieren un conjunto de comillas dobles).


cd `which oracle`

Tenga en cuenta que estos son marcadores (generalmente la clave a la izquierda de 1 en un teclado de EE. UU.)