Tôi có một kịch bản shell Korn
#!/bin/ksh
# set the right ENV
case $INPUT in
abc)
export BIN=${ABC_BIN}
;;
def)
export BIN=${DEF_BIN}
;;
*)
export BIN=${BASE_BIN}
;;
esac
# exit 0 <- bad idea for sourcing the file
bây giờ các VAR này chỉ được xuất trong một khung con, nhưng tôi cũng muốn chúng được đặt trong vỏ cha mẹ của mình, vì vậy khi tôi ở dấu nhắc thì các vars đó vẫn được đặt chính xác.
Tôi biết về
. .myscript.sh
Nhưng có cách nào để làm điều đó mà không cần 'tìm nguồn cung ứng' không? như người dùng của tôi thường quên 'nguồn'.
EDIT1: xóa phần "exit 0" - đây chỉ là tôi gõ mà không suy nghĩ trước
EDIT2: để thêm chi tiết về lý do tại sao tôi cần điều này: các nhà phát triển của tôi viết mã cho (vì đơn giản) 2 ứng dụng: ABC & DEF. mọi ứng dụng được chạy trong sản xuất bởi những người dùng riêng biệt usrabc và usrdef, do đó đã thiết lập $ BIN, $ CFG, $ ORA_HOME, bất cứ điều gì - cụ thể cho ứng dụng của họ.
vì thế
- $ BIN = / opt / abc / bin # $ ABC_BIN của ABC trong tập lệnh trên
- $ BIN = / opt / def / bin # $ DEF_BIN của DEF
Vân vân.
bây giờ, trên các nhà phát triển hộp dev có thể phát triển cả ABC và DEF cùng một lúc trong tài khoản người dùng 'justin_case' của riêng họ và tôi tạo cho họ nguồn tệp (ở trên) để họ có thể chuyển đổi cài đặt var ENV của họ qua lại. ($ BIN nên trỏ đến $ ABC_BIN cùng một lúc và sau đó tôi cần chuyển sang $ BIN = $ DEF_BIN)
Bây giờ, tập lệnh cũng sẽ tạo các hộp cát mới để phát triển song song cùng một ứng dụng, v.v ... điều này khiến tôi phải thực hiện nó một cách tương tác, yêu cầu tên hộp cát, v.v.
- / nhà / justin_case / sandbox_abc_beta2
- / nhà / justin_case / sandbox_abc_r1
- / nhà / justin_case / sandbox_def_r1
tùy chọn khác tôi đã xem xét là viết bí danh và thêm chúng vào hồ sơ của mọi người dùng
- bí danh 'setup_env =. .myscript.sh '
và chạy nó với
- setup_env tham số1 ... tham sốX
điều này có ý nghĩa hơn với tôi bây giờ