创建命令历史管道,如何摆脱ack传递的换行符?

时间:2015-10-23 18:57:53

标签: linux bash

由于超出此问题范围的原因,我手动重新创建bash的历史记录扩展。这就是说,我知道这个功能与另一个bash方法一起存在,但是我构建我的bash历史的方式,每个会话都有自己的会话历史文件,即

HISTFILE="${HOME}/.history/$(date -u +%Y/%m/%d.%H.%M.%S)_${HOSTNAME_SHORT}_$$"

要求我建立自己的历史搜索功能。

我写了以下功能:

function historysearch {
  ack "$1" ~/.history
}

function historycopy {
  mycopy=$(historysearch $1 | ack $2 | rev | cut -d: -f1 | rev)
  echo ${mycopy%\\n} | pbcopy
}

用法如下:

$ historysearch foo


...
~/.history/2015/10/10.14.53.34_user-5_16778
6:hexedit assets/wav/foo_mu.wav
13:hexedit assets/wav/foo_mu.wav
...

确定了我想要的命令后,我

$ historycopy foo 778:13

其中第二个参数是会话历史名称后跟:的最后三位数字,然后是与我想要的命令相关联的数字。以上将我想要的命令复制到我的系统剪贴板。不幸的是,即使我在函数中运行字符串替换命令${mycopy%\\n},它也会使用一个托架。这就是问题......

如果我将命令粘贴到终端,它会立即执行。我更希望将命令复制到剪贴板,以便我能够粘贴它,必要时更改它然后手动执行。

如何在传递给pbcopy的字符串末尾删除换行符?

更新:我的字符串替换命令似乎ack删除了换行符,但后来echo正在添加另一个换行符。已解决-n标志。

1 个答案:

答案 0 :(得分:1)

echo在最后添加换行符。为避免这种情况,请使用echo -n