我有这个远程 Bash 脚本在 GitHub 中,我已经成功地逐行执行了几次(在不同的版本中)。
由于每次测试都复制粘贴所有行非常令人沮丧,因此我尝试通过其执行远程 Bash 脚本原始形式与curl
,但它在各种尝试中失败:
bash <(curl -s https://raw.githubusercontent.com/benqzq/uncwe/master/install.sh)
或者
curl -s https://raw.githubusercontent.com/benqzq/uncwe/master/install.sh | bash
大约 3 秒后,两者都完全失败,并出现错误:
/dev/fd/63: 第 7 行: $'\r': 找不到命令
我推测我可能需要翻译所有回车符,因此尝试:
curl -s https://raw.githubusercontent.com/benqzq/uncwe/master/install.sh | tr -d '\r' | bash
这导致了脚本的部分执行。例如,虽然apt-get install
、export
、git clone
、rm -rf ${repo}/.git/
和其他一些操作运行良好,但对一些带有前导选项卡的文件的wget
/unzip
和处理无法正确处理。
我认为 GitHub GUI 可能在代码的某些部分将前导空格从制表符更改为空格,反之亦然,因此我尝试将所有前导空格更改为表格:
curl -s https://raw.githubusercontent.com/benqzq/uncwe/master/install.sh | sed "s/^ */\t/" | tr -d '\r' | bash
结果似乎与上一个相同。
由于这4种方法都失败了,我想知道还有什么可用的。遗憾的是我还没有在谷歌中找到其他例子。
也许我遇到这些问题是因为我通常在 Windows 10 上工作,并且回车符会添加到每个文件中,但有人可能会问为什么代码示例中的“将它们翻译出来”会导致执行错误。
答案1
我能够使用 解决它dos2unix
。
我安装了它:
sudo apt-get update
sudo apt-get install dos2unix
然后我运行curl
,将内容下载到stdout
。我通过管道传输标准输出中的内容dos2unix
来更改它,然后通过管道bash
来执行它。
sudo curl -s https://raw.githubusercontent.com/benqzq/ulcwe/master/install.sh | dos2unix | bash