Правильно сформулировать вопрос непросто, может быть, это помогает, когда я описываю, чем бы хотел заняться.
Я хочу выполнить команду и передать ее вывод в инструмент под названием pastebinit
который загружает вывод STDOUT в pastebin.
Это работает очень хорошо, однако я хотел бы отправить саму команду поверх нее, но без ввода ее во второй раз.
Есть ли какая-то команда, с которой я могу запустить "мою команду"
У меня такое ощущение, что что-то подобное существует, но, как бы сложно ни было правильно сформулировать такой вопрос, я пока не смог откопать его с помощью 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 файл для получения. (подробности см. в сценарии)