2011-08-03 11 views
7

Estoy tratando de escribir lo que debería ser un script bash super simple. Básicamente active un env virtual y luego cambie al directorio de trabajo. Una tarea que hago mucho y condescender a un comando simplemente tiene sentido.VirtualEnv iniciado desde un script bash

Básicamente ...

#!/bin/bash 
source /usr/local/turbogears/pps_beta/bin/activate 
cd /usr/local/turbogears/pps_beta/src 

Sin embargo, cuando se ejecuta sólo vuelca de nuevo a la cáscara y todavía estoy en el directorio me encontré el script desde el medio ambiente y no se activa.

Respuesta

20

Todo lo que necesita hacer es ejecutar su secuencia de comandos con el comando de origen. Esto se debe a que el comando cd es local para el shell que lo ejecuta. Cuando ejecuta un script directamente, se ejecuta un nuevo shell que finaliza cuando llega al final del archivo del script. Al usar el comando de origen le dices al shell que ejecute directamente las instrucciones del script.

+0

Lo cual, por cierto, es la razón por la que está utilizando "fuente" en su propio guión. –

+0

Exactamente lo que necesitaba. Lo marcará como correcto tan pronto como el temporizador muera. – Ominus

1

El valor de cd es local al script actual, que finaliza cuando se cae del final del archivo.

Lo que intenta hacer no es "súper simple" porque desea anular este comportamiento.

Consulte exec para reemplazar el proceso actual con el proceso de su elección.

Para alimentar comandos en un Bash interactivo, mire la opción --rcfile.

1

Imagino que desea que su script sea dinámico; sin embargo, como una solución rápida cuando trabajo en un nuevo sistema, creo un alias.

comienzan es decir

el env se llama 'py1' situado en ~/envs/AP1/con un repositorio ubicación en ~/proj/AP1/

alias py1 = fuente '~/envs/py1/bin/activate; cd ~/proj/py1 /;

extremo es decir

Ahora puede acceder a su proyecto y virtualenv escribiendo el AP1 desde cualquier punto de la CLI.

Sé que esto no es ideal, viola DRY y muchos otros conceptos de programación. Es solo una manera rápida y sucia de conseguir que su env y su proyecto sean accesibles rápidamente sin tener que configurar las variables.

Cuestiones relacionadas