GitHub 反复将所有线索从空格更改为制表符,并且远程脚本执行 (curl) 失败

GitHub 反复将所有线索从空格更改为制表符,并且远程脚本执行 (curl) 失败

根据设计,当您重新编辑带有前导制表符的文件时,GitHub 会自动将所有线索从制表符转换为空格:也就是说,如果您编辑文件,将所有线索从空格更改为制表符,它将以这种方式保存,但如果您重新编辑文件并保存(不更改线索),所有线索将自动转换回空格。

1)保存更改之前的文件编辑模式:

在此输入图像描述

2)保存更改后进行文件编辑:

在此输入图像描述

请注意,当我重新编辑文件时,它是如何从制表符 (4) 返回到空格 (2) 的。


为什么这是一个问题

执行生的curl带有 ,的远程脚本版本选项卡相关数据(如此处文档), 将失败。它们的执行只会因一些错误而中断,因为它们必须包含前导制表符而不是空格。

这是我用来从 GitHub 执行远程脚本的基本curl模式如下(对于多个curl,这个):

curl -s URL | tr -d '\r' | bash

我的问题

有没有办法(可能使用tr)将所有前导空格更改为制表符,以确保我从 GitHub 运行的远程脚本始终具有前导制表符而不是空格,从而不受 GitHub 这种奇怪行为的影响?

答案1

关于 GitHub 及其编辑器,我不能说太多,因为我从不直接在 Web 界面中编辑 GitHub 文件。

标准实用程序expandunexpand可用于将前导制表符转换为空格 ( expand) 或将前导空格转换为制表符 ( unexpand)。

要将前导两个空格更改为制表符(或将四个空格更改为两个制表符等),请使用

unexpand -t 2 file

这也可以用作过滤器,如

somecommand | unexpand -t 2

要使用单个制表符替换任意数量的前导空格,还可以使用 GNU,sed如下所示:

sed 's/^  */\t/'

图案^ *^和之间有空格*。该正则表达式将匹配一个或多个前导空格(如果使用带有or的 GNU,则相当于^ +或)。 GNU替换将用制表符替换它们( 的其他实现将需要在替换部分中使用文字制表符,而不是)。^ {1,}sed-r-Esedsed\t


我注意到这在 OpenBSD 上不起作用,因为它的实现unexpand假设每个选项卡有 8 个空格,并且无法识别该-t标志。不过,上述建议适用于unexpandGNU coreutils 中的内容。

相关内容