我正在尝试设置一个便利功能来解决问题,因为我不小心将我的大写锁定,并尝试运行一些区分大小写的工具。
e.g。我偶尔会发现自己键入MAKE DEBUG
而不是make debug
。
我现在所拥有的非常简单:alias MAKE="make"
并编辑makefile以复制规则,例如DEBUG: debug
。
我更喜欢一种适用于参数的解决方案,而无需修改所涉及的工具。
答案 0 :(得分:2)
如果你只想让makefile中的所有内容都是小写的,你可以使用GNU sed来小写整个内容:
sed -i 's/.*/\L&/' Makefile
您还可以构建一个更具辨别力的sed脚本,但\L replacement escape是您的朋友。
由于您使用tr标记了问题,因此您可能还需要tr解决方案。它有点麻烦,因为tr不会进行就地翻译,但你可以随机播放临时文件或使用 moreutils 中的海绵。例如:
tr '[[:upper:]]' '[[:lower:]]' < Makefile | sponge Makefile
答案 1 :(得分:1)
这涉及一个脚本,但避免了我之前尝试的Ctrl-D问题:
对于每个命令,都有一个别名,如
alias MAKE="casefixer make"
然后是我在/usr/local/bin/casefixer
创建的以下文件:
#!/bin/bash
command=`echo $1 | tr '[:upper:]' '[:lower:]'` # convert 1st arg to lowercase, it's the command to invoke
shift # remove 1st arg from $*
$command `echo "$*" | tr '[:upper:]' '[:lower:]'` # convert arguments to lowercase, and invoke the command with them
答案 2 :(得分:1)
使用@Clayton Hughes的casefixer
解决方案,这里有一个解决方案可以处理有趣的事情,比如参数中的空格($*
搞砸了):
casefixer() { eval "$(printf "%q " "$@" | tr '[:upper:]' '[:lower:]')"; }
alias MAKE='casefixer make'
注意:eval
是一件相当危险的事情,因为really bizarre bugs而造成了当之无愧的声誉。但是,在这种情况下,双引号和编码命令及其参数与%q 的组合应该可以防止出现问题。至少,我找不到一个意外的事情。
答案 3 :(得分:0)
这是一个解决方案,虽然它并不完美:
alias MAKE="make `tr '[:upper:]' '[:lower:]`"
它有效,但有一个不幸的问题,我需要按Ctrl-D在任何事情开始执行之前发送EOF。
答案 4 :(得分:0)
readline
命令“downcase-word”(默认绑定到M-u
)值得一提。假设您键入“MAKE DEBUG”。如果在返回之前捕获它,可以使用C-a
将光标移动到行的开头。 (否则,请先使用向上箭头返回命令)。然后,每次点击M-u
时,光标后面的单词将变为小写,光标将移动到下一个单词的开头。
这有点费力,而且我没有办法立刻小写整行。也许有人可以改进这一点。