将命令输出重定向到ksh中的变量和标准输出

时间:2011-10-26 10:42:37

标签: shell scripting ksh

我有一些shell命令。我想将输出写入标准输出并将其保存到变量中。 我想用一个命令来解决它。 我试过这些东西。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:57)

怎么样:

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

答案 1 :(得分:3)

来自@Gary_Barker的答案非常好,但这并不适用于所有系统。

在我们的团队城市,没有一个char-console。 还有一个小问题。

如果我使用

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

ls -1

不同

我的解决方案有效,如果无关紧要,输出来自错误管道。

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

答案 2 :(得分:0)

据我所知,VAR=`ls`;echo $VAR可以,但你不喜欢因为它上面有2个命令。

虽然@ Gary-Barker正在工作,但我没有检查所有系统。如果您遇到T恤或其它问题,您可以建立自己的ALWAYS。

我不知道你是否知道这一点,但你可以在Linux上使用的很多程序只是一堆使用系统上的小二进制代码的代码。 虽然这是真的,但是使用1或2个commans是没有意义的,因为最终的执行实际上是一堆小的。

所以,如果您真正的问题是您只能在目标中编写一个命令,那么您可以编写自己的" app",通过在/ sbin文件夹中创建一个sh脚本而不用它。 sh extension(因为这些都是./或sh前缀,而不是名称)

我写了这个例子:

#!/bin/bash if [ $1 ] then VAR=$*; echo $VAR fi

对于这个例子,我创建了文件/ sbin / varrun。我已经尝试使用成功(正常)输出的后续命令:

  • varrun ls
  • varrun uname
  • varrun uname -a

请注意,我没有使用"报价"在带空格的命令上。