Tôi muốn lấy nguồn (tức là không gọi ) một tập lệnh từ bất kỳ shell nào (bash / csh là mục tiêu chính, nhưng fish, zsh, ksh, và RC cũng sẽ rất thú vị).
Tôi muốn nếu tập lệnh có thể là một tệp duy nhất - tức là không phải là tệp cho mỗi phương ngữ shell.
Tôi có thể làm điều đó?
Tôi đang nghĩ về một cái gì đó tương tự như:
if shell is bash then
# bash code here
else
if shell is csh then
# csh code here
else
if shell is xxxsh then
# xxxsh code here
fi
endif
fi
Vì vậy, tôi có thể làm:
csh% source my_script
bash$ . my_script
Vấn đề là - tất nhiên if
là không giống nhau trong mỗi phương ngữ, vì vậy tôi bằng cách nào đó cần sử dụng cú pháp hợp lệ cho mọi shell.
Biên tập
Phát hiện shell là bước đầu tiên để xác định shell trong script trong thời gian chạy đang làm rất tốt.
Một bước quan trọng không kém là làm thế nào mã cho các phần khác nhau cho shell nên được trích dẫn để không nhầm lẫn các shell khác. Hãy suy nghĩ: Làm thế nào bạn có thể trong phần bash có <<here_document
chứa tất cả các ký tự trong tất cả các kết hợp hợp pháp trong bash nhưng bất hợp pháp trong bất kỳ shell nào khác mà không gây nhầm lẫn cho các shell khác. Điều này không được bao phủ bởi bất kỳ câu trả lời / câu trả lời liên kết.