シェルコマンドがあります。出力を標準出力に書き込み、変数にも保存したいと思います。 1つのコマンドで解決したいと思います。私はこれらのことを試しました。
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-consoleはありません。そして、別の小さな問題があります。
私が使用する場合
VAR=$(ls -1); echo $VAR
_ls -1
_と同じではありません
私の解決策は、問題がなければ、出力がエラーパイプから来るということです。
VAR=$(ls -1 | tee >&2)
私が理解したように、VAR=`ls`;echo $VAR
は問題ありませんが、2つのコマンドがあるので気に入らないでしょう。
@ Gary-Barkerが動作している間、すべてのシステムをチェックしているわけではありません。 Tシャツなどで問題が発生した場合は、常に独自に構築できます。
あなたがそれを知っているかどうかはわかりませんが、Linuxで使用できるプログラムの多くは、システム上の小さなバイナリを使用する単なるコードの集まりです。これは事実ですが、最終的な実行は実際には小さなものの集まりであるため、1つまたは2つのコンマンを使用する意味はありません。
したがって、実際の問題がターゲットで1つのコマンドしか書けない場合、/ sbinフォルダー内のshスクリプトを.sh拡張子なしで残すことにより、独自の「アプリ」を書くことができます(これらは./またはshプレフィックス。名前ではありません)
例としてそれを書きました:
#!/bin/bash if [ $1 ] then VAR=$*; echo $VAR fi
この例では、/ sbin/varrunファイルを作成しました。私は成功した(通常の)出力で次のコマンドを試してみました:
varrun ls
varrun uname
varrun uname -a
スペースを含むコマンドでは「引用符」を使用していないことに注意してください。