Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Для этого вы можете легко написать небольшой сценарий-оболочку:

#!/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 на stdout.

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

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

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

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

https://serverfault.com/a/454535/146493

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