首先生成该脚本:
Code: Select all
nano -w /usr/local/bin/k4worldmerge
内容如下,简单进行拷贝和粘贴即可:
Code: Select all
#!/bin/bash
## /usr/local/bin/k4worldmerge
## writen by ts in April. 2006
## Report bugs to tearstone@gmail.com
source /sbin/functions.sh
## help info
case "$1" in
"-h" | "--help" | "h" | "-?" | "?" )
echo ""
einfo 'A script for emerging world smoothly, and'
einfo 'lists of emerge, such as failed packages.'
echo
ewarn 'Usage:'
einfo 'emerge -e world || k4worldmerge'
einfo 'emerge -Duv world || k4worldmerge'
echo "" &&
exit;;
esac
## check user ID
[ "$UID" -ne "0" ] && eerror "Must be root to run this script." && exit
## check whether emerge fails for error, if true, resume it
while [[ $(tail /var/log/emerge.log |grep \>\>\> |awk '{print $6}'| \
sed /[[:alpha:]]/d |sed s/\)// |sed '/^$/d'|sed '$!d') -gt \
$(tail /var/log/emerge.log |grep \>\>\> |awk '{print $4}'| \
sed /[[:alpha:]]/d |sed s/\(// |sed '/^$/d' |sed '$!d') ]]
do
[[ ! $( ps aux |grep root| sed /watch/d |sed /grep/d | sed /tail/d |grep emerge ) ]] && \
echo "emerge is failed! Now, resume it and skipfirst." && \
emerge --resume --skipfirst 2>/dev/null
sleep 5
done
echo
## parameter for tail to retrieve info of lastest emerged world
logNum4lastWorld=$(awk '/world/{print NR}' /var/log/emerge.log |sed '$!d')
logTotal=$(sed -n '$=' /var/log/emerge.log)
(( n = $logTotal - $logNum4lastWorld ))
## information
echo
einfo get info from \"tail -n\ $n /var/log/emerge.log\"echo
echo
ewarn 'generate lists for emerge -e or -Duv world'
echo
einfo emerged " "list: /tmp/failedpkgs/emerged.pkg
einfo completed list: /tmp/failedpkgs/completed.pkg
einfo failed " "list: /tmp/failedpkgs/failed.pkg
echo
## make dir for lists
[[ ! -d /tmp/failedpkgs ]] && mkdir -p /tmp/failedpkgs
## rm old /tmp/failedpkgs/*.pkg file
[[ -e /tmp/failedpkgs/emerged.pkg ]] && rm /tmp/failedpkgs/*.pkg 2>/dev/null
## get list for all emerged packages
[[ $(tail /var/log/emerge.log | grep \>\>\> |sed '/(1 of 1)/d'| \
awk '{print $6}'|sed /[[:alpha:]]/d|sed s/\)//|sed '/^$/d'|sed '$!d') -gt \
$(tail /var/log/emerge.log | grep \>\>\> |sed '/(1 of 1)/d'|awk '{print $4}'| \
sed /[[:alpha:]]/d|sed s/\(//|sed '/^$/d'|sed '$!d') ]] && \
tail -n "$n" /var/log/emerge.log | \
grep \>\>\> |grep emerge| awk '{print $4 " " $5 " " $6 "\t" $7}'|sed '$d' |awk '!($0 in a) {a[$0];print}' \
>> /tmp/failedpkgs/emerged.pkg || \
tail -n "$n" /var/log/emerge.log | \
grep \>\>\> |grep emerge| awk '{print $4 " " $5 " " $6 "\t" $7}'|awk '!($0 in a) {a[$0];print}' \
>> /tmp/failedpkgs/emerged.pkg
## get list for completed packages
tail -n "$n" /var/log/emerge.log | \
grep \:\:\: |grep emerge| awk '{print $5 " " $6 " " $7 "\t" $8}' | awk '!($0 in a) {a[$0];print}' \
>> /tmp/failedpkgs/completed.pkg
## build list for failed packages
while read pkgNum to pkgTotal pkgname
do
[[ ! $(grep $pkgname /tmp/failedpkgs/completed.pkg) ]] && \
echo $pkgname >> /tmp/failedpkgs/failed.pkg
done < /tmp/failedpkgs/emerged.pkg
chmod 666 /tmp/failedpkgs/*
## print out fail info
[[ ! -e /tmp/failedpkgs/failed.pkg ]] || [[ ! $(cat /tmp/failedpkgs/failed.pkg) ]] && \
einfo no failed packages
[[ -e /tmp/failedpkgs/failed.pkg ]] && [[ $(cat /tmp/failedpkgs/failed.pkg) ]] && \
eerror failed packages && \
for i in $(cat /tmp/failedpkgs/failed.pkg); \
do grep $i /tmp/failedpkgs/emerged.pkg |awk '!($0 in a) {a[$0];print}'; \
done
echo
Code: Select all
chmod +x /usr/local/bin/k4worldmergeCode: Select all
/usr/local/bin/k4worldmerge --helpGood luck!

