Quy trình công cụ tự động hóa của tôi không thành công vì không tìm thấy lệnh git trong lệnh 'Run Shell Script'? Cần giúp đỡ


20

Tôi có một quy trình làm việc của Automator và một trong những hành động là sao chép một kho lưu trữ. Đây là mã cho hành động 'Run Shell Script'. Lệnh được chạy trong shell Bash /bin/bashnếu điều đó quan trọng:

SOURCEDIR="${3/\/Volumes/}"

cd "$2"
REPOURL="bob@somedomain.com:$SOURCEDIR"
WORKINGDIR="$1"

# Capture any errors with cloning process in log file
git clone "$REPOURL" "$WORKINGDIR" &> ./log.txt

// For debugging
echo "exit code: $?"
echo "PPID: $PPID"

open .

Bây giờ Ứng dụng Automator chạy tốt trên máy của tôi. Đường dẫn đến git trên máy của tôi (A Macbook Pro) là: /usr/bin/git(Tôi tin rằng tôi đã cài đặt git trên máy của mình thông qua Xcode)

Nhưng trên máy của đồng nghiệp của tôi (Cũng là Mac Pro), Ứng dụng Automator không thành công. Trong thực tế, đầu ra của tệp log.txt nói:bash: git: command not found

Bây giờ trên máy của đồng nghiệp của tôi, đường dẫn đến git là : usr/local/git/bin, trong đó, vâng, khác với vì anh ta đã cài đặt git thông qua Trình cài đặt Git của Google cho Mac OS X, nhưng tôi không nghĩ nó có vấn đề vì trong kịch bản lệnh git không phải là đường dẫn tuyệt đối đến lệnh và hơn nữa đồng nghiệp của tôi có thể chạy git bình thường từ tập lệnh Bash nhưng khi được gọi trực tiếp từ Terminal.

Vì vậy, những gì cho? Tại sao quy trình làm việc của máy tự động làm việc cho tôi mà không phải cho đồng nghiệp của tôi?

Phải có một cái gì đó cơ bản về Bash hoặc Unix mà tôi không hiểu ở đây nhưng tôi đã lạc lối.

Câu trả lời:


35

Các tập lệnh chạy qua Automator sử dụng đường dẫn tìm kiếm mặc định thường không bao gồm /usr/local/bin. Trong trường hợp của bạn, một sửa chữa dễ dàng sẽ được đặt

export PATH=/usr/local/bin:$PATH

ở đâu đó ở đầu kịch bản.


Tôi thực sự đã thử ngay sau đó và nó cũng không hoạt động.
racl101

12

Để có giải pháp tổng quát hơn cho môi trường bash trong trình tự động hóa khác với chính bạn, bạn có thể chỉ cần tải hồ sơ bash cá nhân của bạn ở dòng đầu tiên của tập lệnh bash của trình tự động hóa:

source ~/.bash_profile

Điều này sẽ làm cho đường dẫn và bất kỳ biến môi trường nào khác mà bạn đã sử dụng có sẵn từ tập lệnh tự động hóa của bạn.


Tôi rất thích giải pháp này. Một tổng quan tốt về các tập lệnh đăng nhập bash có ở đây
Jay

4

Tôi đã giải quyết cùng một vấn đề của cùng một luồng công việc "dịch vụ" đang chạy trên các máy được cấu hình khác nhau bằng cách kiểm tra xem điều gì xảy ra khi thiết bị đầu cuối khởi động trình bao và cuối cùng thêm đoạn mã sau vào đầu tất cả các hành động "Run Shell Script" của tôi:

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi
if  [ -f "$HOME"/.profile ]; then
    source "$HOME"/.profile
elif [ -f "$HOME"/.bash_profile ]; then
    source "$HOME"/.bash_profile
elif [ -f "$HOME"/.bashrc ]; then
    source "$HOME"/.bashrc
fi

Điều này bao gồm tất cả các trường hợp tôi đã gặp cho đến nay.


1

Nếu bạn muốn Workflow hoạt động trên cả hai máy có git ở các vị trí khác nhau, thì hãy thêm từng vị trí vào biến PATH mà patrix đã đề cập, phân tách bằng a :, như được giải thích tại đây: https://developer.apple.com/l Library / mac /documentation/AppleAppluggest/Conceptual/AutomatorCon accept / Articles / ShScriptScriptActions.html

Vì vậy, ở đầu tập lệnh Workflow Shell của bạn, bạn sẽ thêm:

PATH=/usr/bin:/usr/local/bin export PATH

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.