【问题标题】:Bash script which works on both Windows and Mac适用于 Windows 和 Mac 的 Bash 脚本
【发布时间】:2021-06-05 14:03:16
【问题描述】:

编写一个简单的 bash 脚本

#!/bin/bash

wget -q https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz
tar -zxf helm-v${HELM_VERSION}-linux-amd64.tar.gz
mv ./linux-amd64/helm ${BIN_PATH}/helm
rm -rf linux-amd64/ helm-v${HELM_VERSION}-linux-amd64.tar.gz
chmod +x ${BIN_PATH}/helm

但每次从 Windows 切换到 Mac 时,我都必须删除行尾(CRLF 和 LF),反之亦然。

目前在包 doc2unix (https://formulae.brew.sh/formula/dos2unix) 处理这些问题。

是否有任何最佳实践来处理此问题,以便脚本无需任何更改即可无缝运行?

【问题讨论】:

  • 如果您将脚本存储在 git 存储库 and configure things appropriately 中,那么 (a) 您可以获得项目版本控制的好处,并且 (b) git 将负责行尾转换给你。
  • @larsks 这是我一直在寻找的,我已经在使用 GIT (github.com) 进行版本控制,但不知道这个功能 - 感谢分享。如果您有兴趣回答而不是发表评论,我会将其标记为已回答。
  • 或者您可以使用uname -s 添加测试。例如os=$(uname -s); if [[ $os == Linux ]]; then do_this; else do_that; fi 其中do_thisdo_that 可以是使用dos2unix 的操作。 git 解决方案更好 imo。
  • @Jetchisel 感谢分享另一个方法,是的,虽然我同意在 GIT 中处理是更清洁的方法,但也可以有条件地处理。
  • 使用bash -c "wget ...; tar ...; mv ...; rm ...; chmod ..."?

标签: windows bash macos


【解决方案1】:

有几个选项,

  1. 如果您使用的是 Git 存储库或版本控制系统,其中设置可用于自动更改行尾,从 LF 到 CRLF。当用户下载脚本时。大多数用户都有一个版本控制系统,并且在运行相同的脚本时更喜欢这种方法,如果它只是你正在处理的行尾。

  2. 在两个文件夹中有两个版本的文件,一个用于 Windows,一个用于 Linux,或者在您的脚本中编写一些代码来检测操作系统是什么,然后运行您的代码以适用于操作系统。

  3. 可以将文件从 Windows 转换为 Linux 执行的软件,您正在使用一个已经称为 doc2unix 的软件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2013-05-17
    • 2021-10-27
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多