Làm cách nào để thiết lập tập lệnh shell để thực thi từ dock Mac OSX? Có vẻ như chỉ cần tạo một lối tắt sẽ mở tệp trong trình chỉnh sửa của tôi. Có một cờ tôi cần đặt ở đâu đó để bảo nó chạy thay vì mở nó để chỉnh sửa không?
Làm cách nào để thiết lập tập lệnh shell để thực thi từ dock Mac OSX? Có vẻ như chỉ cần tạo một lối tắt sẽ mở tệp trong trình chỉnh sửa của tôi. Có một cờ tôi cần đặt ở đâu đó để bảo nó chạy thay vì mở nó để chỉnh sửa không?
Câu trả lời:
Bạn có thể tạo quy trình làm việc của Automator chỉ với một bước - "Run Shell Script"
Sau đó File > Save As
, và thay đổi Định dạng tệp thành "Ứng dụng". Khi bạn mở ứng dụng, nó sẽ chạy bước Shell Script, thực thi lệnh, thoát sau khi hoàn thành.
Lợi ích của việc này rất đơn giản để thực hiện và bạn có thể dễ dàng lấy dữ liệu nhập của người dùng (giả sử chọn một loạt tệp), sau đó chuyển nó vào đầu vào của tập lệnh shell (cho stdin hoặc làm đối số).
(Máy tự động có trong /Applications
thư mục của bạn !)
open -a SomeAppThing.app --args --etc=2
thì nên tập trung. Ngoài ra, bạn có thể tập trung vào nó bằng Applescript (ví dụ osascript -e 'tell application "Google Chrome" to activate'
)
Nếu bạn không cần cửa sổ Terminal, bạn có thể tạo bất kỳ tệp thực thi nào thành Ứng dụng chỉ bằng cách tạo tập lệnh shell Example
và di chuyển nó sang tên tệp Example.app/Contents/MacOS/Example
. Bạn có thể đặt ứng dụng mới này vào dock của mình như bất kỳ ứng dụng nào khác và thực hiện nó bằng một cú nhấp chuột.
LƯU Ý: tên của ứng dụng phải khớp chính xác với tên tập lệnh. Vì vậy, thư mục cấp cao nhất phải có Example.app
và tập lệnh trong Contents/MacOS
thư mục con phải được đặt tên Example
và tập lệnh phải được thực thi.
Nếu bạn cần hiển thị cửa sổ terminal, tôi không có giải pháp đơn giản. Bạn có thể có thể làm một cái gì đó với Applescript, nhưng điều đó không sạch sẽ lắm.
example.sh.app
, không chỉ example.app
. Bạn sẽ nhận được cảnh báo về ứng dụng bị hỏng nếu những ứng dụng này không khớp
.app
và với cấu trúc đó, nó sẽ được coi là một Ứng dụng thực thi. Nếu bạn muốn xem nội dung của thư mục đó trong Finder, bạn sẽ cần nhấp chuột phải vào thư mục đó và chọn "xem nội dung gói" (vì nhấp đúp vào nó sẽ chạy ứng dụng). Trong Terminal, nó sẽ chỉ là một thư mục. (Tôi không chắc liệu Finder có cho phép bạn đổi tên thư mục thành .app hay không; bạn có thể cần thực hiện việc đổi tên trong Terminal.)
Trên OSX Mavericks:
Làm cho tập lệnh shell của bạn có thể thực thi được:
chmod +x your-shell-script.sh
Đổi tên tập lệnh của bạn để có .app
hậu tố:
mv your-shell-script.sh your-shell-script.app
Đổi tên tập lệnh của bạn trở lại .sh
hậu tố:
mv your-shell-script.app your-shell-script.sh
Bây giờ khi bạn nhấp vào tập lệnh trong thanh công cụ, Cửa sổ đầu cuối sẽ bật lên và thực thi tập lệnh của bạn.
Phần thưởng: Để đóng thiết bị đầu cuối khi tập lệnh của bạn đã hoàn thành, hãy thêm exit 0
vào cuối và thay đổi cài đặt thiết bị đầu cuối thành "đóng vỏ nếu thoát ra sạch" như cách nói trong câu trả lời SO này .
Tôi biết điều này đã cũ nhưng trong trường hợp nó hữu ích cho người khác:
Nếu bạn cần chạy một tập lệnh và muốn thiết bị đầu cuối bật lên để bạn có thể thấy kết quả bạn có thể làm như Abyss Knight đã nói và thay đổi phần mở rộng thành .command. Nếu bạn nhấp đúp chuột vào nó, nó sẽ mở một cửa sổ đầu cuối và chạy.
Tuy nhiên tôi cần điều này để chạy từ automator hoặc appleScript. Vì vậy, để có được điều này để mở một thiết bị đầu cuối mới, lệnh tôi đã chạy từ "run shell script" là "open myShellScript.command" và nó đã mở trong một thiết bị đầu cuối mới.
Miễn là tập lệnh của bạn có thể thực thi được và không có bất kỳ tiện ích mở rộng nào, bạn có thể kéo tập lệnh đó sang bên phải (phía Tài liệu) của Dock và nó sẽ chạy trong cửa sổ đầu cuối khi nhấp vào thay vì mở trình chỉnh sửa.
Nếu bạn muốn có tiện ích mở rộng (như foo.sh), bạn có thể truy cập cửa sổ thông tin tệp trong Finder và thay đổi ứng dụng mặc định cho tập lệnh cụ thể đó bất kể là gì (TextEdit, TextMate, bất kỳ mặc định nào được đặt trên máy tính của bạn tập tin .sh) đến Terminal. Sau đó, nó sẽ chỉ thực hiện thay vì mở trong một trình soạn thảo văn bản. Một lần nữa, bạn sẽ phải kéo nó sang bên phải của Dock.
Tôi nghĩ chủ đề này có thể hữu ích: http://forums.macosxhints.com/archive/index.php/t-70973.html
Để diễn giải, bạn có thể đổi tên nó bằng phần mở rộng .command hoặc tạo AppleScript để chạy shell.
Như joe đã đề cập, việc tạo tập lệnh shell và sau đó tạo tập lệnh applescript để gọi tập lệnh shell, sẽ thực hiện điều này và khá tiện dụng.
Tạo tập lệnh shell của bạn trong trình soạn thảo văn bản yêu thích của bạn, ví dụ:
mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"
(điều này chạy chương trình thực thi w32, sử dụng khung đơn sắc)
Lưu tập lệnh shell, ví dụ của tôi "StartKeepass.sh"
Mở AppleScript Editor và gọi script shell
do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges
do shell script
- Lệnh applescript để gọi các lệnh shell bên ngoài"sh ...."
- đây là tập lệnh shell của bạn (đường dẫn đầy đủ) được tạo ở bước một (bạn cũng có thể chạy các lệnh trực tiếp, tôi có thể bỏ qua tập lệnh shell và chỉ chạy lệnh mono của tôi ở đây)user name
- khai báo applescript bạn muốn chạy lệnh với tư cách là người dùng cụ thể"<enter username here>
- thay thế bằng tên người dùng của bạn (giữ dấu ngoặc kép) ex "josh"password
- tuyên bố mật khẩu mật khẩu của bạn"<enter password here>"
- thay thế bằng mật khẩu của bạn (giữ dấu ngoặc kép) ex "mypass"with administrative privileges
- tuyên bố bạn muốn chạy như một quản trị viênlưu applescript của bạn dưới dạng filename.scpt, trong trường hợp của tôi RunKeepass.scpt
lưu dưới dạng ... applescript của bạn và thay đổi định dạng tệp thành ứng dụng, dẫn đến RunKeepass.app trong trường hợp của tôi
Sao chép tệp ứng dụng của bạn vào thư mục ứng dụng của bạn
Trong Trình chỉnh sửa tập lệnh:
do shell script "/full/path/to/your/script -with 'all desired args'
"
Lưu dưới dạng một gói ứng dụng.
Miễn là tất cả những gì bạn muốn làm là có được hiệu ứng của kịch bản, điều này sẽ hoạt động tốt. Bạn sẽ không thấy STDOUT hoặc STDERR.