Làm thế nào để tạo một shell script toàn cầu?


82

Tôi đang sử dụng OS 10.6 của Mac và tôi đang cố gắng học một hoặc hai điều về kịch bản shell. Tôi hiểu cách lưu tập lệnh shell và làm cho nó có thể thực thi được, nhưng tôi đang băn khoăn không biết mình có thể làm gì hoặc nơi tôi có thể lưu tệp để làm cho tệp toàn cầu (nghĩa là, có thể truy cập bất kể tôi đang ở trong thư mục nào).

Ví dụ: nếu tôi lưu tệp .sh trong thư mục / Users / tên người dùng / và làm cho nó có thể thực thi được, tôi chỉ có thể thực thi tập lệnh đó trong thư mục cụ thể đó. Ví dụ: nếu tôi điều hướng đến / Users / username / Downloads, tôi không thể thực thi tập lệnh.

Ngoài ra, bất kỳ đề xuất tài nguyên nào để tìm hiểu thêm về kịch bản shell sẽ hữu ích. Cảm ơn


1
Đọc về PATHbiến môi trường trước, sau đó cập nhật câu hỏi.
S.Lott

Câu trả lời:


135

/usr/local/binsẽ là vị trí thích hợp nhất. Mac OS X có nó trong PATHmặc định


Chơi lô tô! Cảm ơn :)
Patrick Lynch

44

Theo truyền thống, các tập lệnh như vậy hoặc đi vào ~/bin(tức là: thư mục bin trong thư mục chính của bạn) hoặc /usr/local/bin/Điều trước có nghĩa là tập lệnh sẽ chỉ hoạt động cho bạn, tập lệnh sau dành cho các tập lệnh bạn muốn bất kỳ ai trên hệ thống có thể chạy.

Nếu bạn đưa nó vào ~/bin, bạn có thể cần thêm nó vào biến môi trường PATH của mình. /usr/local/binnên đã được trên con đường.


30

Có hai cách để làm điều đó -

  1. Đặt tập lệnh của bạn vào usr / local / bin và đảm bảo rằng nó có thể thực thi được (chmod + x my_script) (Điều này đã được thiết lập trong đường dẫn, bạn có thể kiểm tra bằng cách thực hiện echo $ PATH)
  2. Tạo một thư mục trong thư mục chính của bạn có tên là bin. (Đối với các kịch bản cá nhân của bạn)
    • cd ~ (Đưa bạn đến thư mục chính của bạn)
    • mkdir bin (tạo một thư mục bin)
    • vim .bash_profile (để đặt biến môi trường đường dẫn)
    • export PATH = ~ / bin: $ PATH (Nhấn i rồi thêm dòng này, sau đó thực hiện esc và gõ: wq)
    • Bây giờ bạn có thể chỉ cần nhập tên tập lệnh của mình và chạy nó từ bất cứ đâu bạn muốn.

** LƯU Ý : Nếu bạn muốn chạy tập lệnh bằng lệnh rút gọn thay vì nhập toàn bộ tên tệp, hãy thêm phần sau vào .bash_profile của bạn:
alias myscript='my_script.sh'
Sau đó, bạn có thể chạy tập lệnh bằng cách chỉ cần nhập myscript. (bạn có thể sub bằng bất kỳ bí danh nào bạn muốn)


4

Trong hệ điều hành mac

  • Mở tệp bash ~ / .bashrc.
  • thêm đường dẫn của tập lệnh vào tệp bashrc của bạn, sử dụng export PATH = "$ PATH: /Users/sher.mohammad/Office/practice/practiceShell"
  • Mở tệp ~. / Bash_profile của bạn và thêm [[-s ~ / .bashrc]] && source ~ / .bashrc
  • mở cửa sổ đầu cuối mới Bây giờ bất cứ khi nào bạn mở thiết bị đầu cuối, tập lệnh của bạn sẽ được tải

tại sao không chỉ cần đặt nó trực tiếp vào .bash_profile? Nó đơn giản hơn rất nhiều (và nguồn .bashrc đó không bao giờ làm việc cho tôi).
szeitlin

