Có cách nào để đóng gói các hàm bash không?


1

Tôi đang viết một tập lệnh đơn giản script.bashđược cho là xuất một số môi trường biến, để sử dụng nó trong phiên hiện tại của tôi, tôi phải tìm nguồn đó

$ . script.bash

script.bash

function fun1() {
    # TODO
}

function fun2() {
    # TODO
}

function main_script() {
    # ...
    # ...
    fun1 # calling fun1
    # ...
    func2 $ 1 $2 # calling fun2
    # ...
}

để sử dụng script.bash, gọi main_scriptchức năng.

Câu hỏi :

  • Có cách nào để ẩn fun1fun2, và ngăn ngừa chúng khỏi bị gọi là bên ngoài từ script.bash.

1
Hỏi về bảo mật là một câu hỏi lớn (một câu hỏi khá khó trả lời với thông tin hiện tại được cung cấp), có lẽ bạn có thể chia sẻ những mối quan tâm cụ thể nào bạn có thể có với bảo mật? Những điều sẽ giúp theo nghĩa chung là quyền sở hữu / quyền của tập lệnh và những gì nó / chủ sở hữu / nhóm được phép làm trên hệ thống của bạn.
nerdwaller

@nerdwaller Câu hỏi thứ hai đã bị xóa.
tarrsalah

Tôi không phải là một lập trình viên bash, nhưng nếu bạn muốn giới hạn khả năng truy cập của các hàm và chúng không được sử dụng ở nơi nào khác, có lẽ gói gọn các định nghĩa của chúng bên trong hàm chính?
Ƭᴇcʜιᴇ007

Câu trả lời:


2

Thêm unset -f fun1 fun2vào cuối tập lệnh.
Hàm -fspesizes, như unsetcó thể bỏ đặt cả hàm và biến.

trang người đàn ông unset nhập


1
sau đó, làm thế nào tôi có thể sử dụng các chức năng trong chức năng chính của tôi?
tarrsalah

Trừ khi tôi thiếu một cái gì đó: Bạn chạy tập lệnh, hàm chính sẽ chạy khi bạn gọi nó, nó làm những gì nó làm; sau khi mọi thứ được thực hiện với các chức năng, dòng cuối cùng sẽ hủy chạy. Trừ khi bạn thoát khỏi returnhoặc breakkịch bản trong một trong những chức năng, các unset sẽ bỏ đặt chúng
kín đáo

tập lệnh có nguồn gốc trong .bash_profile, vì vậy tất cả các hàm không được đặt trước khi gọi hàm chính.
tarrsalah

vì bạn đang làm theo cách đó, bạn có thể thêm phần chưa đặt vào bashrc
demure

Dường như không thể đạt được những gì tôi muốn.
tarrsalah

1

Kịch bản:

unset my_protected_function
function my_protected_function() {
    echo "function executed"
}
[ "$0" != "/bin/bash" ] && unset my_protected_function
my_protected_function

Khi bạn chạy nó trực tiếp, nhìn ma không có chức năng

$ ./test.sh
./test.sh: line 15: my_protected_function: command not found

Khi bạn nguồn nó:

$ source ./test.sh 
function executed

Đó là những gì bạn có trong tâm trí?


0

bạn có thể đọc tên hàm, sau đó sử dụng 'bí danh' / 'unalias' để liên kết / hủy liên kết nó với tên dễ đọc của con người khi bạn muốn sử dụng nó.

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.