我想更改命令,以便命令行标志(选项)放在命令行参数之前,这是由GNU getopt自动完成的。Bash:是否可以在执行前更改命令
Mac使用BSD getopt以使功能缺失。我想调整bash,以便在执行一个命令时,我运行脚本来解析标志和参数,对它们重新排序并执行重新排序的命令。
这样,既
ls -lh /tmp
ls /tmp -lh
会在我的Mac的终端工作。
我想更改命令,以便命令行标志(选项)放在命令行参数之前,这是由GNU getopt自动完成的。Bash:是否可以在执行前更改命令
Mac使用BSD getopt以使功能缺失。我想调整bash,以便在执行一个命令时,我运行脚本来解析标志和参数,对它们重新排序并执行重新排序的命令。
这样,既
ls -lh /tmp
ls /tmp -lh
会在我的Mac的终端工作。
除非您知道getopt()
函数的optstring
参数对于每个命令的外观,否则无法安全地编写通用工具来执行重新排序命令行参数的工作。试想一下:
make something -f makefile
cp something -f makefile
在第一个命令,你必须同时-f
和makefile
移动到前面规范化的命令调用。第二,你只能移动-f
;如果您也移动了以下文件名,则可以重写该命令并销毁您的数据。
当然,如果该命令也采用长格式--force
或--file=makefile
样式参数,您还必须知道getopt_long()
参数字符串的外观。
坦率地说,你最好在你的Linux环境中使用POSIXLY_CORRECT,忘记它提供的灵活的灵活性,并学习在任何时候在你的论点之前写下你的选项。如果你这样做的话,你的代码可以在所有类Unix机器上更好地工作。
你可以比/bin
和/usr/bin
(如/usr/gnu/bin
一些其他目录下安装GNU软件,然后确保你把/usr/gnu/bin
PATH中领先于系统目录中。还有像fink
预建的系统了。然而,这对于那些没有GNU类似物的工具没有任何帮助,而且你写的shell脚本不能移植到其他与你没有相同设置的Mac上。
什么样的订单改变你假设3个或更多的选项'cp -R/root/bkp'例如 – triclosan
假设我现在关于它,你知道你可以通过coreutils macport http://www.macports.org/ports.php?by=name&substr=coreutils(也可能是其他人)在Mac上获得很多GNU工具吗?也许这可以帮助你做出努力。 – Mat
@Mat,我认为替换它们是很乏味和危险的。此外,它不会与依赖于BSD getopt的其他可执行文件一起工作。我正在考虑构建一个执行重新排序的shell,然后调用bash。 – luanjunyi