在 bash: one-liner 模板中更快编码
faster coding in bash: one-liner templates
使用 bash
通常很乏味,尤其是因为经常会有一些开销。
我想用某种宏加快我的 bash 编码速度,因为我不是最快的打字员。
一个用例是将 a.out
复制到某些(子)目录:
mkdir subdir{1..5}
echo "123" > a.out
for d in $(ls -d subdir*); do cd $d; pwd; cp ../a.out .; cd ..;done
我重复使用 body
for d in $(ls $PATTERN); do $COMMAND ;done
在更广泛的背景下有一些 $COMMAND
。一种加速选项是 bash 函数。
function loop () {
for d in $(ls ); do ;done
}
但是由于bash有一个auto-completion机制,还有很棒的ctrl+r搜索,我想知道是否有一个聪明的技巧利用这个机制让body出现直接在 bash 提示符下。理想的情况是在 bash 中键入一些预定义的关键字,例如 loop
,然后按 TAB(或其他一些快捷键)body
for d in $(ls $PATTERN); do $COMMAND ;done
出现在bash中(并且仍然可以被操纵)。
为了弄清楚我在想什么:这是像 vscode 这样的编辑器的标准功能,我可以在其中键入 func
,出现一个下拉菜单,我可以 select 一些 body 得到 function ### (###) {###}
写出来。
这样的宏肯定也会在其他情况下帮助我,每当我必须多次使用相同的 body 时。
有什么想法吗? 你如何处理bash中提到的开销?
正在为 for
关键字定义完成函数?
#!/bin/bash
_for() {
COMPREPLY=()
if [[ ${#COMP_WORDS[@]} == 2 ]]
then
COMPREPLY=( 'd in PATTERN; do COMMAND; done' )
fi
}
complete -F _for for
然后尝试输入:for
Tab
使用 bash
通常很乏味,尤其是因为经常会有一些开销。
我想用某种宏加快我的 bash 编码速度,因为我不是最快的打字员。
一个用例是将 a.out
复制到某些(子)目录:
mkdir subdir{1..5}
echo "123" > a.out
for d in $(ls -d subdir*); do cd $d; pwd; cp ../a.out .; cd ..;done
我重复使用 body
for d in $(ls $PATTERN); do $COMMAND ;done
在更广泛的背景下有一些 $COMMAND
。一种加速选项是 bash 函数。
function loop () {
for d in $(ls ); do ;done
}
但是由于bash有一个auto-completion机制,还有很棒的ctrl+r搜索,我想知道是否有一个聪明的技巧利用这个机制让body出现直接在 bash 提示符下。理想的情况是在 bash 中键入一些预定义的关键字,例如 loop
,然后按 TAB(或其他一些快捷键)body
for d in $(ls $PATTERN); do $COMMAND ;done
出现在bash中(并且仍然可以被操纵)。
为了弄清楚我在想什么:这是像 vscode 这样的编辑器的标准功能,我可以在其中键入 func
,出现一个下拉菜单,我可以 select 一些 body 得到 function ### (###) {###}
写出来。
这样的宏肯定也会在其他情况下帮助我,每当我必须多次使用相同的 body 时。
有什么想法吗? 你如何处理bash中提到的开销?
正在为 for
关键字定义完成函数?
#!/bin/bash
_for() {
COMPREPLY=()
if [[ ${#COMP_WORDS[@]} == 2 ]]
then
COMPREPLY=( 'd in PATTERN; do COMMAND; done' )
fi
}
complete -F _for for
然后尝试输入:for
Tab