GitHubはすべてのスレッドを空白からタブに繰り返し変更し、リモートスクリプトの実行(カール)が失敗します。

GitHubはすべてのスレッドを空白からタブに繰り返し変更し、リモートスクリプトの実行(カール)が失敗します。

設計上、先行タブ文字を含むファイルを再編集すると、GitHubは自動的にすべての手がかりをタブから空白に変換します。つまり、ファイルを編集してすべての手がかりをスペースからタブに変更すると、そのように保存されます。ただし、ファイルを再編集して保存すると(手がかりを変更せずに)、すべての手がかりは自動的に空白に戻ります。

1)変更する前にファイル編集モードを保存するには:

ここに画像の説明を入力してください。

2)変更を保存した後にファイルを編集するには:

ここに画像の説明を入力してください。

ファイルを再編集するときに、ファイルがタブ(4)から空白(2)にどのように戻るかを確認してください。


これはなぜ問題なのか?

実装する生のcurlリモートスクリプトバージョンタブ関連データ(例:ここのドキュメント)、失敗します。空白ではなく先行タブを含める必要があるため、実行は一部のエラーによってのみ中断されます。

curlこれは、次のようにGitHubでリモートスクリプトを実行するために使用するデフォルトのパターンです(複数のカールの場合、これ ):

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

私の質問

trGitHubで実行されているリモートスクリプトには常にスペースの代わりに先行タブがあり、GitHubの奇妙な動作に影響されないようにすべての先行スペースをタブに変更する方法(おそらく使用)がありますか?

答え1

私はWebインターフェースからGitHubファイルを直接編集しないので、GitHubとそのエディタについてはあまり話すことはできません。

標準ユーティリティexpandそしてunexpand先行タブを空白()に変換したりexpand、先行スペースをタブ(unexpand)に変換するために使用できます。

前の2つのスペースをタブに変更するには(または4つのスペースを2つのタブに変更するなど)、次を使用します。

unexpand -t 2 file

これは、次のフィルタとしても使用できます。

somecommand | unexpand -t 2

複数の先行スペースを単一のタブに置き換えるには、sed次のようにGNUを使用することもできます。

sed 's/^  */\t/'

パターン^ *二つ^との間にスペースがあります*。この正規表現は、1つ以上の先行スペースと一致します(^ +GNUをorで使用する場合と同じ)。 GNU置換はそれをタブ文字に置き換えます(他の実装では代替部分にリテラルタブ文字が必要です)。^ {1,}sed-r-Esedsed\t


unexpandOpenBSDでは、実装がタブごとに8つの空白を想定してフラグを認識しないため、これは機能しないことがわかりました-t。しかし、上記のアドバイスはunexpandGNU coreutilsのコンテンツに適用されます。

関連情報