쉘 스크립트에서 캐리지 리턴 없이 du -ksh를 작동시키려면 어떻게 해야 합니까?

쉘 스크립트에서 캐리지 리턴 없이 du -ksh를 작동시키려면 어떻게 해야 합니까?

특정 형식에 맞는 스크립트를 작성합니다. 파이프 사이의 명령 결과를 에코해야 합니다 | X |.

사용하려고 하면 du -ksh항상 캐리지 리턴이 발생합니다.

이것을 처리하는 방법을 아시나요?

#!/bin/bash
echo -e "|_. Sites-enabled |_. ServerName |_. ServerAlias |_. UserID |_. DocumentRoot |_. Dig ServerName |_. Dig ServerAlias |"
ls /etc/apache2/sites-enabled/* | while read fichier

do

# SiteName & ServerName & ServerAlias & UserID
    sitename=($(echo $fichier | cut -d"/" -f5))
    serverName=`awk -F"ServerName" '/ServerName/{printf "%s ",$2}' $fichier`
    serverAlias=`awk -F"ServerAlias" '/ServerAlias/{printf "%s ",$2}' $fichier`
    userID=`awk '/AssignUserID/ {printf "%s ",$2}' $fichier`

echo -e "| "$sitename" | "$serverName" | "$serverAlias" | "$userID" | "
# Size DocumentRoot
    home=($(awk -F"DocumentRoot" '/DocumentRoot/{print $2}' $fichier))
    for i in "${home[@]}"
    do
    du -ksh $i && echo -e "|\n"
    done

@muru 편집:

답변해주셔서 감사합니다. 저는 쉘 스크립팅을 처음 접했고 며칠 동안 그것을 배우고 있습니다.

ServerName ServerAlias ​​DocumentRoot 등 apache2 사이트에서 가상 호스트를 활성화하기 위한 값을 내보내야 합니다. 거기에서 추출된 문서 루트에 du ksh를 실행하여 호스팅된 eacj 사이트의 크기를 확인했습니다. 그런 다음 스크립트는 추출된 서버 이름과 별칭을 조사하여 실제로 가리키는 위치를 확인합니다.

최종 형식은 특수 형식을 사용하는 웹 사이트에서 온라인으로 사용할 수 있도록 "보드"에 이상적으로 설정됩니다(각각의 첫 번째 헤더 줄은 파이프+밑줄+점|_으로 시작합니다. 마지막 줄은 파이프로 끝나고 그 다음 첫 번째 줄은 모두 끝납니다). 라인은 파이프로 시작하고 끝납니다).

그러나 스크립트를 실행할 때 for ; 외부에 echo -e "| \n" 을 넣으면 원하는 형식이 작동하지 않습니다. 가상 호스트에서 발견된 첫 번째 DocumentRoot에서 중지되는 것 같습니다. 여러 웹 호스트가 포함된 웹사이트가 있는 경우 모든 호스트를 고려할 수 없습니다.

출력이 정말 이상해 보이기 때문에 캐리지 리턴과 관련된 것이 의심됩니다.

2019-04-11 편집

echo에서 로 전환합니다 printf. 기분이 훨씬 나아졌습니다.

#!/bin/bash
#================================================ = == =============================================
#
# 파일: getvhost.sh
#
# 사용법: getvhost.sh
#
# 설명: apache2에서 활성화된 모든 가상 호스트를 찾아 해당 서버 이름과 별칭을 추출합니다.
# documentroot 섹션에서 활성화된 웹사이트의 전체 크기를 가져오고, 해당 사용자 ID를 추출하고,
# 서버 이름과 별칭에서 DNS 조회를 수행합니다.
# 사용할 답변을 표시하고 형식을 지정하고 https://plan.io에 복사하여 붙여넣습니다.
#|_. 제목 1 |_. 제목 2 |_. 제목 3 |_. ... |
#|사이트1|서버 이름1|서버 별칭1|...|
#|사이트2|서버 이름2|서버별칭2|...|
#
# 옵션: - -
# 요구 사항: apache2의 /etc/apache2/sites-enabled에서 사이트가 활성화되어 있습니다.
# 실수:---
# 알아채다:---
# 작가:---
# 회사: - -
# 버전: 1.1
# 작성시간 : 2019.04.07
# 개정일 : 2019.04.11
#================================================ = == =============================================


echo -e "|_.사이트 활성화|_.서버 이름|_.서버 별칭|_.사용자 ID |_.DocumentRoot |_.디그 서버 이름|_.디그 서버 별칭|"
ls /etc/apache2/sites-enabled/* | ls /etc/apache2/sites-enabled/* |파일을 읽을 때

하다
        #------------------------------------------------ -
        # 사이트 이름&서버 이름&서버 별칭&사용자 ID 가져오기
        #------------------------------------------------ -
        사이트 이름=($(echo $file | cut -d"/" -f5))
        serverName=`awk -F"ServerName" '/ServerName/{printf "%s ",$2}' $file`
        serverAlias=`awk -F"ServerAlias" '/ServerAlias/{printf "%s ",$2}' $file`
        userID=`awk '/AssignUserID/ {printf "%s ",$2}' $file`
        echo -e " | " $sitename " | " $serverName " | " $serverAlias ​​​​" | " $userID " | \c"

        #------------------------------------------------
        # DocumentRoot에서 웹사이트 크기를 가져옵니다.
        #------------------------------------------------

        home=($(awk -F"DocumentRoot" '/DocumentRoot/{print $2}' $file))
        저는 "${home[@]}"에 있어요
        하다
          크기=`du -sh $i`
          printf "%s " $size
        완벽한

        에코 -e "|"

        #------------------------------------------------ - ------
        # DIG ServerName 및 ServerAlias
        #------------------------------------------------ - ------

        dig=($(awk -F"ServerName" '/ServerName/{print $2}' $file))
        내 경우 "${dig[@]}"
        하다
          dig1=`dig +noall +답변 +short $i`
          printf "%s " $dig1
        완벽한

        에코 -e "|"

        dig=($(awk -F"ServerAlias" '/ServerAlias/{print $2}' $file))
        내 경우 "${dig[@]}"
        하다
          dig2=`dig +noall +답변 +short $i`
          printf "%s " $dig2
        완벽한

        에코 -e "|"

완벽한

답변1

원하는 출력을 얻을 수 없습니다 echo "$(du -ksh $i)". 전환하여 echo원하는 printf출력을 얻으십시오. 실제로 설명할 수는 없지만 여전히 유효합니다.

관련 정보