感谢一个superuser.com 上的问题,我发现了这个非常方便的rlwrap
工具。
它满足了我的需求(即将命令历史记录添加到另一个命令行工具),但我想知道如何使用它来将命令历史记录添加到“复合”shell 命令,就像典型的
$> while read line; do echo "i read $line"; done
hi
i read hi
^D
当我将while
循环放入 shell 脚本中并像 一样执行它时rlwrap ./whilereadline.sh
,就可以了。
但我想知道我该怎么做没有需要一个额外的文件,有点像
$> rlwrap (while read line; do echo "line: $line"; done)
bash: syntax error near unexpected token `while'
有任何想法吗?
答案1
你有没有尝试过
rlwrap sh -c 'while read line; do echo "i read $line"; done'
rlwrap
需要一个可以运行的命令,而()
语法诱导的子 shell 则不需要。 sh -c ...
然而是一个命令。替换sh
为bash
或您喜欢的任何外壳。
答案2
rlwrap
需要一个程序来执行,它本身无法解释命令。您可以将所需的 shell 代码包装在bash -c
命令中:
rlwrap bash -c 'while read line; do echo "line: $line"; done'
请注意,根据您要使用的代码,引用可能会变得有些难看。