Shell-Script

GitHub 反復將所有線索從空格更改為製表符,遠端腳本執行 (curl) 失敗

  • February 14, 2018

根據設計,當您重新編輯帶有前導標籤的文件時,GitHub 會自動將所有潛在客戶從標籤轉換為空格:也就是說,如果您編輯文件,將所有潛在客戶從空格更改為標籤,它將以這種方式保存,但如果您重新編輯文件並保存(不更改潛在客戶),所有潛在客戶將自動轉換回空格。

**1)**保存更改前的文件編輯模式:

在此處輸入圖像描述

**2)**保存更改後的文件編輯:

在此處輸入圖像描述

請注意,就在我重新編輯文件時,它是如何從製表符 (4) 回到空格 (2) 的。


為什麼這是個問題

執行包含依賴於選項卡的數據(如here-documents )的遠端腳本的原始版本將失敗。它們的執行只會因一些錯誤而中斷,因為它們必須包含前導製表符而不是空格。curl

curl這是我用來從 GitHub 執行遠端腳本的基本模式如下(對於多個 curl,這個。):

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

我的問題

有沒有辦法(可能使用tr)將所有前導空格更改為製表符,以確保我從 GitHub 執行的遠端腳本始終具有前導製表符而不是空格,因此不受 GitHub 的這種奇怪行為的影響?

關於 GitHub 及其編輯器,我不能說太多,因為我從不直接在 Web 界面中編輯 GitHub 文件。

標準實用程序expandunexpand可用於將前導製表符轉換為空格 ( expand) 或將前導空格轉換為製表符 ( unexpand)。

要將前導兩個空格更改為一個製表符(或將四個空格更改為兩個製表符等),請使用

unexpand -t 2 file

這也可以用作過濾器,如

somecommand | unexpand -t 2

要用單個製表符替換任意數量的前導空格,還可以sed像這樣使用 GNU:

sed 's/^  */\t/'

該模式在和之間^ *兩個空格。這個正則表達式將匹配一個或多個前導空格(相當於or如果使用 GNU與or )。GNU替換將用製表符替換這些(其他實現將需要在替換部分中使用文字製表符,而不是)。^``*``^ +``^ {1,}``sed``-r``-E``sed``sed``\t


我注意到這在 OpenBSD 上不起作用,因為它的實現unexpand假定每個選項卡有八個空格並且不會辨識-t標誌。不過,上述建議適用unexpand於 GNU coreutils 中的內容。

引用自:https://unix.stackexchange.com/questions/423191