Skrip bash saya di MacBook saya tidak bisa mendapatkan stdout dari grep

Saya telah mencoba selusin variasi ini, tanpa mendapatkan hasil:

#!/usr/bin/env bash
echo $1;
history | grep $1  | cat > /tmp/hsg_output ;
cat /tmp/hsg_output;

Saya membuat ini di MacBook Pro saya. Saya menyimpannya sebagai /usr/local/bin/hsg. Saya chmod 0777. Jika saya menjalankan:

which hsg

Lalu saya melihat:

/usr/local/bin/hsg

Baris ini menampilkan argumen saya dengan benar:

echo $1;

Jika, di jendela terminal saya, saya menjalankan baris ini sendiri:

history | grep upstream  | cat > /tmp/hsg_output ;

Lalu saya bisa:

cat /tmp/hsg_output

Dan saya melihat apa yang saya harapkan, yaitu riwayat setiap kali saya mendorong repo git lokal saya ke repo upstreamnya.

Tetapi ketika saya menjalankan skrip ini, tidak ada yang muncul di /tmp/hsg_output .

Sebenarnya, /tmp/hsg_output ditimpa setiap kali saya menjalankan "hsg". Jadi skripnya ditulis dengan benar ke /tmp/hsg_output, tetapi tidak ada yang perlu ditulis.

Saya juga sudah mencoba:

history | grep $1  > /tmp/hsg_output ;

Yang juga gagal berfungsi (atau lebih tepatnya, menulis stdin kosong ke file.

Mengapa saya tidak dapat menangkap stdout dari grep?


person LRK9    schedule 01.11.2016    source sumber
comment
Seringkali history tidak berfungsi di dalam skrip. Lihat di sini untuk pertanyaan terkait tentang U&L (juga, Anda tidak perlu titik koma dan baris terakhir yang Anda coba tanpa tambahan cat akan berfungsi dengan baik dan lebih bersih)   -  person Eric Renouf    schedule 01.11.2016
comment
Terima kasih, Eric. Tautan lain itu berisi informasi yang saya butuhkan.   -  person LRK9    schedule 01.11.2016


Jawaban (1)


Bash yang menjalankan skrip Anda dianggap non-interaktif, sehingga perintah history diabaikan secara diam-diam.

Jika Anda benar-benar menginginkan fungsi ini:

#!/bin/bash
echo $1
grep $1 $HISTFILE > /tmp/hsg_output
person strobelight    schedule 01.11.2016
comment
Masalahnya adalah buffer file riwayat mungkin tidak dihapus, sehingga mungkin tampak kosong. history -a harus membilasnya, tapi itu harus dilakukan sebelum skrip dijalankan. - person cdarke; 01.11.2016
comment
$HISTFILE sepertinya kosong di Mac saya. - person LRK9; 01.11.2016