สคริปต์ทุบตีของฉันบน MacBook ไม่สามารถรับ stdout ของ grep ได้

ฉันได้ลองใช้รูปแบบนี้มาหลายสิบรูปแบบ แต่ไม่ได้รับผลลัพธ์:

#!/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 ได้


person LRK9    schedule 01.11.2016    source แหล่งที่มา
comment
บ่อยครั้ง history ไม่ทำงานภายในสคริปต์ ดูที่นี่สำหรับคำถามที่เกี่ยวข้องกับ U&L (คุณไม่จำเป็นต้อง อัฒภาคและบรรทัดสุดท้ายที่คุณลองโดยไม่เพิ่ม cat ควรทำงานได้ดีและสะอาดกว่า)   -  person Eric Renouf    schedule 01.11.2016
comment
ขอบคุณเอริค ลิงก์อื่นนั้นมีข้อมูลที่ฉันต้องการ   -  person LRK9    schedule 01.11.2016


คำตอบ (1)


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

หากคุณต้องการฟังก์ชันนี้จริงๆ:

#!/bin/bash
echo $1
grep $1 $HISTFILE > /tmp/hsg_output
person strobelight    schedule 01.11.2016
comment
ปัญหาคือบัฟเฟอร์ไฟล์ประวัติอาจไม่ถูกล้าง ดังนั้นจึงอาจดูเหมือนว่างเปล่า history -a ควรล้างข้อมูล แต่ต้องทำ ก่อน สคริปต์จึงจะทำงาน - person cdarke; 01.11.2016
comment
ดูเหมือนว่า $HISTFILE จะว่างเปล่าบน Mac ของฉัน - person LRK9; 01.11.2016