Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用bash脚本存储git命令的输出并通过电子邮件发送_Linux_Bash_Git_Email - Fatal编程技术网

Linux 使用bash脚本存储git命令的输出并通过电子邮件发送

Linux 使用bash脚本存储git命令的输出并通过电子邮件发送,linux,bash,git,email,Linux,Bash,Git,Email,这是我的小剧本。。。它所做的只是遍历一些文件夹,检查修改过的文件,提交对git的更改,但同时将通过电子邮件发送的git消息的输出存储为raport: #!/bin/bash enviromentName=xyz serverName=abc serverSize=1GB cd /home/$enviromentName/domains/ domainsArray=(*/) changes=0 message="Usage (max ${serverSize}): $(du -h --max-

这是我的小剧本。。。它所做的只是遍历一些文件夹,检查修改过的文件,提交对git的更改,但同时将通过电子邮件发送的git消息的输出存储为raport:

#!/bin/bash

enviromentName=xyz
serverName=abc
serverSize=1GB

cd /home/$enviromentName/domains/
domainsArray=(*/)
changes=0
message="Usage (max ${serverSize}): $(du -h --max-depth=0 | head -n1 | awk '{print $1;}')\n"
currentDate=$(date +%Y%m%d)

cd /home/$enviromentName/
for i in "${domainsArray[@]}"
do
        cd /home/$enviromentName/domains/$i/public_html/
        gitstatus=$(git status)
        if echo $gitstatus | grep -v -q "nothing to commit, working directory clean"; then
                message+="\n"
                message+="  Git Changes made to ${i}:\n"
                message+="'$gitstatus'\n"
                message+="$(git add .)\n"
                message+="$(git commit -m ${currentDate})\n"
                message+="\n"
                changes=1
        fi
done

if [ "$changes" -eq "1" ]; then
        #echo "Changes done"
        echo -e ${message}|mail -s "${serverName} logs" marcin@citystudio.pl
fi
脚本的输出如下所示:

Usage (max 1GB): 0.5G

Git Changes made to foldername/:
'On branch master Untracked files: (use "git add <file>..." to include in what will be committed) test.php nothing added to commit but untracked files present (use "git add" to track)'

[master d4d3916] 20190707 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public_html/test.file
使用量(最大1GB):0.5G
对foldername/所做的Git更改:
'On branch master Untracked files:(使用“git add…”包含在将要提交的内容中)test.php除了存在未跟踪的文件外,未添加任何内容以提交(使用“git add”跟踪)'
[master d4d3916]20190707 1文件已更改,0次插入(+),0次删除(-)创建模式100644 public_html/test.file
看起来git命令输出的所有换行符似乎都消失了。我应该如何修改脚本以使输出如下所示:

Usage (max 1GB): 0.5G

  Git Changes made to foldername/:
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    test.php

no changes added to commit (use "git add" and/or "git commit -a")
[master 86f39b9] 20190707
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 public_html/test.php
使用量(最大1GB):0.5G
对foldername/所做的Git更改:
论分行行长
未为提交而暂存的更改:
(使用“git add/rm…”更新将提交的内容)
(使用“git签出--…”放弃工作目录中的更改)
删除:test.php
未向提交添加任何更改(使用“git add”和/或“git commit-a”)
[master 86f39b9]20190707
1个文件已更改,0个插入(+),0个删除(-)
删除模式100644 public_html/test.php

出现此问题的原因是
%{}
会删除尾随的换行符。你所需要做的就是改变

echo -e ${message}|mail -s "${serverName} logs" marcin@citystudio.pl


链接提供了一些很好的附加信息。

正确的解决方案,错误的解释。它不是“剥离”换行符,而是将所有空格(通常是空格、制表符和换行符)转换为“单词”分隔符,将生成的“单词”作为参数传递给
echo
,然后
echo
将其参数与空格拼接在一起。如果任何“单词”包含任何看起来像文件名通配符的内容,它也会尝试扩展这些内容;当你不这样做的时候,这只是许多可能出错的事情之一。请参见,每次
cd
,您都应该检查错误,否则故障可能会使下一位脚本在错误的地方运行。善于指出这样的常见错误。最后,避免使用
echo-e
,因为它不适用于所有版本的
echo
(我曾经有过一次操作系统版本升级,因为我使用了
echo-n
,这也有同样的问题)。相反,使用ANSI C引用模式在字符串中包含文字换行符,例如
message+=$'\n'
echo -e "${message}"|mail -s "${serverName} logs" marcin@citystudio.pl