Tôi đã nghiên cứu thì thấy rằng bash_profile được thực thi khi bạn đăng nhập, bashrc được sử dụng cho các shell không đăng nhập, OS X theo mặc định giống như các shell đăng nhập và tải bash_profile, vì vậy việc thêm vào bash_profile sẽ hoạt động tốt và nếu bạn viết bằng bashrc thì bạn đã thêm [[- s ~ / .bashrc]] && source ~ / .bashrc trong bash_profile, để tải bashrc khi bash_profile chạy lúc đăng nhập
Sher Mohammad

4

Điều này rất dễ dàng nếu bạn đã quen với tệp bashrc của mình! Điều này sẽ hoàn toàn chỉ sử dụng tệp .bashrc của bạn và mất 2 giây để hoàn thành.

(Tôi sử dụng Arch Linux Manjaro nên tôi sử dụng .bashrc nằm trong thư mục chính của tôi)

Mã được đặt trong tệp .bashrc của bạn:

# Simple bashrc method to launch anything in terminal from any directory

YOURCOMMAND () {
  cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}

Như bạn có thể thấy, đầu tiên bạn sử dụng lệnh đơn giản 'cd' và cung cấp cho nó thư mục của vị trí tập lệnh, sau đó sử dụng '&&' để bạn có thể thực hiện lệnh tiếp theo ngay sau đó và cuối cùng mở tập lệnh của bạn giống như bạn làm bình thường! Siêu dễ dàng và được lưu ngay trong tệp .bash của bạn! :)

Hy vọng tôi đã giúp ai đó!

Trân trọng,

AnonymousX


điều này thật tuyệt ... và nó cho phép zsh của tôi tự động hoàn thành!
Milan,

2

Khi sử dụng bash shell, hãy viết tập lệnh đó dưới dạng hàm và sau đó đặt nó vào tệp .bashrc hoặc nguồn tệp chứa hàm đó bằng "tên tệp nguồn"

Bây giờ thực thi script bằng lệnh gọi hàm trong shell.


1

Lưu nó vào /usr/bin(hoặc bất kỳ thư mục nào khác có trong PATH) hoặc chỉnh sửa PATHđể đưa vào thư mục bạn đã lưu nó về cơ bản sẽ làm cho nó chạy trong bất kỳ thư mục nào.


7
/usr/bincó thể được làm trống hoàn toàn và thay thế trong quá trình nâng cấp hệ điều hành, khiến tập lệnh của bạn biến mất một cách bí ẩn. /usr/local/binlà cho mục đích này, như Bryan Oakley đã đề cập. Cũng thấy Filesystem Hierarchy Chuẩn
Stephen P

0

từ thư mục làm việc của 'script.sh' "mv [script.sh] / usr / local / bin" (không được thử nghiệm nhưng có vẻ là cách ít phức tạp nhất IMO.)


1
Có thể bạn sẽ cần sudo mv script.sh /usr/local/bin, vì thư mục đó không thể ghi nếu không có các đặc quyền.
Perette

-2

Bạn nên đặt nó trong thư mục thực thi chung trên máy của bạn. Tôi nghĩ rằng điều đó thường xảy ra /usr/bintrên các hệ điều hành dựa trên Unix (tuy nhiên, điều này thường yêu cầu đặc quyền của người dùng cấp cao trên máy đó).

Bạn cũng có thể đặt nó trong bất kỳ thư mục nào khác có trong $PATHbiến môi trường, mặc dù nó sẽ chỉ hoạt động đối với những người dùng có thư mục đó trong biến đó.

Bạn có thể tìm thấy giá trị của $PATHbằng cách gõ echo $PATHvào shell. Các thư mục được ngăn cách bởi : .


9
Tôi sẽ phản đối vì / usr / bin là câu trả lời sai. / usr / local / bin được thiết kế đặc biệt cho các tập lệnh "cục bộ" (nghĩa là: những tập lệnh bạn tạo chứ không phải những tập lệnh đi kèm với hệ thống).
Bryan Oakley
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.