설계상으로, 선행 탭 문자가 있는 파일을 다시 편집하면 GitHub는 자동으로 모든 단서를 탭에서 공백으로 변환합니다. 즉, 파일을 편집하고 모든 단서를 공백에서 탭으로 변경하면 그런 식으로 저장됩니다. 하지만 파일을 다시 편집하고 저장하면(단서를 변경하지 않고) 모든 단서는 자동으로 공백으로 다시 변환됩니다.
1)변경하기 전에 파일 편집 모드를 저장하려면:
2)변경 사항을 저장한 후 파일을 편집하려면:
파일을 다시 편집할 때 파일이 탭(4)에서 공백(2)으로 어떻게 돌아가는지 확인하세요.
이게 왜 문제야?
구현하다날것의curl
원격 스크립트 버전탭 관련데이터(예:여기 문서), 실패합니다. 공백이 아닌 선행 탭을 포함해야 하기 때문에 실행은 일부 오류에 의해서만 중단됩니다.
curl
이것은 다음과 같이 GitHub에서 원격 스크립트를 실행하는 데 사용하는 기본 패턴입니다 ( 여러 컬의 경우,이것. ):
curl -s URL | tr -d '\r' | bash
내 질문
tr
GitHub에서 실행하는 원격 스크립트에 항상 공백 대신 선행 탭이 있어서 GitHub의 이상한 동작에 영향을 받지 않도록 모든 선행 공백을 탭으로 변경하는 방법(아마도 사용)이 있습니까 ?
답변1
나는 웹 인터페이스에서 GitHub 파일을 직접 편집하지 않기 때문에 GitHub와 해당 편집기에 대해 많이 말할 수 없습니다.
표준 유틸리티expand
그리고unexpand
선행 탭을 공백( )으로 변환 expand
하거나 선행 공백을 탭( unexpand
)으로 변환하는 데 사용할 수 있습니다.
앞의 공백 두 개를 탭으로 변경하려면(또는 공백 네 개를 탭 두 개로 변경하는 등) 다음을 사용하세요.
unexpand -t 2 file
이는 다음과 같은 필터로도 사용할 수 있습니다.
somecommand | unexpand -t 2
여러 개의 선행 공백을 단일 탭으로 바꾸려면 sed
다음과 같이 GNU를 사용할 수도 있습니다.
sed 's/^ */\t/'
패턴 ^ *
은둘^
와 사이에 공백이 있습니다 *
. 이 정규식은 하나 이상의 선행 공백과 일치합니다( ^ +
GNU를 or와 함께 사용하는 경우와 동일). GNU 대체는 이를 탭 문자로 대체합니다(다른 구현에서는 대체 부분에 리터럴 탭 문자가 필요합니다).^ {1,}
sed
-r
-E
sed
sed
\t
unexpand
OpenBSD에서는 구현이 탭당 8개의 공백을 가정하고 플래그를 인식하지 못하기 때문에 이것이 작동하지 않는다는 것을 알았습니다 -t
. 그러나 위의 조언은 unexpand
GNU coreutils의 콘텐츠에 적용됩니다.