Possible Duplicate:
bash - automatically capture output of last executed command into a variable
例如
在 Bash shell 中
user:/ & echo "Hello"
Hello
user:/ & date
Sat Mar 17 01:48:45 ICT 2012
如何获取“Hello
”或“Sat Mar 17 01:48:45 ICT 2012
”变量
我的意思是命令 bash shell 的每个输出
这一点的目的,我想得到那些变量,并用它做一些事情。
比如,当 echo Hello 时,我想将字符串反转为 olleH,然后打印出来。
像这样
echo "Hello"
olleH
更多信息
在命令行界面中 ***不在 Shell 脚本中
当我在命令行界面中键入命令 echo、date(或任何命令)时,输出将显示在下一行中。
user:/ & echo "Hello" <br>
Hello
“Hello”变量是 bash shell 的输出。所以,我想将输出 Hello 存储到变量中并传递到“Dictionary Script”
Hello会根据Dictionary Script进行匹配和翻译
Hello = Hi (Just example)
现在Hello翻译成Hi,送回shell打印出来
结果
user:/ & echo "Hello" <br>
Hi
如何获取输出?
我可以公开 Bash Shell 源代码、编辑并重新编译吗?
我可以从 /proc/
BASHPID 中获取吗?
尝试回答编辑过的问题
从您的编辑来看,听起来好像您想让 bash
执行命令,但是 bash 的输出应该传递给“transmogrifier”,它会根据您的想法更改输出。
这不是微不足道的;我不确定它能否用于超过几秒钟的乐趣。
在一个层面上,您需要一个交互式 shell,其标准输出(可能还有标准错误)将转到您的修改器程序:
bash -i 2>&1 | transmogrifier
对于基本的命令行工作,这几乎可以使用,尽管行编辑(即使只有退格键)会有点问题。如果 transmogrifier
正在改变您在键入时看起来正在键入的内容,则命令行编辑变得无法忍受。 (我尝试了 bash -i 2>&1 | tee
,效果出奇的好,但是 tee
只是将它的输入复制到它的输出;我不确定我为什么选择tee
而不是 cat
。不过,一个中断会终止管道;这是您不得不担心的另一件事。)
尝试回答未经编辑的问题
对于Hello
,你最好使用:
var1="Hello"
您还可以使用:
var1=$(echo "Hello")
对于日期,您或多或少必须使用后一种表示法:
var2=$(date)
您现在可以使用这些变量做一些事情,例如:
$ echo "$var1" | rev
olleH
$
请注意,简单的提示符,例如“$
”(对于 Bash 及其亲属)或“%
”(对于 C shell 及其亲属)或“#
'(对于 root)是常规的。
我决定不提反引号的使用,但自从 mgilson评论它们时,它们确实存在,您可能会在较旧的脚本中遇到它们,您不应该在自己的脚本中编写它们。
用于命令替换的 $(...)
表示法在嵌套场景中更简单,例如:
cd $(dirname $(dirname $(which gcc)))/lib
与相同操作的反引号符号相比:
cd `dirname \'dirname \\\`which gcc\\\`\``/lib
(甚至不要考虑将第二行放入 MarkDown 以征求意见!这就是我将其添加到答案中的原因。)