【发布时间】: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_this和do_that可以是使用dos2unix的操作。 git 解决方案更好 imo。 -
@Jetchisel 感谢分享另一个方法,是的,虽然我同意在 GIT 中处理是更清洁的方法,但也可以有条件地处理。
-
使用
bash -c "wget ...; tar ...; mv ...; rm ...; chmod ..."?