/ bin / sh: lỗi nhập định nghĩa hàm cho `some-function '


13

Tôi đã gặp lỗi này khi cập nhật bash cho vấn đề bảo mật CVE-2014-6271:

# yum update bash
Running transaction (shutdown inhibited)
Updating   : bash-4.2.47-4.fc20.x86_64
/bin/sh: error importing function definition for `some-function'

Câu trả lời:


16

[chỉnh sửa sau nhận xét đầu tiên từ: @chepner - cảm ơn!]

/ bin / bash cho phép dấu gạch nối trong tên hàm, / bin / sh (vỏ Bourne) thì không. Ở đây, "một số chức năng" vi phạm đã được xuất ra bởi bash và bash được gọi là yum có tên / bin / sh đã báo cáo lỗi ở trên.

sửa lỗi: đổi tên các hàm shell thành không có dấu gạch nối

man bash nói rằng các định danh bash có thể bao gồm: "chỉ các ký tự chữ và số và dấu gạch dưới"

Lỗi / bin / sh rõ ràng hơn nhiều:

some-function () { :; }

sh: `some-function ': không phải là định danh hợp lệ


Lưu ý rằng trong bash, một dấu gạch nối được cho phép trong một tên hàm, chỉ không có trong một tên tham số.
chepner

@chepner Điều gì về một dấu gạch dưới? Là một dấu gạch dưới được phép trong một tên hàm và tên tham số?
BH2017

Trên hệ thống của tôi bash 4 cho phép các tên hàm có dấu gạch nối nhưng bash 3 thì không - Tôi giả sử trên hệ thống / bin / sh của OP là bash 3 và / bin / bash là bash 4
Mark Fox

2

Thay đổi / Sửa tên hàm từ "foo-bar"thành"foo_bar"

Đó là quy ước đặt tên mà bash là ok với, trong khi sh thì không.

Thay thế "-" (dấu gạch nối / dấu gạch ngang / dấu trừ) bằng "_" (dấu gạch dưới) và lỗi được sửa và mã hoạt động trên cả bashsh

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.