วิธีการทำนามแฝง ssh-add / bin / bash ใน bashrc?


0

มันใช้งานไม่ได้อย่างไร

alias push-bb="ssh-agent /bin/bash && ssh-add ~/.ssh/bitbucker_rsa && git push"

ฉันคิดว่ามันยกเลิก/bin/bashบางส่วน?

คำตอบ:


1

ฉันเดาว่าคุณคาดหวังว่า&&จะทำงานแบบนี้:

  1. แกล้งทำเป็นssh-agent /bin/bashพิมพ์
  2. แกล้งทำเป็นว่าEnterถูกกด
  3. แกล้งทำเป็นssh-add ~/.ssh/bitbucket_rsaพิมพ์
  4. ทำเป็นว่าEnterถูกกด ...

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

  1. วิ่ง ssh-agent /bin/bash
  2. รอให้มันออก
  3. วิ่ง ssh-add ~/.ssh/bitbucket_rsa
  4. รอให้มันออก ...

ดังนั้นนามแฝงจะไม่ "ยกเลิก" ในขั้นตอนที่ 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'"

ที่นี่แทนที่จะรออินพุตแป้นพิมพ์การทุบตี "ใหม่" จะได้รับคำสั่งให้เรียกใช้คำสั่งที่เหลือสองคำสั่งโดยตรง


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