Tôi biết rằng source
và .
làm điều tương tự, và tôi sẽ ngạc nhiên khi biết các cặp lệnh khác trong tiêu đề không giống như vậy (vì tôi đang chạy bash như vỏ của tôi, $SHELL [script]
và bash [script]
tương đương, phải không ??).
Vậy sự khác nhau giữa ba phương pháp thực thi tập lệnh là gì? Tôi hỏi vì tôi chỉ biết rằng tìm nguồn cung ứng một kịch bản là NOT the exact same khi thực hiện nó. Theo cách mà tôi không thấy rõ ràng khi chạy "thử nghiệm" của tôi và đọc các trang của người đàn ông.
Những khác biệt tinh tế khác mà tôi không thể tìm thấy bằng cách gọi một cách mù quáng các chức năng này trên các tập lệnh cực kỳ đơn giản mà tôi đã viết là gì? Sau khi đọc câu trả lời được liên kết ở trên, tôi có thể đoán chắc rằng câu trả lời cho câu hỏi của tôi sẽ là một lời giải thích đơn giản, nhưng theo cách mà tôi gần như chưa bao giờ tự mình khám phá đầy đủ.
Dưới đây là các "thí nghiệm" Tôi đã làm:
$. myScript.sh
"This is the output to my script. I'd like to think it's original."
$source myScript.sh
"This is the output to my script. I'd like to think it's original."
$bash myScript.sh
"This is the output to my script. I'd like to think it's original."
$$SHELL myScript.sh
"This is the output to my script. I'd like to think it's original."
$./myScript.sh
"This is the output to my script. I'd like to think it's original."
$myScript.sh
"This is the output to my script. I'd like to think it's original."
Ahh, cảm ơn bạn! Vì vậy, tôi có thể chạy một trình bao khác (nói, csh), và STILL gọi 'bash [script]'. Phần được thêm vào về shebang rất thú vị! Vì vậy, "$ SHELL [script]" cũng sẽ bỏ qua shebang. Một điều khác mà tôi vừa mới nhận ra là thư mục mà tôi đang sử dụng khi chạy thử nghiệm của tôi là biến $ PATH của tôi. Nếu không, "[script]" chỉ đơn giản là không có tác dụng. Wow.Có rất nhiều sự khác biệt cho một đầu ra tương tự như vậy. –
@AriSweedler: Đúng vậy. Lưu ý rằng một số công cụ * bỏ qua * shell hiện tại của bạn, và mặc định là '/ bin/sh' trừ khi * rõ ràng * được nói cách khác (ví dụ crontab và make). – DevSolar
Ghi chú: 'nguồn' là một Bashism,' .' là POSIX; '$ SHELL' có thể mở rộng đến một cái gì đó khác với shell của bạn (ví dụ:'/bin/bash' khi chạy dấu gạch ngang). –