bash脚本输出到另一个文件以供conky读取
我怎么做这个bash脚本输出到另一个文件以供conky读取,bash,Bash,我怎么做这个 echo 'kindle' - `( du -sh /media/boudiccas/back1/obkindle |awk '{ print $1; }' )` 输出到另一个文件,只需给出一个名称和数字以及一个gb[2.0gb为例],然后conky就可以读取它了?所以最终输出将显示如下内容 kindle - 2.0gb 这是从cron作业每隔5分钟调用一次“baksize”的完整脚本(仅用于测试) echo 'kindle' - ` du -sh /media/boudic
echo 'kindle' - `( du -sh /media/boudiccas/back1/obkindle |awk '{ print $1; }' )`
输出到另一个文件,只需给出一个名称和数字以及一个gb[2.0gb为例],然后conky就可以读取它了?所以最终输出将显示如下内容
kindle - 2.0gb
这是从cron作业每隔5分钟调用一次“baksize”的完整脚本(仅用于测试)
echo 'kindle' - ` du -sh /media/boudiccas/back1/obkindle |awk '{ print $1; }'`>~/bin/backshow 'kindle-rsync' - `du -sh /media/boudiccas/back1/Kindle |awk '{ print $1; }'`>~/bin/backshow
echo 'home' - `du -sh /media/boudiccas/back1/obnam-home |awk '{ print $1; }'`>~/bin/backshow 'back4' - `du -sh /media/boudiccas/back1/obnam-back4 |awk '{ print $1; }'`>~/bin/backshow
echo 'blog' - `du -sh /media/boudiccas/back1/obblog |awk '{ print $1; }'`>~/bin/backshow 'blogrs' - `du -sh /media/boudiccas/back1/blogback |awk '{ print $1; }'`>~/bin/backshow
echo 'galaxyrs' - `du -sh /media/boudiccas/back1/galaxy |awk '{ print $1; }'`>~/bin/backshow 'back2a' - `du -sh /media/boudiccas/back1/ob-back2a |awk '{ print $1; }'`>~/bin/backshow
echo 'back2b' - `du -sh /media/boudiccas/back1/ob-back2b |awk '{ print $1; }'`>~/bin/backshow 'back2c' - `du -sh /media/boudiccas/back1/ob-back2c |awk '{ print $1; }'`>~/bin/backshow
这是“反演出”
使用
>filename
重定向到文件:
echo 'kindle' - `du -sh /media/boudiccas/back1/obkindle |awk '{ print $1; }'` > filename
您的需求不是100%清楚,因此此解决方案涵盖的变体很少
#!/bin/bash
file=~/bin/backshow
if ! >$file; then
echo "Error: Access issue while creating file";
exit 1;
fi
function ComposeFile() { #arg1 friendly_name; arg2 dir
size_kb=`(du -s $2 | awk '{print $1}') 2>/dev/null`;
if [ -n "${size_kb}" ]; then
#calculate into gb with 2 floting ponts controlled by scale
gb=`echo "scale=2; $size_kb / 1024 / 1024" | bc -l`;
#if you need wider columns change 25 into i.e. 35
printf '%-25s %-25s\n' "$1" "${gb}gb" >> $file
fi
}
ComposeFile temp /var/tmp
ComposeFile doesnt_exist /dummy
ComposeFile another_dir /opt
ComposeFile dell /opt/dell
ComposeFile blahblah /opt
ComposeFile ufffff /opt
#joins every second line
sed -i '$!N;s/\n/ /' $file
cat $file
exit 0;
新产出:
-bash-4.1$ ./stackoverflow.sh
temp 0gb another_dir 3.41gb
dell .30gb blahblah 3.41gb
ufffff 3.41gb
仅供参考,您不需要在backticks中使用
()
命令。不幸的是,它不起作用,因此我用进一步的信息完善了我的问题,但正如我所示,“backshow”在一行中仅获得两个输出实例。如果您想向同一个文件发送多个命令,请使用
将其附加到该文件中<代码>>覆盖。谢谢,这工作正常,但我担心“backshow”将包含大量输出,每次运行“stackoverflow.sh”时都会有输出。我们如何才能使“backshow”只包含“stackoverflow.sh”的最后一个输出?第三行抢占了这个文件“>$file”。我如何才能将“每行一个条目”输出到两列?它目前正在解析10个文件夹,这将更容易理解为2列。抱歉,Daniel,但它仍然在一列中,而不是希望的2printf被设置为2列printf'-25s%-25s\n''1'${gb}gb'>>$file
,您能为我提供一个所需输出的示例吗?
-bash-4.1$ ./stackoverflow.sh
temp 0gb another_dir 3.41gb
dell .30gb blahblah 3.41gb
ufffff 3.41gb