linux - WSL 需要扩展 .exe!如何编写通用脚本?(WSL、Cygwin、Linux、MacOS)
问题描述
我docopts
在我的 Shell 脚本中使用。这在 Cygwin 中效果很好。
我只需要确保它docopts
存在于我的脚本顶部:
command -v docopts > /dev/null 2>&1 || { echo >&2 "docopts not found"; exit 2; }
...
parsed="$(docopts -h "$help" -V "$version" : "$@")"
eval "$parsed"
但是,在 WSL 中,它需要扩展.exe
才能找到要启动的程序。
我应该以这种方式调整我的所有脚本吗?
DOCOPTS=
command -v docopts > /dev/null 2>&1 && DOCOPTS=docopts
command -v docopts.exe > /dev/null 2>&1 && DOCOPTS=docopts.exe
[ -z "$DOCOPTS" ] && { echo >&2 "docopts not found"; exit 2; }
...
parsed="$($DOCOPTS -h "$help" -V "$version" : "$@")"
eval "$parsed"
还是有更聪明的方法可以做到这一点,以便我的脚本可以在任何环境中工作?
解决方案
我的建议是安装docopts
在 WSL 中,而不是尝试使用 Cygwindocopts.exe
版本。这将 (a) 允许您.exe
在两者中使用相同的配置(不带扩展名),并且 (b) 可能更兼容。在尝试在 WSL 中使用 Cygwin 可执行文件时,我注意到并听说了一些特性。WSL 在提供 Linux 和 Windows EXE 之间的兼容性层方面做得很好,但 Cygwin 做了一些可能导致问题的“魔术”。
推荐阅读
- reactjs - MUI Datetimepicker 使用下拉选择更改值
- javascript - Google Sheets Appscript 弹出提示响应并隐藏工作表,直到响应正确
- javascript - 使用 if 语句反应组件未在 .map 内呈现
- rust - 如何修复使用 HashMap 的代码
> 对矩阵进行对角线排序? - distributed-system - 我可以直接向 janusGraph 服务器发出 http 请求吗?
- twilio - 如何在 Twilio CLI 中清除所有帐户/配置文件,这样我就不会要求我选择预先保存的 sid?
- html - 使用路由器插座活动事件获取子组件实例时子组件未显示
- php - (PHP) 如何在复选框中引用特定的数组值?
- reactjs - 修改对象键值对后为每个
- php - 未定义的偏移量:2 当我删除数组的一个元素并且我想返回其余元素时