如何让 du -ksh 在 shell 脚本中无需回车即可工作?

如何让 du -ksh 在 shell 脚本中无需回车即可工作?

编写适合特定格式的脚本。我需要在管道之间回显命令的结果| 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:

嘿,谢谢你的回答。我对 shell 脚本非常陌生,刚学习了几天。

我需要导出启用 apache2 站点中的虚拟主机的值,例如 ServerName ServerAlias DocumentRoot 等。从那里,我在提取的文档根上运行 du ksh 以查看托管的 eacj 网站的大小。之后,脚本将对提取的服务器名和别名进行挖掘,以检查它真正指出的位置。

最终格式理想地设置在“板”中,以便在使用特殊格式的网站上在线利用(每个第一个标题行以管道+下划线+点 |_ 开头。最后一行以管道结尾,然后每个第一个之后的线以管道开始和结束)。

但是,在运行脚本时,如果我将 echo -e "| \n" 放在 for ; 之外,则无法使所需的格式起作用。它似乎停在虚拟主机中找到的第一个 DocumentRoot 处。如果我有一个包含多个虚拟主机的网站,它就无法将它们全部考虑在内。

我怀疑与回车有关的东西,因为输出对我来说真的很奇怪。

编辑2019-04-11

从 切换echoprintf。感觉好多了。

#!/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 |_.Dig 服务器名称 |_.Dig 服务器别名 |"
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 " $大小
        完毕

        回显-e“|”

        #--------------------------------------------------------
        # 对 ServerName 和 ServerAlias 进行 DIG
        #--------------------------------------------------------

        dig=($(awk -F"ServerName" '/ServerName/{print $2}' $file))
        对于“${dig[@]}”中的我
          dig1=`dig +noall +answer +short $i`
          printf "%s " $dig1
        完毕

        回显-e“|”

        dig=($(awk -F"ServerAlias" '/ServerAlias/{print $2}' $file))
        对于“${dig[@]}”中的我
          dig2=`dig +noall +answer +short $i`
          printf "%s " $dig2
        完毕

        回显-e“|”

完毕

答案1

无法获得所需的输出echo "$(du -ksh $i)"。切换到echoprintf获得所需的输出。无法真正解释它,但仍然有效。

相关内容