내가 취득한 도메인의 목록이 한 줄씩 표시되어 있습니다.
for domain in $(nginx -qT | grep -E "^[[:space:]]*server_name" | grep -Ev "^[[:space:]]*#" | sed 's/^[ \t]*//' | sed 's/server_name //g' | tr -d \; | grep -Ev "^_$" | sort | uniq); do echo $domain; done
Nginx 구성에서.
명확하고 뚜렷함:
for domain in $(
nginx -qT |
grep -E "^[[:space:]]*server_name" |
grep -Ev "^[[:space:]]*#" |
sed 's/^[ \t]*//' |
sed 's/server_name //g' |
tr -d \; |
grep -Ev "^_$" |
sort |
uniq
); do
echo $domain;
done
또한 내 디렉터리에 /etc/nginx/conf.d/
이라는 이름 의 여러 구성 파일이 있습니다 domain.conf
.
두 번째 목록의 프로필에 설명된 첫 번째 목록에서 도메인을 추출하고 싶습니다.
두 목록에 포함된 도메인만 유지하면서 두 목록을 병합하고 최종 목록에서 고유한 도메인을 추출하려면 어떻게 해야 합니까?
내 두 번째 목록
for directory in $(grep -ir "include" /etc/nginx/nginx.conf | grep -Ev "^[[:space:]]*#" | grep -v "fastcgi_params\|mime.types" | sed 's/;//g' | grep -o "/.*"); do ls $directory; done
목록이 파일이 아닌 변수 값으로 유지되도록 Bash 스크립트에서 이 항목을 사용하고 싶습니다. 또한 명령을 사용해 보았지만 comm
변수로 인해 작동하지 않습니다.
답변1
당신은 그것을 사용할 수 있습니다프로세스 교체특성은 다음과 같습니다 bash
.
프로세스 대체를 사용하면 파일 이름을 사용하여 프로세스의 입력 또는 출력을 참조할 수 있습니다. 형태를 취합니다
<(list)
또는
>(list)
프로세스목록입력 또는 출력이 파일 이름으로 표시되어 비동기식으로 실행됩니다. 파일 이름은 확장의 결과로 현재 명령에 인수로 전달됩니다. [...]
<(list)
이 형식을 사용하는 경우 인수로 전달된 파일을 읽어 목록의 출력을 얻어야 합니다.
따라서 두 개의 변수가 있는 경우 해당 내용을 정렬하고 프로세스 대체로 명령에 전달할 수 있습니다 comm
.
comm -12 <(sort <<< "$VAR1" ) <(sort <<< "$VAR2")
예를 들어, 0에서 12 사이에서 2와 3으로 나누어지는 모든 숫자를 찾고 싶다고 가정해 보겠습니다.
$ VAR1=$(seq 0 2 12)
$ VAR2=$(seq 0 3 12)
$ comm -12 <(sort <<< "$VAR1" ) <(sort <<< "$VAR2")
0
12
6
답변2
@aviro의 답변에 따르면 결과 쿼리는 다음과 같습니다.
for directory in $(
grep -ir "include" /etc/nginx/nginx.conf |
grep -Ev "^[[:space:]]*#" |
grep -v "fastcgi_params\|mime.types" |
sed 's/;//g' |
grep -o "/.*" |
sed 's/\.conf//g'
);
do
ls $directory |
xargs -n 1 basename |
sed 's/\.conf//g';
done