Bisakah saya membuat skrip menggunakan alias alih-alih perintah?

8

Saya memiliki alias untuk sebuah perintah (Saya sedang menyiapkan lingkungan pengembangan Python)

alias python=~/virtualenv/bin/python

sehingga saya bisa menjalankannya ~/virtualenv/bin/pythonhanya dengan mengetik python. Sekarang dalam proyek saya ada skrip shell yang berjalan, misalnya:

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

Bisakah saya membuat skrip menggunakan alias saya pythonalih-alih pythonditemukan $PATH, tanpa membuat perubahan pada skrip?

phhehehe
sumber
4
Karena ketertarikan, mengapa Anda tidak dapat mengubah PATH? Mengubah PATH dan meletakkan #!/usr/bin/env pythondi bagian atas skrip python Anda tampaknya lebih mudah.
Mikel
@Mikel Ini bahkan lebih baik daripada jawaban Anda yang lain. Tidak dapat menerima komentar.
phunehehe
Saya memperbarui jawaban saya untuk memasukkan saran itu.
Mikel

Jawaban:

7

Iya.

Jika Anda memasukkan alias ~/.aliases, maka Anda dapat melakukannya

export BASH_ENV="~/.aliases"
somescript

Ini mengasumsikan skrip Anda dimulai dengan #!/bin/bash, karena #!/bin/shsedikit kurang dapat diprediksi.

Inilah yang saya sarankan:

  1. Buat ~ / .bashenv
  2. Pindahkan semua pengaturan yang ingin Anda gunakan dalam skrip dari ~ / .bashrc ke ~ / .bashenv
  3. Tambahkan ini di bagian atas ~ / .bashrc Anda:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Masukkan BASH_ENV=~/.bashenv/ etc / environment
  5. Buat skrip Anda mulai dengan #!/bin/bashjika belum

Atau, jika Anda menggunakan zsh, pindahkan alias Anda ke ~ / .zshenv. zsh melihat file itu secara otomatis.


Tapi mungkin lebih mudah untuk meletakkannya di ~/virtualenv/bindekat bagian depan Anda PATH, kemudian ubah skrip Python Anda #!/usr/bin/env pythonmenjadi baris pertama.

Mikel
sumber
Bukankah maksud Anda ~/.bashenvpada langkah 4?
cjm
Jadi saya harus mengubah skrip, dari #!/bin/shke #!/bin/bash? Bisakah saya lakukan bash my-script?
phunehehe
phunehehe: Ya, saya pikir bash my-scriptakan berhasil jika Anda masih melakukan langkah 1-4.
Mikel
Saya tidak merekomendasikan menggunakan alias dalam skrip. Ini tidak akan berfungsi jika orang lain menjalankan skrip Anda, atau jika Anda menjalankan skrip di bawah sudoatau metode peningkatan hak istimewa lainnya. Dan itu tidak memungkinkan Anda untuk mengubah virtualenvper eksekusi, yang akan menjadi poin utama tidak ada ~/virtualenv/bindi Anda PATHsecara permanen. Menambahkan direktori di depan PATHsaat dibutuhkan adalah metode terbaik.
Gilles 'SO- berhenti bersikap jahat'
4

Andaikata file alias Anda adalah " ~ / .bash_aliases ", tulis ini di skrip Anda:

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

( via )

tepang
sumber
0

Atau, Anda dapat selalu sourcemenggunakan skrip untuk menggunakan alias secara paksa. Misalnya, anggap Anda memiliki alias rmdi ~/.bashrc:

alias rm='moveToTrash'

sedangkan moveToTrashprogram di /usr/bin. Sekarang Anda memiliki skrip bernama test.bashseperti ini:

#!/bin/bash

which rm

Ketika test.bashdieksekusi secara langsung, Anda dapat melihat output /bin/rm, sementara source test.bashakan mendapatkan output

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