มันใช้งานไม่ได้อย่างไร
alias push-bb="ssh-agent /bin/bash && ssh-add ~/.ssh/bitbucker_rsa && git push"
ฉันคิดว่ามันยกเลิก/bin/bash
บางส่วน?
มันใช้งานไม่ได้อย่างไร
alias push-bb="ssh-agent /bin/bash && ssh-add ~/.ssh/bitbucker_rsa && git push"
ฉันคิดว่ามันยกเลิก/bin/bash
บางส่วน?
คำตอบ:
ฉันเดาว่าคุณคาดหวังว่า&&
จะทำงานแบบนี้:
ssh-agent /bin/bash
พิมพ์ssh-add ~/.ssh/bitbucket_rsa
พิมพ์แต่นั่นไม่ใช่วิธีการทำงาน ชื่อแทนไม่ใช่ "อินพุตคีย์บอร์ดปลอม" และ&&
ไม่ใช่ "คีย์ Enter ปลอม" เปลือกตีความพวกเขาโดยตรงเป็นคำสั่ง ดังนั้นจึงใช้งานได้จริงเช่นนี้:
ssh-agent /bin/bash
ssh-add ~/.ssh/bitbucket_rsa
ดังนั้นนามแฝงจะไม่ "ยกเลิก" ในขั้นตอนที่ 1
มันไม่จริงเริ่มต้นคุณสำเนาใหม่ของ / bin / ทุบตีและตอนนี้คุณมีการทำงานภายในทุบตีทุบตี - พวกเขาเพียงแค่มีลักษณะเหมือนกันกับแต่ละอื่น ๆ เพื่อให้คุณไม่ได้แจ้งให้ทราบว่า แต่ลองมองให้ใกล้ขึ้นps xf
แล้วคุณจะเห็น:
123 xterm
└ 124 bash waiting for its child (124 ssh-agent) to exit
└ 678 ssh-agent waiting for its child (679 bash) to exit
└ 679 bash waiting for keyboard input
ดังนั้นแทนที่จะนามแฝงรอให้ขั้นตอนที่ 1 ให้เสร็จสิ้น
หากคุณพิมพ์exit
ตอนนี้แล้วทุบตีที่สองจะออก (พร้อมกับ ssh-agent) และนามแฝงของคุณจะดำเนินการต่อจากจุดนั้นและคำสั่งที่เหลือทั้งหมดจะถูกตีความในเปลือกทุบตีเดิม
คุณอาจต้องการสิ่งนี้แทน:
alias push-bb="ssh-agent /bin/bash -c 'ssh-add ~/.ssh/bitbucker_rsa && git push'"
ที่นี่แทนที่จะรออินพุตแป้นพิมพ์การทุบตี "ใหม่" จะได้รับคำสั่งให้เรียกใช้คำสั่งที่เหลือสองคำสั่งโดยตรง
&&
จะไม่เพียงถือเอา "รอคำสั่งก่อนหน้าเพื่อออก" อย่างเคร่งครัด- มาตรฐาน;
ทำเช่นนั้น&&
จะรอให้คำสั่งก่อนหน้านี้ออกจากนั้นให้เรียกใช้คำสั่งที่สองเท่านั้นหากคำสั่งแรกที่ส่งคืนด้วยค่า '0'