Ответ 1
Как насчет:
VAR=$(ls | tee /dev/tty)
У меня есть команда оболочки. Я хотел бы записать вывод на стандартный вывод и сохранить его в переменной. Я хотел бы решить это с помощью одной команды. Я пробовал эти вещи.
ls > $VAR # redirects the output to file which name is stored in $VAR
ls | tee -a $VAR # writes to standard output as well as in file which name is stored in $VAR
VAR=`ls` # output into $VAR, but it is not sent to standard output
VAR=`ls`;echo $VAR # ok, it works but these are two commands
Любая идея?
Как насчет:
VAR=$(ls | tee /dev/tty)
отличный ответ от @Gary_Barker, но это невозможно для всех систем.
В нашей команде нет консоли char. И есть еще одна небольшая проблема.
Если я использую
VAR=$(ls -1); echo $VAR
это не то же самое, что ls -1
Мое решение работает, если неважно, что вывод поступает из протокола ошибок.
VAR=$(ls -1 | tee >&2)
Как я понимаю, VAR=`ls`;echo $VAR
в порядке, но вам не нравится, потому что на нем есть две команды.
Пока работает Gary-Barker, я не проверял все системы. Если у вас возникли проблемы с тройником или другим, вы можете создавать свои собственные ВСЕГДА.
Я не знаю, знаете ли вы это, но многие программы, которые вы можете использовать в Linux, - это всего лишь куча кода, использующего небольшие двоичные файлы в системе. Хотя это верно, нет смысла использовать 1 или 2 комманды, потому что окончательное исполнение - действительно множество маленьких.
Итак, если ваша реальная проблема заключается в том, что вы можете написать только одну команду в своей цели, вы можете написать свое собственное приложение, создав папку sh script in/sbin, оставив ее без расширения .sh( потому что они исключены префикс./или sh, а не по имени)
Я написал это как пример:
#!/bin/bash
if [ $1 ]
then
VAR=$*; echo $VAR
fi
В этом примере я сделал файл /sbin/varrun. Я пробовал его с помощью команд folling с успешным (нормальным) выходом:
varrun ls
varrun uname
varrun uname -a
Обратите внимание, что я не использовал "кавычки" для команд с пробелами.