[Wine] Script to run Wine and save log

Gert van den Berg wine-users at mohag.net
Wed Jun 24 16:30:14 CDT 2009


On Wed, Jun 24, 2009 at 21:52, Austin English<austinenglish at gmail.com> wrote:
> On Wed, Jun 24, 2009 at 2:38 PM, Gert van den Berg<wine-users at mohag.net> wrote:
>> TODO:
>> 1. Distro detection with lsb_release if available.
>
> Not all distro's use lsb_release. /etc/release, /etc/issue,
> /etc/redhat-release, etc. are other popular ways to get that info.
> Keep in mind, not everyone uses Linux ;-). `uname -s` will give you
> the OS type (in a portable way).
>
There is a uname -a further down.

lsb_release works nice for identifying the Linux distro, *if* it is
present... (And for now at least, uname should be suffiecient on
non-Linux anyway, except maybe with some OpenSolaris distributions...)

> It'd be better to take WINE as an environmental variable first, that
> way the user can specify which they want. E.g., I keep 'vanilla' wine
> installed in /usr/local/bin, but when testing, may run from
> $HOME/wine-git. Many users have custom versions in random places. You
> should use wine="`which wine`" as a fallback.

Fixed with an ugly hack....

>
>> WINEPREFIX="${WINEPREFIX:-$HOME/.wine}" export state not changed
>
> Not sure what you're trying to do with the 'export ...'. Was that
> meant to a comment? Output to the log?
>

Should have been comment...

>> date=`date +%Y%m%d-%H:%M:%S`
>>
>> if [ -d "$WINEPREFIX" ]; then
>>        wineprefixstatus="Not clean"
>> else
>>        wineprefixstatus="Clean"
>> fi
>
> the '[ ] ; then' isn't portable (just found this out myself ;-) ). Put
> the 'then' on a separate line, remove the ';'.
>

"Why I normally use Perl ;)"

(I *know* it works under bash on Solaris, I usually don't bother with
plain Bourne...)

>> if ! winever=`$wine --version` 2> /dev/null; then
>>        echo "Fatal error: Cannot run wine with command '$wine'!" 1>&2
>>        exit 1
>
> Move this up earlier with the wine check.

Done

> Should be $wine
>
Fixed

Thanks, I could probably do with a more elegant implementation of
setting the wine variable than the "set it, overwrite it
afterwards"-method.. (It should probably default to `which wine` and
only change if a variable is set ($WINE currently).)

Uploaded new version. (I would probably need to do some kind of
version control eventually and actually add version numbers...)

Added some of PleegWat's off-list suggestions as well.

Somethings that would be nice to add (preferably with a proper option parser):
Graphics card model / driver detection (Portability might be hard....)
State of common problematic processes, such as pulseaudio / compiz
Logged in user (`id` should work..)

(I should probably test it on my MacBook and the OpenSolaris box that
I'm planning to install soon...)

Gert

Code:
#!/bin/sh
# wine_with_log: Script for running wine while showing and logging output
# Gert van den Berg, 24 June 2009
# This script is released into the public domain
#
# The script prefers a wine-git in the home directory, followed by a
wine in /usr/local
# and /usr, with the system's default wine version being tried last

logpath="$HOME/wine-logs"

if [ -x "$HOME/wine-git/wine" ]
then
	wine="$HOME/wine-git/wine"
elif [ -x /usr/local/bin/wine ]
then
	wine="/usr/local/bin/wine"
elif [ -x /usr/bin/wine ]
then
	wine="/usr/bin/wine"
else
	wine="`which wine`"
fi

# If WINE is defined, we override $wine
wine="${WINE:-$wine}"

# Get Wine version number
if ! winever="`$wine --version`" 2> /dev/null; then
	echo "Fatal error: Cannot run wine with command '$wine'!" 1>&2
	exit 1
fi

# We don't export WINPREFIX, in case the dault change, but assume a
default of ~/.wine
WINEPREFIX="${WINEPREFIX:-$HOME/.wine}"
date="`date +%Y%m%d-%H:%M:%S`"

if [ -d "$WINEPREFIX" ]
then
	wineprefixstatus="Pre-existing"
else
	wineprefixstatus="Clean"
fi

if ! ( [ -d "$logpath" ] || mkdir "$logpath" 2> /dev/null )
then
	echo "Fatal Error: Cannot create / find log path '$logpath'" 1>&2
	exit 2
fi

logname="$logpath/$1.$date.$winever.log"

( # indentation broken to ensure correct log header output
	echo "----------------------------------------------------------
Wine version: $winever
WINEPREFIX: '$WINEPREFIX'
WINEPREFIX state: '$wineprefixstatus'
Working directory: '`pwd`'
Date: `date`
OS info (uname -a): '`uname -a`'
Command: '$wine $@'
----------------------------------------------------------"
	"$wine" "$@" 2>&1
	echo "----------------------------------------------------------"
) |tee -a "$logname"



More information about the wine-users mailing list