Automator Workflow saya gagal karena gagal menemukan perintah git di dalam perintah 'Jalankan Shell Script'? Butuh bantuan

20

Saya memiliki alur kerja Automator dan salah satu tindakannya adalah mengkloning repositori. Berikut kode untuk tindakan 'Jalankan Shell Script'. Perintah dijalankan dalam Bash shell /bin/bashjika itu penting:

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

cd "$2"
REPOURL="[email protected]:$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 .

Sekarang Aplikasi Automator berjalan dengan baik di mesin saya. Path ke git di komputer saya (A Macbook Pro) adalah: /usr/bin/git(Saya yakin saya menginstal git di komputer saya melalui Xcode)

Tetapi pada mesin rekan kerja saya (Juga Mac Pro) Aplikasi Automator gagal. Bahkan, output dari file log.txt mengatakan:bash: git: command not found

Sekarang di mesin rekan kerja saya jalur untuk git adalah:, usr/local/git/binyang, ya, berbeda karena dia menginstal git melalui Pemasang Google Git untuk Mac OS X, tapi saya tidak berpikir itu penting karena dalam skrip perintah git bukan path absolut ke perintah dan lebih jauh rekan kerja saya dapat menjalankan git secara normal dari skrip Bash tetapi ketika dipanggil langsung dari Terminal.

Jadi apa yang menyebabkannya? Mengapa alur kerja automator bekerja untuk saya tetapi tidak untuk rekan kerja saya?

Pasti ada sesuatu yang mendasar tentang Bash atau Unix yang saya tidak mengerti di sini tapi saya bingung.

racl101
sumber

Jawaban:

35

Script dijalankan melalui Automator menggunakan jalur pencarian default yang biasanya tidak termasuk /usr/local/bin. Dalam kasus Anda, perbaikan mudah akan dilakukan

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

suatu tempat di awal naskah.

nohillside
sumber
Saya benar-benar mencoba tak lama kemudian dan tidak berhasil juga.
racl101
12

Untuk solusi yang lebih umum untuk lingkungan bash di automator berbeda dari milik Anda, Anda cukup memuat profil bash pribadi Anda di baris pertama skrip bash automator:

source ~/.bash_profile

Ini akan membuat path dan variabel lingkungan lain yang biasa Anda gunakan tersedia dari skrip automator Anda.

Daniel Schlaug
sumber
Saya lebih suka solusi ini. Tinjauan yang baik tentang skrip login bash ada di sini
Jay
4

Saya memecahkan masalah yang sama dari alur kerja "layanan" yang sama dijalankan pada mesin yang dikonfigurasi berbeda dengan memeriksa apa yang terjadi ketika terminal memulai shell dan akhirnya menambahkan potongan berikut ke atas semua tindakan "Jalankan Shell Script" saya:

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

Ini mencakup semua kasus yang saya temui sejauh ini.

silverdr
sumber
1

Jika Anda ingin Workflow bekerja pada kedua mesin yang memiliki git di lokasi yang berbeda, kemudian tambahkan setiap lokasi ke variabel PATH yang disebutkan patrix, dipisahkan oleh a :, seperti yang dijelaskan di sini: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

Jadi, di bagian paling atas dari Workflow Shell Script Anda, Anda akan menambahkan:

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

Monfresh
sumber