Kann ich Skripte dazu bringen, Aliase anstelle von Befehlen zu verwenden?

8

Ich habe einen Alias ​​für einen Befehl (ich richte eine Python-Entwicklungsumgebung ein).

alias python=~/virtualenv/bin/python

damit ich ~/virtualenv/bin/pythoneinfach durch tippen rennen kann python. Jetzt gibt es in meinem Projekt ein Shell-Skript, das zum Beispiel lautet:

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

Kann ich das Skript dazu bringen, mein Alias pythonanstelle des pythondarin gefundenen zu verwenden $PATH, ohne Änderungen am Skript vorzunehmen?

Phunehehe
quelle
4
Warum können Sie PATH aus Interesse nicht ändern? Das Ändern von PATH und das Einfügen #!/usr/bin/env pythonan die Spitze Ihrer Python-Skripte scheint einfacher zu sein.
Mikel
@Mikel Das ist noch besser als deine andere Antwort. Ich kann jedoch keine Kommentare akzeptieren.
Phunehehe
Ich habe meine Antwort aktualisiert, um diesen Vorschlag aufzunehmen.
Mikel

Antworten:

7

Ja.

Wenn Sie Ihre Aliase eingeben ~/.aliases, können Sie dies tun

export BASH_ENV="~/.aliases"
somescript

Dies setzt voraus, dass Ihr Skript mit beginnt #!/bin/bash, da #!/bin/shes etwas weniger vorhersehbar ist.

Folgendes würde ich vorschlagen:

  1. Erstellen Sie ~ / .bashenv
  2. Verschieben Sie alle Einstellungen, die Sie in Skripten bearbeiten möchten, von ~ / .bashrc nach ~ / .bashenv
  3. Fügen Sie dies oben in Ihrem ~ / .bashrc hinzu:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Geben Sie BASH_ENV=~/.bashenv/ etc / environment ein
  5. Beginnen Sie mit Ihren Skripten, #!/bin/bashfalls dies noch nicht geschehen ist

Wenn Sie zsh verwenden, verschieben Sie Ihre Aliase einfach in ~ / .zshenv. zsh sucht automatisch in dieser Datei.


Aber vielleicht ist es einfacher, einfach in die ~/virtualenv/binNähe Ihrer Vorderseite zu setzen PATHund dann Ihre Python-Skripte so zu ändern, dass sie #!/usr/bin/env pythonals erste Zeile dienen.

Mikel
quelle
Meinst du nicht ~/.bashenvin Schritt 4?
cjm
Also muss ich das Skript trotzdem ändern, von #!/bin/shbis #!/bin/bash? Kann ich nur bash my-script?
Phunehehe
phunehehe: Ja, ich denke , bash my-scriptwird funktionieren , wenn Sie noch Schritte tun 1-4.
Mikel
Ich empfehle nicht, Aliase in Skripten zu verwenden. Es funktioniert nicht, wenn jemand anderes Ihr Skript ausführt oder wenn Sie das Skript unter sudooder einer anderen Methode zur Erhöhung von Berechtigungen ausführen . Und es erlaubt Ihnen nicht, die virtualenvpro Ausführung zu ändern , was der Hauptgrund dafür wäre, dass ~/virtualenv/binSie nicht PATHdauerhaft in Ihrer Ausführung sind . Das Hinzufügen des Verzeichnisses vor dem Verzeichnis ist PATHbei Bedarf die beste Methode.
Gilles 'SO - hör auf böse zu sein'
4

Angenommen, Ihre Aliasdatei lautet " ~ / .bash_aliases ", fügen Sie dies in Ihr Skript ein:

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

( via )

Tshepang
quelle
0

Alternativ können Sie jederzeit sourceIhr Skript verwenden, um die Aliase zwangsweise zu verwenden. Angenommen, Sie haben einen Alias ​​von rmin Ihrem ~/.bashrc:

alias rm='moveToTrash'

während moveToTrashist ein Programm in Ihrem /usr/bin. Jetzt haben Sie ein Skript mit dem Namen test.bash:

#!/bin/bash

which rm

Wenn test.bashdirekt ausgeführt wird, können Sie die Ausgabe sehen /bin/rm, während source test.bashdie Ausgabe erhalten wird

alias rm='moveToTrash'
    /usr/bin/moveToTrash
Mark Z.
quelle