Перенаправить вывод команды в переменный и стандартный вывод в ksh

У меня есть команда оболочки. Я хотел бы записать вывод на стандартный вывод и сохранить его в переменной. Я хотел бы решить это с помощью одной команды. Я пробовал эти вещи.

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

Любая идея?

Ответ 1

Как насчет:

VAR=$(ls | tee /dev/tty)

Ответ 2

отличный ответ от @Gary_Barker, но это невозможно для всех систем.

В нашей команде нет консоли char. И есть еще одна небольшая проблема.

Если я использую

VAR=$(ls -1); echo $VAR

это не то же самое, что ls -1

Мое решение работает, если неважно, что вывод поступает из протокола ошибок.

VAR=$(ls -1 | tee >&2)

Ответ 3

Как я понимаю, 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

Обратите внимание, что я не использовал "кавычки" для команд с пробелами.