Automator Workflow ของฉันล้มเหลวเนื่องจากไม่พบคำสั่ง git ในคำสั่ง 'เรียกใช้ Shell Script' ต้องการความช่วยเหลือ


20

ฉันมีเวิร์กโฟลว์ Automator และหนึ่งในการกระทำคือการโคลนที่เก็บ นี่คือรหัสสำหรับการกระทำ 'เรียกใช้เชลล์สคริปต์' คำสั่งถูกเรียกใช้ภายใน Bash เชลล์/bin/bashหากมีความสำคัญ:

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 .

ตอนนี้แอป Automator ทำงานได้ดีบนเครื่องของฉัน เส้นทางสู่คอมไพล์ในเครื่องของฉัน (A Macbook Pro) คือ: /usr/bin/git(ฉันเชื่อว่าฉันติดตั้งคอมไพล์ในเครื่องของฉันผ่าน Xcode)

แต่บนเครื่องเพื่อนร่วมงานของฉัน (เช่น Mac Pro) แอป Automator ล้มเหลว อันที่จริงแล้วผลลัพธ์ของไฟล์ log.txt พูดว่า:bash: git: command not found

ตอนนี้บนเครื่องเพื่อนร่วมงานของฉันเส้นทางสู่ git คือ: usr/local/git/binซึ่งใช่แตกต่างกันเพราะเขาติดตั้ง git ผ่าน Google Git Installer สำหรับ Mac OS X แต่ฉันไม่คิดว่ามันจะสำคัญเพราะในสคริปต์คำสั่ง git ไม่ใช่เส้นทางที่แน่นอนไปยังคำสั่งและเพื่อนร่วมงานของฉันสามารถเรียกใช้คอมไพล์ได้มากกว่าปกติจากสคริปต์ Bash แต่เมื่อเรียกใช้โดยตรงจากเทอร์มินัล

แล้วอะไรล่ะ เหตุใดเวิร์กโฟลว์อัตโนมัติทำงานสำหรับฉัน แต่ไม่ใช่เพื่อเพื่อนร่วมงานของฉัน

ต้องมีบางสิ่งพื้นฐานเกี่ยวกับ Bash หรือ Unix ที่ฉันไม่เข้าใจที่นี่ แต่ฉันหลงทาง

คำตอบ:


35

/usr/local/binสคริปทำงานผ่านทางอัตโนมัติใช้เส้นทางการค้นหาเริ่มต้นซึ่งมักจะไม่รวมถึง ในกรณีของคุณการแก้ไขที่ง่ายก็คือการใส่

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

จุดเริ่มต้นของสคริปต์


ฉันลองจริงหลังจากนั้นไม่นานและมันก็ไม่ทำงานเหมือนกัน
racl101

12

สำหรับวิธีแก้ปัญหาทั่วไปเพิ่มเติมเกี่ยวกับสภาพแวดล้อมการทุบตีในเครื่องอัตโนมัติที่แตกต่างจากของคุณคุณสามารถโหลดโปรไฟล์ทุบตีส่วนตัวของคุณที่บรรทัดแรกของสคริปต์ทุบตีอัตโนมัติ:

source ~/.bash_profile

สิ่งนี้จะทำให้พา ธ และตัวแปรสภาพแวดล้อมอื่น ๆ ที่คุณเคยใช้พร้อมใช้งานจากสคริปต์อัตโนมัติของคุณ


ฉันชอบวิธีนี้มากกว่า ภาพรวมที่ดีของสคริปต์ล็อกอินทุบตีอยู่ที่นี่
Jay

4

ฉันแก้ไขปัญหาเดียวกันของเวิร์กโฟลว์ "บริการ" เดียวกันที่เรียกใช้บนเครื่องที่กำหนดค่าแตกต่างกันโดยตรวจสอบว่าเกิดอะไรขึ้นเมื่อเทอร์มินัลเริ่มเชลล์และในที่สุดก็เพิ่มตัวอย่างต่อไปนี้ที่ด้านบนสุดของการดำเนินการ "Run Shell Script" ทั้งหมด:

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

ครอบคลุมทุกกรณีที่ฉันเคยพบมา


1

หากคุณต้องการให้เวิร์กโฟลว์ทำงานกับทั้งสองเครื่องที่มีคอมไพล์ในตำแหน่งต่าง ๆ ให้เพิ่มแต่ละตำแหน่งไปยังตัวแปร PATH ที่ Patrix พูดถึงคั่นด้วย a :ตามที่อธิบายไว้ที่นี่: https://developer.apple.com/library/mac /documentation/AppleApplications/Conceptual/AutomatorConcepts/Articles/ShellScriptActions.html

ดังนั้นที่ด้านบนสุดของ Workflow Shell Script ของคุณคุณจะเพิ่ม:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.