Posso fare in modo che gli script utilizzino gli alias anziché i comandi?


8

Ho un alias per un comando (sto configurando un ambiente di sviluppo Python)

alias python=~/virtualenv/bin/python

in modo che io possa correre ~/virtualenv/bin/pythonsemplicemente digitando python. Ora nel mio progetto c'è uno script shell che va, ad esempio:

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

Posso fare in modo che lo script utilizzi il mio alias pythonanziché quello in cui pythonsi trova $PATH, senza apportare modifiche allo script?


4
Per interesse, perché non puoi cambiare PERCORSO? Modificare il PERCORSO e mettere #!/usr/bin/env pythonin cima ai tuoi script Python sembra più facile.
Mikel

@Mikel Questo è persino meglio dell'altra tua risposta. Non posso accettare commenti, però.
phunehehe,

Ho aggiornato la mia risposta per includere quel suggerimento.
Mikel

Risposte:


7

Sì.

Se inserisci i tuoi alias ~/.aliases, puoi farlo

export BASH_ENV="~/.aliases"
somescript

Ciò presuppone che lo script inizi con #!/bin/bash, perché #!/bin/shè un po 'meno prevedibile.

Ecco cosa suggerirei:

  1. Crea ~ / .bashenv
  2. Sposta tutte le impostazioni che desideri utilizzare negli script da ~ / .bashrc a ~ / .bashenv
  3. Aggiungi questo nella parte superiore del tuo ~ / .bashrc:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Inserisci BASH_ENV=~/.bashenvin / etc / environment
  5. Fai iniziare i tuoi script #!/bin/bashse non lo fanno già

Oppure, se stai usando zsh, sposta i tuoi alias in ~ / .zshenv. zsh cerca automaticamente quel file.


Ma forse è più facile metterlo ~/virtualenv/binvicino alla parte anteriore del tuo PATH, quindi cambiare i tuoi script Python per avere #!/usr/bin/env pythoncome prima riga.


Non intendi ~/.bashenvnel passaggio 4?
cjm

Quindi dovrò comunque cambiare la sceneggiatura, da #!/bin/sha #!/bin/bash? Posso solo fare bash my-script?
phunehehe,

phunehehe: Sì, penso bash my-scriptche funzionerà se fai ancora i passaggi 1-4.
Mikel

Non consiglio di usare gli alias negli script. Non funzionerà se qualcun altro esegue il tuo script o se esegui lo script con un sudoaltro metodo di elevazione dei privilegi. E non ti consente di modificare la virtualenvper esecuzione, che sarebbe il punto principale di non avere permanentemente ~/virtualenv/binnel tuo PATH. L'aggiunta della directory davanti a PATHquando necessario è il metodo migliore.
Gilles 'SO- smetti di essere malvagio'

4

Supponendo che il tuo file alias sia " ~ / .bash_aliases ", inseriscilo nel tuo script:

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

( via )


0

In alternativa, puoi sempre utilizzare il sourcetuo script per utilizzare forzatamente gli alias. Ad esempio, supponiamo che tu abbia un alias di rmnel tuo ~/.bashrc:

alias rm='moveToTrash'

while moveToTrashè un programma nel tuo /usr/bin. Ora hai uno script chiamato test.bashcosì:

#!/bin/bash

which rm

Quando test.bashviene eseguito direttamente, puoi vedere l'output /bin/rm, mentre source test.bashotterrà l'output

alias rm='moveToTrash'
    /usr/bin/moveToTrash
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.