Linux 将输出从一个函数重定向到另一个函数

Linux 将输出从一个函数重定向到另一个函数,linux,bash,Linux,Bash,我试图从用户输入创建一个管道,但是当我重定向输出时,我得到的输出没有换行符,只是一个巨大的单行。下面是代码: 42 function stack(){ 43 echo $(history|tail -1|cut -d" " -f5-|cut -d "|" -f1) >> ~/commands 44 local last=$(tail -1 ~/commands) 45 echo $(eval $last) >> ~/output 46 } 是否有更好的

我试图从用户输入创建一个管道,但是当我重定向输出时,我得到的输出没有换行符,只是一个巨大的单行。下面是代码:

 42 function stack(){
 43  echo $(history|tail -1|cut -d" " -f5-|cut -d "|" -f1) >> ~/commands
 44  local last=$(tail -1 ~/commands)
 45  echo  $(eval $last) >> ~/output
 46 }

是否有更好的方法将输出从该文件传输到文件?Echo似乎破坏了输出。

我不确定削减的目的,但
$()
周围缺少引号,因此输出被IFS拆分为单词

echo "$(eval "$last")"
对于数字不等于3的历史记录条目,
cut-c8-
可能比
cut-d”“-f5-
更安全

另外,如果将
|
用作文本,例如
echo'|'
,则
cut-d“|”-f1
可能会失败

也许您可以在bash手册中查看
甚至是指示符
:在交互式bash中,下面将运行最后一个命令

$ !-1

为什么
echo$(eval$last)
?为什么不干脆
eval$last
?它只能在交互式bash中工作,不能在函数中使用,因为扩展发生在函数定义中