Команда для выполнения другой команды при воспроизведении команды на STDOUT

Нелегко правильно сформулировать вопрос, может быть, это помогает, когда я описываю то, что я хотел бы сделать.

Я хочу выполнить команду и направить ее вывод в инструмент под названием pastebinit который загружает вывод STDOUT в pastebin.

Это работает очень хорошо, однако я хотел бы отправить саму команду поверх нее, но без ввода второй раз.

Есть ли какая-нибудь команда, которую я могу запустить "моя команда" с такой волей

  1. Распечатать "Моя команда" на STDOUT
  2. Выполняет "мою команду"

У меня такое ощущение, что что-то подобное существует, но как бы правильно ни сформулировать такой вопрос, я пока не смог разобраться с Google.

4 ответа

Решение

Вы можете легко написать небольшой скрипт-обертку, чтобы сделать это:

#!/bin/bash

# Start a subshell
(

# Print the command to standard out
echo "Command: $@"
echo

# Run the command as well
$@

# End the subshell, and pipe all standard output from it to pastebinit
) | pastebinit

Сохраните этот файл и выполните команду chmod +x, а затем используйте созданный вами скрипт для запуска команды и pastebinit.

Например:

./run_and_pastebin.sh ls -la /root

Попробуйте команду tee, Эта команда читает из ввода и затем записывает в стандартный вывод и файл.

Пример:
cat mytext.txt | tee pastebininit

Это отправит текст mytext.txt на стандартный вывод и в команду pastebininit,

Команда для запуска команд оболочки sh (оболочка), можно попросить повторить команды для stderr с -x переключатель. Тогда вы можете перенаправить stderr на стандартный вывод.

$ sh -x -c "echo my command" 2>&1
+ echo my command
my command

Побочным эффектом этого решения является то, что команда (в этом примере echo my command) stderr также отправляется на стандартный вывод. Это может быть или не быть проблемой для вас. Также к команде добавляется префикс "+".

Ключ '-x' также будет работать для целых сценариев, повторяя каждую из выполненных команд оболочки.

Вы можете посмотреть мой ответ на другой похожий вопрос:

/questions/584567/bash-kavyichki-udalyayutsya-kogda-komanda-peredaetsya-v-kachestve-argumenta-funk/584576#584576

Я создал там скрипт, который может показывать и выполнять практически "любую" команду (т. Е. Остальная часть строки выполняется "как есть", даже если она включает в себя каналы, сложные параметры, кавычки и т. Д. Это не нормально для многострочных символов). есть, но может быть сделано с несколькими дополнениями, такими как завершающая строка (чтобы узнать, где заканчиваются команды, которые должны быть выполнены), и небольшой скрипт awk, который копирует строки из белья до завершающей строки и помещает его в tmp файл для поиска (подробности см. в сценарии)

Другие вопросы по тегам