Я пробовал дюжину вариантов этого, но не получил результатов:
#!/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?
history
не работает внутри скрипта. См. здесь соответствующий вопрос о U&L (также вам не нужно точки с запятой и последняя строка, которую вы пытаетесь сделать без дополнительныхcat
, должна работать нормально и быть чище) - person Eric Renouf   schedule 01.11.2016