Có cách nào để tôi có thể định nghĩa lại hàm bash theo định nghĩa cũ của nó không? Ví dụ, tôi muốn thêm khối mã sau vào phần mở đầu của hàm command_not_found_handle ()
,
# Check if $1 is instead a bash variable and print value if it is
local VAL=$(eval echo \"\$$1\")
if [ -n "$VAL" ] && [ $# -eq 1 ]; then
echo "$1=$VAL"
return $?
fi
Nó hiện được định nghĩa trong /etc/profile.d/PackageKit.sh và có nguồn gốc từ các tập lệnh khởi động bash.
Bằng cách đó tôi có thể truy vấn giá trị của biến môi trường tại dấu nhắc lệnh bằng cách nhập tên biến (và với điều kiện là không tồn tại lệnh nào như vậy bởi tên đó). ví dụ
user@hostname ~:$ LANG
LANG=en_AU.utf8
Tôi biết tôi chỉ có thể sao chép và dán định nghĩa hiện tại và thêm các thay đổi của riêng tôi vào ~/.bashrc
, nhưng tôi đang tìm kiếm một cách thanh lịch hơn liên quan đến việc sử dụng lại mã.
Những cách tốt hơn để đạt được mục tiêu hoặc cải tiến / mở rộng mã của tôi cũng được đánh giá cao.
eval
, bạn có thể sử dụng gián tiếp:local VAL=$(echo ${!1})