Saya memiliki alias untuk sebuah perintah (Saya sedang menyiapkan lingkungan pengembangan Python)
alias python=~/virtualenv/bin/python
sehingga saya bisa menjalankannya ~/virtualenv/bin/python
hanya 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 python
alih-alih python
ditemukan $PATH
, tanpa membuat perubahan pada skrip?
shell-script
alias
phhehehe
sumber
sumber
#!/usr/bin/env python
di bagian atas skrip python Anda tampaknya lebih mudah.Jawaban:
Iya.
Jika Anda memasukkan alias
~/.aliases
, maka Anda dapat melakukannyaIni mengasumsikan skrip Anda dimulai dengan
#!/bin/bash
, karena#!/bin/sh
sedikit kurang dapat diprediksi.Inilah yang saya sarankan:
[ -f ~/.bashenv ] && source ~/.bashenv
BASH_ENV=~/.bashenv
/ etc / environment#!/bin/bash
jika belumAtau, jika Anda menggunakan zsh, pindahkan alias Anda ke ~ / .zshenv. zsh melihat file itu secara otomatis.
Tapi mungkin lebih mudah untuk meletakkannya di
~/virtualenv/bin
dekat bagian depan AndaPATH
, kemudian ubah skrip Python Anda#!/usr/bin/env python
menjadi baris pertama.sumber
~/.bashenv
pada langkah 4?#!/bin/sh
ke#!/bin/bash
? Bisakah saya lakukanbash my-script
?bash my-script
akan berhasil jika Anda masih melakukan langkah 1-4.sudo
atau metode peningkatan hak istimewa lainnya. Dan itu tidak memungkinkan Anda untuk mengubahvirtualenv
per eksekusi, yang akan menjadi poin utama tidak ada~/virtualenv/bin
di AndaPATH
secara permanen. Menambahkan direktori di depanPATH
saat dibutuhkan adalah metode terbaik.Andaikata file alias Anda adalah " ~ / .bash_aliases ", tulis ini di skrip Anda:
( via )
sumber
Atau, Anda dapat selalu
source
menggunakan skrip untuk menggunakan alias secara paksa. Misalnya, anggap Anda memiliki aliasrm
di~/.bashrc
:sedangkan
moveToTrash
program di/usr/bin
. Sekarang Anda memiliki skrip bernamatest.bash
seperti ini:Ketika
test.bash
dieksekusi secara langsung, Anda dapat melihat output/bin/rm
, sementarasource test.bash
akan mendapatkan outputsumber