技术解析

bash 命令的选项无法加在句尾是怎么回事?
0
1975-02-25 11:07:17
idczone

比如以前我可以用 rm dirname -r 或 rm -r dirname 来删除目录 dirname 但是突然变成只能用 rm -r dirname 了,把-r 放在句尾无法执行

有人说需要安装 coreutil ,这个东西我已经通过 brew 安装了


GNU 的 utils 通常能接受选项在最后, BSD 系的基本不行.

Brew 什么鬼

我是 mac os ,用 brew ,而不是 apt-get

~~那就不要放在后面呗,这种事情在于命令行解析是如何实现的吧,比如有些命令的有些参数就是不能放在某个位置,或者特定的参数一定要放在最后之类的。。


Mac OS X 和 Linux 没什么关系,你发错区了

你需要修改 $PATH, 把 coreutils 的 bin 目录放到 /bin 前面.

brew 装的 coreutil ,命令行需要使用 g 前缀,比如 grm, gawk 等等。
"All commands have been installed with the prefix 'g'."

要不要重新包装一下 rm

感觉最好还是按命令的--help 来吧,而且一般命令参数都要放在最后操作对象的前面,放在最后好难受(虽然我也经常写了一半发现忘了加参数了)。
另外 rm dir -r 这样写不会理解成我想删 dir 和一个叫"-r"的文件吗?
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file

答主确定 rm 是 bash 命令?

这与具体的可执行文件有关吧,例如 macOS 下 curl 可以接受句尾选项。

which rm

就因为这个所以全部完成 GNU 版( gmv 、 grm 、 gcp )了。临时想起来一个参数必须退到前面,感觉很不爽。另外如果 sudo 可以加到后面就更好了

sudo !!

嗯这个是可以,不过要先回车执行一次。对于有的不 sudo 也可以执行(但不是预期的目的)的命令,比如 passwd ,还是比较麻烦。不过发现了 oh-my-zsh 的 sudo 插件,两个 Esc 就可以添加 sudo 了

brew list coreutils
以及 which rm
你就知道为什么了
你输入的 rm 调用的还是 mac 的 rm

哈哈哈哈哈哈哈哈不回车根本不知道这玩意要 sudo

这个和用的 shell 有关吧

养成习惯,命令»参数»对象。
另外在 Terminal 里无论是 emacs 模式还是 vim 模式都有前后位置跳转的快捷键,用好了回去补也不难。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服