ฉันได้ลองใช้รูปแบบนี้มาหลายสิบรูปแบบ แต่ไม่ได้รับผลลัพธ์:
#!/usr/bin/env bash
echo $1;
history | grep $1 | cat > /tmp/hsg_output ;
cat /tmp/hsg_output;
ฉันสร้างสิ่งนี้บน MacBook Pro ของฉัน ฉันเก็บมันเป็น /usr/local/bin/hsg ฉัน chmod มัน 0777 ถ้าฉันรัน:
which hsg
จากนั้นฉันก็เห็น:
/usr/local/bin/hsg
บรรทัดนี้แสดงข้อโต้แย้งของฉันอย่างถูกต้อง:
echo $1;
หากในหน้าต่างเทอร์มินัลของฉัน ฉันรันบรรทัดนี้ด้วยตัวเอง:
history | grep upstream | cat > /tmp/hsg_output ;
จากนั้นฉันก็สามารถ:
cat /tmp/hsg_output
และฉันเห็นสิ่งที่ฉันคาดหวัง ซึ่งเป็นประวัติศาสตร์ของทุกครั้งที่ฉันได้ผลักดัน repo git ในพื้นที่ของฉันไปที่ repo อัปสตรีม
แต่เมื่อฉันรันสคริปต์นี้ ไม่มีอะไรปรากฏใน /tmp/hsg_output
ที่จริงแล้ว /tmp/hsg_output จะถูกเขียนทับทุกครั้งที่ฉันเรียกใช้ "hsg" ดังนั้นสคริปต์จึงเขียนอย่างถูกต้องไปยัง /tmp/hsg_output แต่ไม่มีอะไรจะเขียน
ฉันได้ลองแล้ว:
history | grep $1 > /tmp/hsg_output ;
ซึ่งยังใช้งานไม่ได้ (หรือเขียน stdin ว่างลงในไฟล์
เหตุใดฉันจึงไม่สามารถจับ stdout ของ grep ได้
history
ไม่ทำงานภายในสคริปต์ ดูที่นี่สำหรับคำถามที่เกี่ยวข้องกับ U&L (คุณไม่จำเป็นต้อง อัฒภาคและบรรทัดสุดท้ายที่คุณลองโดยไม่เพิ่มcat
ควรทำงานได้ดีและสะอาดกว่า) - person Eric Renouf   schedule 01.11.2016