파일 읽기/쓰기를 스크립트에서 출력 가져오기/스크립트로 입력 보내기로 매핑하시겠습니까?

파일 읽기/쓰기를 스크립트에서 출력 가져오기/스크립트로 입력 보내기로 매핑하시겠습니까?

두 개의 스크립트가 있다고 가정해 보겠습니다 script1.sh. 예를 들어 시스템을 실행 하고 편집기에서 스크립트의 출력을 얻을 수 script2.sh있도록 파일 시스템 인터페이스를 생성할 수 있는 방법이 있는지 알고 싶습니다 . 그런 다음 파일에 쓸 때 수정된 텍스트가 .vim filescript1.shscript2.sh

가능합니까? 파일이 변경될 때 원하는 스크립트를 실행할 수 있는 "inotify"를 사용해 보았습니다. 하지만 파일 자체를 열면 일부 스크립트에서 표준 출력을 가져오는 첫 번째 부분을 수행하는 방법을 찾지 못했습니다.

답변1

이 작업에 필요한 도구는 다음과 같습니다.퓨즈(FUSE는 USerspace의 파일 시스템을 나타냅니다.) FUSE를 사용하면 사용자 프로그램이 파일 시스템을 구현할 수 있습니다. FUSE 파일 시스템에서 실행 중인 경우 vim file파일 file시스템을 제공하는 프로그램은 Vim이 파일을 읽을 때 파일 내용을 생성하고 Vim이 파일을 저장할 때 내용을 저장합니다(또는 저장하지 않습니다!).

FUSE는 요청한 것보다 더 복잡합니다. 파일 시스템을 제공하는 프로그램은 파일의 내용뿐만 아니라 디렉터리 구조, 권한 등도 관리합니다. 또한 파일을 검색할 수 없도록 설정하지 않는 한(프로그램이 해당 파일에 대해 수행할 수 있는 작업이 제한됨) 각 파일의 청크 읽기 및 쓰기를 관리해야 합니다.

나는 고전적인 디렉터리 구조를 제공하면서 파일 내용을 조작하기 위한 인터페이스만 제공하는 FUSE를 기반으로 구축된 프로젝트를 본 적이 없습니다. 일부 샘플 파일 시스템에서 코드를 복사할 수 있습니다.

답변2

이 쉘 함수는 귀하가 요청한 작업을 수행합니다.

vim() { bash script1.sh <"$1" >"$1.hide~"; /usr/bin/vim "$1.hide~"; bash script2.sh <"$1.hide~"; }

이 기능을 다음과 같이 사용하세요:

vim file

여러 부분으로 나누세요.

  • bash script1.sh <"$1" >"$1.hide~"

    $1은 스크립트에 제공하는 첫 번째 매개변수이므로 파일 이름이어야 합니다. 표준 입력에서 이 파일을 사용하여 실행 'script1.sh되고 출력을 임시 파일에 씁니다.

  • /usr/bin/vim "$1.hide~"

    vim이것은 의 출력에 실수를 실행합니다 script1.sh.

    이는 vim시스템의 편집기가 /usr/bin다른 곳에 있는 것으로 가정합니다. 기능 정의를 적절하게 조정하십시오.

  • bash script2.sh <"$1.hide~"

    이는 편집된 파일을 표준 입력으로 제공합니다 script2.sh.

~/.bashrc이 함수 정의를 영구적으로 만들려면 파일에 별도의 줄로 배치하십시오 .

관련 정보