Мой сценарий bash на моем MacBook не может получить стандартный вывод 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

И я вижу то, что ожидаю, то есть историю каждого раза, когда я помещал свой локальный репозиторий git в вышестоящий репозиторий.

Но когда я запускаю этот скрипт, в /tmp/hsg_output ничего не появляется.

На самом деле /tmp/hsg_output перезаписывается каждый раз, когда я запускаю «hsg». Так что скрипт правильно пишет в /tmp/hsg_output, но писать ему нечего.

Я также пробовал:

history | grep $1  > /tmp/hsg_output ;

Что тоже не работает (точнее, записывает пустой stdin в файл.

Почему я не могу захватить стандартный вывод 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)


Bash, выполняющий ваш скрипт, считается неинтерактивным, поэтому команда 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