원본 파일을 출력으로 자동으로 바꾸는 방법은 무엇입니까? [복사]

원본 파일을 출력으로 자동으로 바꾸는 방법은 무엇입니까? [복사]

.scss명령을 사용하여 sass() 파일의 형식을 지정 하는 웹사이트가 있습니다 sass-convert. 구문은 다음과 같습니다.

$> sass-convert original.scss formatted.scss

저는 git 저장소에 있기 때문에 별도의 출력 파일을 갖는 것은 완전히 중복됩니다. 나의 다음 단계는 입니다 mv formatted.scss original.scss. 두 번째 단계를 피하기 위해 뭔가를 하고 싶습니다. 그것은 마치

$> sass-convert original.scss %^&

%^&내가 원하는 것을 수행하는 마법의 쉘/bash 구문이 있습니까 ?

bash(또는 다른 쉘) 구문을 사용하여 한 줄로 출력 파일을 입력 파일로 자동으로 바꾸는 방법이 있습니까?

내 문제는 다음과 다릅니다.이 문제iconv출력 파일이 먼저 생성되어 입력 파일이 비어 있게 되므로 아래 나열된 솔루션 중 어느 것도 작동하지 않습니다 . 이 두 질문에 대한 답변을 보면 서로 다르다는 것을 알 수 있습니다. 이 질문에 대한 대답은 출력 파일을 즉시 생성하지 않는 모든 명령에 적용됩니다.

답변1

Unix 프로그램에는 -i inplace스위치가 있을 수 있습니다(예: 이전 버전 sed에는 없었지만 현재 대부분은 에서 플래그를 훔칩니다 perl). man자세한 내용은 페이지를 확인하세요. 이로 인해 일반적으로 프로그램이 출력을 임시 파일에 쓴 다음 rename(2)원래 이름에 새 출력을 쓰기 위한 호출을 수행하게 됩니다(이 이름 변경으로 인해 selinux 컨텍스트나 프로세스의 다른 멋진 ACL이 손상될 수도 있습니다. 당신은 그런 것들을 사용합니다).

write-to-tmp-file-and- 모드 rename(2)에 대한 또 다른 솔루션은 sponge다음에서 제공됩니다 moreutils.

$ echo hi > file
$ tr h b < file | sponge file
$ cat file
bi
$ 

답변2

배시 사용역사 연산자:

sass-convert original.scss !#:$

!#현재 행, :$마지막 인수(지금까지)를 지정합니다.

이것은 잘 작동 sass-convert하지만 보다 일반적인 용도에서는 입력 처리를 마치기 전에 출력을 자르는 프로그램이 이 접근 방식을 사용할 수 없다는 점에 유의할 가치가 있습니다.

답변3

tcsh또는 모드 zsh( emacs일반적으로 기본 모드) 에서는 다음을 입력할 수 있습니다.

sass - 원시 .scss 변환Ctrl+Alt+_

Ctrl+Alt+_이전 단어( copy-prev-word위젯)를 복사합니다.

이전 공백으로 구분된 단어를 복사하고 따옴표 또는 유사한 내용을 이해하지 못합니다( !#:$csh 스타일 기록 확장과 반대).

bash다른 readline 기반 셸 에서도 작동하는 또 다른 접근 방식은 여전히 emacs​​패턴을 유지하고 있습니다.

sass - 원시 .scss 변환Ctrl+WCtrl+Y Ctrl+Y

zsh를 사용하면 다음 작업도 수행할 수 있습니다.

(){sass-convert $1 $1} original.scss

(t)csh/ksh/zsh/bash의 경우 중괄호 확장을 사용합니다.

sass-convert original.scss{,}

관련 정보