Đang thực thi Shell ScScript từ OS X Dock?


160

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?


2
nên +1 chỉ cho hình đại diện, mặc dù tôi cũng thích chủ đề này.
Matt Bannert

Bạn có thể muốn xem xét các câu trả lời được chấp nhận cho câu trả lời thứ 2 @Wilco. Tôi nghĩ đó là một câu trả lời tốt hơn.
Xám

Câu trả lời:


190

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 /Applicationsthư mục của bạn !)

Ví dụ quy trình làm việc


6
@dbr, trình tạo nút GUI! :) Đùa thôi, đó là một gợi ý hay!
willasaywhat

Vâng, đó là một gợi ý tuyệt vời :) Tôi thậm chí đã viết các hành động của Automator cho một số ứng dụng của mình và tôi vẫn quên nó trong những lúc như thế này :)
Jason Coco

Tôi không thể làm việc này với nohup, la "nohup / usr / bin / myscript &; disown -a && exit 0". Tôi cần ứng dụng / quy trình làm việc để chạy tập lệnh và thoát ngay lập tức. Có ý kiến ​​gì không? :-)
giờ trở lại

3
@martineau Nếu bạn mở ứng dụng bằng cách thực hiện open -a SomeAppThing.app --args --etc=2thì 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')
dbr

1
Lưu ý: nếu tập lệnh của bạn khởi chạy một ứng dụng GUI sẽ vẫn mở trong một thời gian, điều này sẽ hiển thị biểu tượng bánh răng liên tục quay trong thanh tác vụ cho đến khi ứng dụng được đóng. Một cách giải quyết là thêm `&> / dev / null &` vào dòng khởi chạy của tập lệnh để Automator không chờ đợi.
ewall

50

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 Examplevà 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.appvà tập lệnh trong Contents/MacOSthư mục con phải được đặt tên Examplevà 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.


1
Bạn không biết liệu có cách nào dễ dàng để các tệp được chuyển qua làm đối số cho tập lệnh shell không? Đối với các tệp được mở bằng cách sử dụng "mở bằng ...".
Fuzzy76

9
Đối với bất kỳ ai đang cố gắng làm điều này - 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, nó thực sự phải được 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
Kip

1
Để làm rõ - Tôi là một OSX noob - ý bạn là chỉ cần tạo một cấu trúc thư mục giống như cấu trúc trong ví dụ của bạn với tệp tập lệnh được đặt trong đó như được hiển thị?
martineau

2
@martineau Vâng, điều đó đúng. Nếu bạn tạo một thư mục có tên kết thúc .appvà 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.)
Jeremy Banks

1
Tôi vừa thử điều này và đã nhận được một lỗi trong El Capitan (10.11): "Bạn không thể mở .... vì các ứng dụng powerpc không còn được hỗ trợ." : D Điều đó khá thú vị!
AllenH

26

Trên OSX Mavericks:

  1. Tạo kịch bản shell của bạn.
  2. Làm cho tập lệnh shell của bạn có thể thực thi được:

    chmod +x your-shell-script.sh
  3. Đổi tên tập lệnh của bạn để có .apphậu tố:

    mv your-shell-script.sh your-shell-script.app
  4. Kéo tập lệnh vào dock OSX.
  5. Đổi tên tập lệnh của bạn trở lại .shhậu tố:

    mv your-shell-script.app your-shell-script.sh
  6. Nhấp chuột phải vào tệp trong Finder và nhấp vào tùy chọn "Nhận thông tin".
  7. Ở dưới cùng của cửa sổ, đặt tập lệnh shell để mở với thiết bị đầu cuối.

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 0và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 .


Thật tuyệt, điều này làm việc cho tôi, bất kỳ cách nào để có cơ hội biểu tượng tôi tự hỏi. FYI: Ngoài ra, bước 7 cũng đề cập đến tệp chứ không phải mục menu ...
Mike Q

cách tốt đẹp chỉ cần tất cả .sh với thiết bị đầu cuối mở.
iHTCboy

@ stiemannkj1, Điều này có hiển thị biểu tượng trong khi ứng dụng đang chạy không? Có cách nào để che giấu nó?
Pacerier

@Pacerier, xin lỗi, tôi không dùng OSX nữa (đã chuyển sang Linux :)). Bạn có thể muốn thử câu trả lời của Jeremy Bank . Tôi không có ý tưởng nào khác và vì tôi không có OSX, tôi không thể kiểm tra hoặc lộn xộn với bất cứ điều gì để thử và hiển thị / ẩn biểu tượng ..
stiemannkj1

17

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.


tuyệt vời, cảm ơn Bây giờ tất cả các nhu cầu muốn làm cho nó trở thành một giải pháp hoàn hảo sẽ là một cách để đóng cửa sổ đầu cuối khi kịch bản hoàn thành.
Peter M

1
tốt nếu bạn có cửa sổ đóng khi thoát được chọn trong tùy chọn đầu cuối, bạn có thể thêm lệnh thoát vào tập lệnh của mình và bạn sẽ có những gì bạn muốn.
Jason Tholstrup

7

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.


1
LƯU Ý : Điều này hoạt động giống như một nhà vô địch trong OS X 10.10 Yosemite. Tôi không thể nhận xét về 10.9
Bryan Ash

1
Hoạt động vào ngày 10.11. Cảm ơn bạn!
Yassine Imounachen

Hoạt động vào ngày 10.12 cũng vậy! Có lẽ nhận xét của tôi về 10.9 là không chính xác, nhưng tôi nhận thấy rằng bạn cần đảm bảo rằng bạn kéo nó vào phần của dock bên dưới dải phân cách. Tôi không có cách nào để kiểm tra lại 10.9 không may.
stiemannkj1

Không cần thêm nó vào Dock. Nó có thể được chạy từ máy tính để bàn. Nhưng không thể có phần mở rộng. Làm cho nó thực thi và bạn chỉ cần nhấp đúp chuột. Đây là tùy chọn đơn giản nhất tôi từng thấy.
Giàu Apodaca

5

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.


Ít nhất trên Snow Leopard, việc thêm phần mở rộng .command vào tập lệnh sẽ khiến nó chạy trong thiết bị đầu cuối nếu bạn bấm đúp vào nó, nhưng vì một số lý do, bạn vẫn không thể kéo nó vào thanh công cụ. Mặc dù vậy, đề xuất của dbr và Jeremy đều có hiệu quả với tôi.
Jo Liss

5

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.

Shell Script

  1. 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)

  2. Lưu tập lệnh shell, ví dụ của tôi "StartKeepass.sh"

Tập lệnh Apple

  1. 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ên

Tạo .APP của bạn

  1. lưu applescript của bạn dưới dạng filename.scpt, trong trường hợp của tôi RunKeepass.scpt

  2. 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

  3. Sao chép tệp ứng dụng của bạn vào thư mục ứng dụng của bạn


5

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.


2
Tôi sẽ đề nghị: "Lưu dưới dạng ứng dụng BUNDLE". Các gói khởi chạy nhanh hơn nhiều so với các ứng dụng.
e.James

-3

Ai đó đã viết ...

Tôi chỉ đặt tất cả các tệp kết thúc bằng ".sh" để mở bằng Terminal. Nó hoạt động tốt và bạn không phải thay đổi tên của từng tập lệnh shell mà bạn muốn chạy.

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.