GitHub 反復將所有線索從空格更改為製表符,遠端腳本執行 (curl) 失敗
根據設計,當您重新編輯帶有前導標籤的文件時,GitHub 會自動將所有潛在客戶從標籤轉換為空格:也就是說,如果您編輯文件,將所有潛在客戶從空格更改為標籤,它將以這種方式保存,但如果您重新編輯文件並保存(不更改潛在客戶),所有潛在客戶將自動轉換回空格。
**1)**保存更改前的文件編輯模式:
**2)**保存更改後的文件編輯:
請注意,就在我重新編輯文件時,它是如何從製表符 (4) 回到空格 (2) 的。
為什麼這是個問題
執行包含依賴於選項卡的數據(如here-documents )的遠端腳本的原始版本將失敗。它們的執行只會因一些錯誤而中斷,因為它們必須包含前導製表符而不是空格。
curl
curl
這是我用來從 GitHub 執行遠端腳本的基本模式如下(對於多個 curl,這個。):curl -s URL | tr -d '\r' | bash
我的問題
有沒有辦法(可能使用
tr
)將所有前導空格更改為製表符,以確保我從 GitHub 執行的遠端腳本始終具有前導製表符而不是空格,因此不受 GitHub 的這種奇怪行為的影響?
關於 GitHub 及其編輯器,我不能說太多,因為我從不直接在 Web 界面中編輯 GitHub 文件。
標準實用程序
expand
和unexpand
可用於將前導製表符轉換為空格 (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 中的內容。