rm
的GNU版本有一个很酷的-I标志。从联机帮助页:
-I prompt once before removing more than three files, or when removing recursively. Less
intrusive than -i, while still giving protection against most mistakes
Macs不要
$ rm -I scratch
rm: illegal option -- I
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
有时人们在Mac上安装了coreutils
(GNU版本),有时他们不会。有没有办法在继续之前检测此命令行标志?我希望在我的bash_profile中有这样的东西:
if [ has_gnu_rm_version ]; then
alias rm="rm -I"
fi
答案 0 :(得分:6)
strings /bin/rm | grep -q 'GNU coreutils'
如果$?是0,它是coreutils
答案 1 :(得分:5)
我建议不要开始这条路。将脚本定位为尽可能可移植,并且只依赖于您可以依赖的标志/选项/行为。 Shell脚本很难 - 为什么要添加更多错误空间?
要了解我的想法,请查看Ryan Tomayko's Shell Haters talk。他还有一个组织良好的页面,其中包含POSIX descriptions of shell features and utilities的链接。例如,这里是rm。
答案 2 :(得分:4)
你总是可以通过--version
向rm询问其版本,并检查它是否显示 gnu 或 coreutils :
rm --version 2>&1 | grep -i gnu &> /dev/null
[ $? -eq 0 ] && alias rm="rm -I"
答案 3 :(得分:3)
我会说在临时文件上测试rm -I
的输出,如果它通过则使用别名
touch /tmp/my_core_util_check
if rm -I /tmp/my_core_util_check > /dev/null 2>&1 ; then
alias rm="rm -I"
else
rm /tmp/my_core_util_check;
fi
答案 4 :(得分:0)
这样的事情怎么样?
#!/bin/bash
rm -I &> /dev/null
if [ "$?" == "0" ]; then
echo coreutils detected
else
echo bsd version detected
fi