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?
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 tambahancat
akan berfungsi dengan baik dan lebih bersih) - person Eric Renouf   schedule 01.11.2016