Tôi có thể tạo tập lệnh sử dụng bí danh thay vì lệnh không?


8

Tôi có bí danh cho một lệnh (Tôi đang thiết lập môi trường phát triển Python)

alias python=~/virtualenv/bin/python

để tôi có thể chạy ~/virtualenv/bin/pythonbằng cách gõ python. Bây giờ trong dự án của tôi có một kịch bản shell đi, ví dụ:

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

Tôi có thể làm cho tập lệnh sử dụng bí danh của mình pythonthay vì tập lệnh pythontìm thấy $PATHmà không thay đổi tập lệnh không?


4
Không quan tâm, tại sao bạn không thể thay đổi PATH? Thay đổi PATH và đặt #!/usr/bin/env pythonlên đầu các kịch bản python của bạn có vẻ dễ dàng hơn.
Mikel

@Mikel Điều này thậm chí còn tốt hơn câu trả lời khác của bạn. Không thể chấp nhận ý kiến, mặc dù.
phunehehe

Tôi cập nhật câu trả lời của tôi để bao gồm đề nghị đó.
Mikel

Câu trả lời:


7

Đúng.

Nếu bạn đặt bí danh của bạn vào ~/.aliases, thì bạn có thể làm

export BASH_ENV="~/.aliases"
somescript

Điều này giả định kịch bản của bạn bắt đầu bằng #!/bin/bash, bởi vì #!/bin/shít có thể dự đoán được.

Đây là những gì tôi muốn đề xuất:

  1. Tạo ~ / .bashenv
  2. Di chuyển tất cả các cài đặt mà bạn muốn làm việc trong các tập lệnh từ ~ / .bashrc sang ~ / .bashenv
  3. Thêm phần này vào đầu ~ / .bashrc:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Đặt BASH_ENV=~/.bashenvtrong / etc / môi trường
  5. Làm cho kịch bản của bạn bắt đầu với #!/bin/bashnếu chúng chưa

Hoặc, nếu bạn đang sử dụng zsh, chỉ cần di chuyển bí danh của bạn vào ~ / .zshenv. zsh nhìn vào tập tin đó tự động.


Nhưng có lẽ dễ dàng hơn khi đặt ~/virtualenv/bingần mặt trước của bạn PATH, sau đó thay đổi tập lệnh Python của bạn để có #!/usr/bin/env pythondòng đầu tiên.


Ý bạn là ~/.bashenvở bước 4?
cjm

Vì vậy, tôi sẽ phải thay đổi kịch bản, từ #!/bin/shđến #!/bin/bash? Tôi có thể làm được bash my-scriptkhông?
phunehehe

phunehehe: Vâng, tôi nghĩ bash my-scriptsẽ hiệu quả nếu bạn vẫn thực hiện các bước 1-4.
Mikel

Tôi không khuyên bạn nên sử dụng bí danh trong các tập lệnh. Nó sẽ không hoạt động nếu người khác chạy tập lệnh của bạn hoặc nếu bạn chạy tập lệnh theo sudohoặc phương pháp nâng cao đặc quyền khác. Và nó không cho phép bạn thay đổi virtualenvmỗi lần thực hiện, đó sẽ là điểm chính của việc không có ~/virtualenv/bintrong bạn PATHvĩnh viễn. Thêm thư mục ở phía trước PATHkhi cần là phương pháp tốt nhất.
Gilles 'SO- đừng trở nên xấu xa'

4

Giả sử rằng tệp bí danh của bạn là " ~ / .bash_aliases ", hãy đặt tệp này vào tập lệnh của bạn:

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

( thông qua )


0

Ngoài ra, bạn luôn có thể sourcesử dụng tập lệnh của mình để sử dụng bí danh. Ví dụ: giả sử bạn có bí danh rmtrong ~/.bashrc:

alias rm='moveToTrash'

trong khi moveToTrashlà một chương trình trong của bạn /usr/bin. Bây giờ bạn có một kịch bản có tên test.bashnhư thế này:

#!/bin/bash

which rm

Khi test.bashđược thực thi trực tiếp, bạn có thể thấy đầu ra /bin/rm, trong khi source test.bashsẽ nhận được đầu ra

alias rm='moveToTrash'
    /usr/bin/moveToTrash
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.