Cách đảm bảo tính khả dụng của $ BASH_ENV


8

Một vỏ không tương tác, không đăng nhập sẽ cố gắng tìm nguồn bất kỳ tập lệnh nào được chỉ định trong $ BASH_ENV. Nhưng làm cách nào để đảm bảo $ BASH_ENV được đặt trước khi một công việc định kỳ hoặc tập lệnh có cơ hội đặt $ BASH_ENV cho bất kỳ phiên cụ thể nào? Là lựa chọn duy nhất để biên dịch Bash với nó được mã hóa cứng?


Kiểm tra pam_env. Hoặc chỉ nguồn $HOME/.envtrong tất cả các kịch bản của bạn.
Mikel

Câu trả lời:


7

Nếu bạn muốn tất cả các tập lệnh bash trong crontab của bạn tải BASH_ENV, hãy đặt nó ở cấp crontab.

BASH_ENV=/path/to/startup.bash
12 34 * * * /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

Nếu bạn muốn BASH_ENVchỉ đặt cho một mục cụ thể, hãy đặt nó ở đó. Sau đó, BASH_ENVsẽ không được đặt cho mã được liệt kê trong chính crontab, nhưng dù sao cũng không nên đặt bất cứ thứ gì phức tạp vào đó.

12 34 * * * export BASH_ENV=/path/to/startup.bash; /path/to/bash_script
1 23 1 * * /path/to/other_bash_script

Nếu bạn muốn một tập lệnh cụ thể luôn tải một số tệp cấu hình, hãy tải nó trực tiếp từ bên trong tập lệnh.

#!/bin/bash
. /path/to/configuration.bash

Tại sao bạn bận tâm exporting $BASH_ENVnếu bạn chỉ đặt nó trong một quá trình duy nhất? Chỉ BASH_ENV=/path/to/startup.bash /path/to/bash_scriptlà cách hợp lý để làm điều đó.
mikeerv

4

BASH_ENVchỉ được đọc trong một vỏ không tương tác và chỉ khi vỏ đó là bash (và cũng không được gọi dưới tên sh). Một vỏ tương tác không đăng nhập, không tìm kiếm $BASH_ENV:

$ export BASH_ENV=/home/cuonglm/bash-env.sh
$ bash -lci '. test.sh'
QWERTY
$ bash -lc '. test.sh'
BASH_ENV read
QWERTY
$ bash -ci '. test.sh'
QWERTY
$ bash -c '. test.sh'
BASH_ENV read
QWERTY

Không có tệp chuẩn nào được chạy trong trình bao không tương tác cho người dùng. Bạn nên đặt nó trong tệp riêng biệt sau đó nguồn nó:

bash -c '. ~/.profile; echo 123'

Hoặc bạn có thể đặt nó trong một số tệp cấu hình toàn hệ thống như /etc/environmenthoặc /etc/bashrc.bashrc.


Tôi đã hy vọng / etc / môi trường sẽ hoạt động, nhưng nó không có nguồn gốc từ bất kỳ hệ vỏ nào trong Mac OS 10.6 như tôi có thể nói. /etc/bashrc.bashrc nghe có vẻ hấp dẫn, nhưng tôi gặp khó khăn trong việc theo dõi bất kỳ thông tin nào trên đó. Hay đó là một lỗi đánh máy?
Igorio
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.