¿Puedo hacer que los scripts utilicen alias en lugar de comandos?


8

Tengo un alias para un comando (estoy configurando un entorno de desarrollo de Python)

alias python=~/virtualenv/bin/python

para que pueda correr ~/virtualenv/bin/pythonsimplemente escribiendo python. Ahora en mi proyecto hay un script de shell que va, por ejemplo:

#!/bin/sh
python run-project.py

¿Puedo hacer que el script use mi alias en pythonlugar del que pythonse encuentra $PATH, sin realizar cambios en el script?


44
Por interés, ¿por qué no puedes cambiar la RUTA? Cambiar la RUTA y colocar #!/usr/bin/env pythonen la parte superior de sus scripts de Python parece más fácil.
Mikel

@Mikel Esto es incluso mejor que tu otra respuesta. Sin embargo, no puedo aceptar comentarios.
phunehehe

Actualicé mi respuesta para incluir esa sugerencia.
Mikel

Respuestas:


7

Si.

Si pones tus alias ~/.aliases, entonces puedes hacer

export BASH_ENV="~/.aliases"
somescript

Esto supone que su script comienza con #!/bin/bash, porque #!/bin/shes un poco menos predecible.

Esto es lo que sugeriría:

  1. Crear ~ / .bashenv
  2. Mueva todas las configuraciones que desea trabajar en scripts de ~ / .bashrc a ~ / .bashenv
  3. Agregue esto en la parte superior de su ~ / .bashrc:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Poner BASH_ENV=~/.bashenven / etc / environment
  5. Haga que sus scripts comiencen #!/bin/bashsi aún no lo hacen

O, si estás usando zsh, simplemente mueve tus alias a ~ / .zshenv. zsh busca en ese archivo automáticamente.


Pero tal vez sea más fácil colocarlo ~/virtualenv/bincerca del frente de su PATH, luego cambiar sus scripts de Python para tener #!/usr/bin/env pythoncomo primera línea.


¿No te refieres ~/.bashenven el paso 4?
cjm

Así que voy a tener que cambiar el guión de todos modos, a partir #!/bin/shde #!/bin/bash? ¿Puedo simplemente hacer bash my-script?
phunehehe

phunehehe: Sí, creo bash my-scriptque funcionará si sigues haciendo los pasos 1-4.
Mikel

No recomiendo usar alias en los scripts. No funcionará si alguien más ejecuta su script, o si ejecuta el script bajo sudou otro método de elevación de privilegios. Y no se le permite cambiar la virtualenvejecución por, lo que sería el principal punto de no tener ~/virtualenv/binen su PATHforma permanente. Agregar el directorio frente a PATHcuando sea necesario es el mejor método.
Gilles 'SO- deja de ser malvado'

4

Supongamos que su archivo de alias es " ~ / .bash_aliases ", ponga esto en su script:

#!/bin/bash
shopt -s expand_aliases
source ~/.bash_aliases
python run-project.py

( vía )


0

Alternativamente, siempre sourcepuedes usar tu script para usar los alias de manera forzada. Por ejemplo, supongamos que tiene un alias de rmen su ~/.bashrc:

alias rm='moveToTrash'

mientras moveToTrashes un programa en tu /usr/bin. Ahora tiene un script llamado test.bashasí:

#!/bin/bash

which rm

Cuando test.bashse ejecuta directamente, puede ver la salida /bin/rm, mientras source test.bashque obtendrá la salida

alias rm='moveToTrash'
    /usr/bin/moveToTrash
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.