Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
bash脚本输出到另一个文件以供conky读取_Bash - Fatal编程技术网

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