How to get du -ksh working without a carriage return in shell-scripting?

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

Working on a script to fit a specific format. I need the results of the command to be echoed between pipes | X |.

When I try to use du -ksh it always brings a carriage return.

Any idea how to deal with it?

#!/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

Edit for @muru :

hey thanks for your answer. I'm really new in shell-scripting just learning it since a couple days.

I need to export values of my virtualhosts in apache2 sites-enabled like ServerName ServerAlias DocumentRoot and so on. From there I run a du ksh on the extracted Document Root to see the size of eacj website hosted. Afterwards the script will run a dig on the extracted Servername & aliases to check where it really points out.

The final format would be ideally set in a "board" to be exploited online on a website that uses a special format for it (each first title rows start with pipe+underscore+dot |_. the last rows end with pipe only then each line after the fist one start and end with a pipe).

However when running the script I can't make the desired format work, if I put the echo -e "| \n" outside of the for ; it seems it stops at the first DocumentRoot found in a virtualhost. If i have a website with multi vhost inside it fails to take them all into account.

I suspected something related to the carriage returns cause the output is really weird for me.

EDIT 2019-04-11

switched from echoto printf. feels better.

#!/bin/bash
#============================================================================================
#
# FILE: getvhost.sh
#
# USAGE: getvhost.sh
#
# DESCRIPTION: Find all virtualhosts enabled in apache2; extract their servernames & aliases,
# get the total size of the websites enabled from documentroot section, extract their userid,
# performs  DNS lookups from servernames & aliases
# Display and format the answers to be use and copy-paste in https://plan.io :
# |_. TITLE1 |_. TITLE2    |_. TITLE3     |_. ... |
# | site1    | servername1 | serveralias1 |   ... |
# | site2    | servername2 | serveralias2 |   ... |
#
# OPTIONS: ---
# REQUIREMENTS: apache2 with sites-enabled in /etc/apache2/sites-enabled
# BUGS: ---
# NOTES: ---
# AUTHORS: ---
# COMPANY: ---
# VERSION: 1.1
# CREATED: 2019.04.07
# REVISION: 2019.04.11
#============================================================================================


echo -e "|_. Sites-enabled |_. ServerName |_. ServerAlias |_. UserID |_. DocumentRoot |_. Dig ServerName |_. Dig ServerAlias |"
ls /etc/apache2/sites-enabled/* | while read file

do
        #--------------------------------------------------
        # Get sitename & serverName & serverAlias & userID
        #--------------------------------------------------
        sitename=($(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"

        #-------------------------------------------------
        # Get Size of websites from DocumentRoot
        #-------------------------------------------------

        home=($(awk -F"DocumentRoot" '/DocumentRoot/{print $2}' $file))
        for i in "${home[@]}"
        do
          size=`du -sh $i`
          printf "%s  " $size
        done

        echo -e "|"

        #-----------------------------------------------
        # DIG on both ServerName & ServerAlias
        #-----------------------------------------------

        dig=($(awk -F"ServerName" '/ServerName/{print $2}' $file))
        for i in "${dig[@]}"
        do
          dig1=`dig +noall +answer +short $i`
          printf "%s  " $dig1
        done

        echo -e "|"

        dig=($(awk -F"ServerAlias" '/ServerAlias/{print $2}' $file))
        for i in "${dig[@]}"
        do
          dig2=`dig +noall +answer +short $i`
          printf "%s  " $dig2
        done

        echo -e "|"

done
profilepic.png
manpreet 2 years ago

Couldn't get the desired output with echo "$(du -ksh $i)". Switched the echowith printfand got the desired output. Can't really explain it but still, works.


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.