Используйте трубу ("|") в качестве первого символа в команде bash или zsh - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть два простых сценария:

./cpthat

BlueM/cliclick типов на клавиатуре: Shift + Super + A , затем Super + C, к активному iTerm терминалу:

#!/bin/zsh
cliclick kd:shift,cmd t:a ku:shift t:c ku:cmd
pbpaste>$THATF
  • Shift + Super + A выбирает вывод предыдущей команды и
  • Super + C копирует"that" в буфер обмена.
  • pbpaste затем вставляет в файл $ THATF, определенный для всей системы.

./that

#!/bin/zsh
cat $THATF

Распечатывает выходные данные последней команды, сохраненные в cpthat.

(я знаю, что могу запустить $ command > $THATF напрямую, но по другим причинам мне нужно действовать задним числом на вывод команды. Кроме того, это не безопасно для потоков.)

Задача:

Я пытаюсь добраться туда, где я могу начать команда zsh или bash с каналом:

$ |grep -i sometext

Где, по сути, это происходит:

$ that|grep -i sometext

Возможно ли это как-нибудь?

  • Переопределение оператора трубы?
  • zsh config magi c?
  • Я использую zsh, но я открыт для любого другого обходного пути!

Просто для записи: Я в конечном итоге буду направлять весь этот ввод / вывод в и из R (язык программирования); использование пакета magrittr для некоторого (надеюсь) удивительного и очень утомительного трубопровода в Shelluserland.

1 Ответ

2 голосов
/ 29 февраля 2020

Вам не нужно начинать с |. Утилита grep естественно читает STDIN.

Вот надуманный пример:

# /bin/sh
# count_matches
grep $1 | wc -l

$ cat file | count_matches thing

Вы видите, что искомый | находится в самой командной строке, не в сценарии

Аналогично это работает:

$ count_matches thing < file

В первом примере STDIN подключен (через канал) к выходу первой команды (тривиально cat). Во втором, это из самого файла через перенаправление.

Итак, просто избавьтесь от |, и вы должны быть хороши до go.

...