If you try to run a Windows command-line app on Linux under WINE, you may find that filename arguments yield errors like the following:
$ wine z3.exe -smt /tmp/smtlib2b129a.smt Error: invalid command line option: /tmp/smtlib2b129a.smt For usage information: z3 /h
The problem here is that the ‘/’ at the beginning of an absolute path can be interpreted as the beginning of a Windows-style command-line argument. The following script takes a Windows command-line and Windows-ifies Unix path arguments.
#! /bin/bash
if [ "${1+set}" != "set" ]
then
echo "Usage; winewrap EXEC [ARGS...]"
exit 1
fi
EXEC="$1"
shift
for p in "$@";
do
if [ -e "$p" ];
then
p=$(winepath -w "$p")
fi
ARGS="$ARGS $p"
done
wine "$EXEC" $ARGS
The script can be used thus:
$ winewrap z3.exe -smt /tmp/smtlib2b129a.smt
Which will execute
wine z3.exe -smt Z:\tmp\smtlib2b129a.smt
P.S. You can also just use the WINE drive mapping (in this case / == Z:\), but I’d rather keep my Unix mindset and let the script do the work.




