Cómo listar las versiones instaladas del mismo programa

7

Tengo un programa llamado PyMOL instalado varias veces en mi máquina. Uno fue instalado por MacPorts, otro fue instalado a través del canal de distribución de desarrolladores y así sucesivamente. Uno está en / opt / local / bin, el otro está en / i / have / no / clue.

Sé que puedo usar "which pymol" para ver dónde se encuentra el que se ejecuta, pero ¿cómo puedo obtener la ubicación de los otros con el mismo nombre?

    
pregunta TMOTTM 06.09.2013 - 09:06

4 respuestas

3

Tiene el comando correcto y solo necesita configurar la opción correcta:

which -a pymol mostrará todas las instancias del ejecutable pymol ubicado dentro de su PATH .

Por ejemplo, en mi computadora portátil tengo git instalado en dos lugares:

$ which git
/usr/local/bin/git

proporciona lo que se ejecutará cuando use el comando git .

$ which -a git
/usr/local/bin/git
/usr/bin/git

proporciona todas las instancias del ejecutable en mi PATH .

    
respondido por el Chauncey Garrett 10.09.2013 - 21:56
2

whereis pymol debería mostrarle todas las coincidencias que se encuentran en su ruta ejecutable.

    
respondido por el Kent 06.09.2013 - 13:19
1

Puede usar "buscar" o "localizar" y luego ejecutar los resultados a través de "grep".

Esto le dará más que los resultados de "which" o "whereis" que solo mostrarán las cosas en $ PATH.

"localizar" es más rápido, pero utiliza un índice que no siempre está actualizado.

"buscar" es más lento, realiza una búsqueda recursiva de todo, pero produce todos los resultados, no solo los resultados que se han indexado como lo hace "localizar".

    
respondido por el Kaydell 06.09.2013 - 17:10
0

Al menos según su página de manual, whereis no busca en $PATH sino en el resultado de sysctl user.cs_path (que no contiene ningún directorio adicional agregado por el perfil del usuario). Para buscar el comando basado en el $PATH real, podría usar una función de shell como

function whereis() {
    for p in ${PATH//:/ }; do
        [[ -x "$p/$1" ]] && echo "$p"
    done
}

o (para su caso específico) ejecute

for p in ${PATH//:/ }; do [[ -x "$p"/pymol ]] && echo "$p" ; done

PS: el carácter de espacio cerca del final de ${PATH...} es esencial para que esto funcione.

    
respondido por el nohillside 06.09.2013 - 20:27

Lea otras preguntas en las etiquetas