예를 들어 다음과 같이 bash 파일을 작성할 수 있습니다.
#!/bin/bash
# file: foo/bar.sh
echo_foo(){
echo "foo"
}
주요 파일이 있습니다:
#!/bin/bash
# file: foo.sh
. foo/bar.sh
echo_foo
실행되면 출력은 다음과 같습니다.
$ ./foo.sh
foo
하지만 내가 원하는 것은 가져오기가 포함된 압축 파일을 갖고 foo.sh
이제 flat-foo.sh
해당 foo.sh
파일에서 하나를 만드는 것입니다.
flatten foo.sh > foobar.sh
따라서 foobar.sh
소스 명령이 주입한 모든 것을 포함하며 독립형 장치입니다.
#!/bin/bash
# file: boobar.sh
echo_foo(){
echo "foo"
}
echo_foo
이것은 구현하거나 더 진행하기 전에 이전에 해결된 문제인 것 같습니다. bash 파일을 사용하여 이를 달성할 수 있는 쉬운 방법이 있습니까?
답변1
간단한 경우에는 Perl을 사용하는 것이 그리 어렵지 않습니다.
% perl -pe '$_ = qx/cat $1/ if /^\. (.*)$/;' main.sh
#!/bin/bash
# file: foo.sh
#!/bin/bash
# file: foo/bar.sh
echo_foo(){
echo "foo"
}
echo_foo
예를 들어 들여쓰기 명령을 지원해야 하는 경우 패턴을 약간 완화해야 하며 물론 새 줄을 지나 계속되는 명령은 말할 것도 없고 or , 또는 .
와 같은 명령이 있으면 실패할 것입니다 ..... 하지만 왜냐하면 당신은 그것을 가지고 있지 않습니다. 한 가지 가능성은 줄의 명령만 특수 주석 표시로 바꾸는 것입니다 .. /dev/stdin < ...
. <(whatever)
. "./dir/$scriptname"
.
. somefile.sh # flatten
qx//
(흥미롭게도 최소한 실행된 셸이 기본 스크립트에서 사용된 것과 동일한 경우에는 공백이 있는 파일 이름을 지원합니다 .)