sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #55886
startx løsningen ? Was: tvout
On Mon, Oct 14, 2002 at 00:36:34 +0200, Esben Skov Pedersen wrote:
....
> > Erstat $FILNAVN med $1 og husk at sætte "" om filnavnet *og* $1 .
>
> nu har jeg: startx /usr/bin/xine -gfp "$1" -- :1 -screen tv i
> /usr/local/bin/tvout Anden del af filnavnet kommer aldrig frem kan jeg
> se på xine's fejlmeddelse. Det virker ellers fint nok hvis jeg bare har
> xine "$1" i tvout. Det må altså være et startx problem.
Ja du må se i startx (som er et shellscript) der fortolker
argumenterne.
Det er den while/case der anvendes giver problemer med
filer med mellemrum (dårligt programmeret shell program):
clientargs="$clientargs $1"
....
xinit $clientargs -- ......
Denne strengmanipulation laver $1 om til en tekststreng
og det giver problemerne ;(
Men øverst i startx står der jo også:
#
# This is just a sample implementation of a slightly less primitive
# interface than xinit. It looks for user .xinitrc and .xserverrc
......
# Site administrators are STRONGLY urged to write nicer versions.
#
følgende eksempel vil vise problemet:
....snip. test.sh ....
#!/bin/sh
dotest_xinit () {
cnt=1
echo -n "dotest: "
while [ "x$1" != "x" ] ; do
echo -n " $cnt:<$1>";
let cnt=cnt+1
shift;
done
echo "";
}
echo "all: {$*}"
clientargs=""
cnt=1
echo -n "args: "
while [ "x$1" != "x" ] ; do
clientargs="$clientargs $1";
echo -n " $cnt:{$1}"
let cnt=cnt+1
shift;
done
echo ""
dotest_xinit $clientargs
....snip.....
$ ./test.sh "to dele"
all: {to dele}
args: 1:{to dele}
dotest: 1:<to> 2:<dele>
;-((
Løsningen kunne være at i ovenstående ekspempel erstatte
nederste del med:
.......
declare -a clientargs
cnt=0
while [ "x$1" != "x" ]; do
clientargs[$cnt]="$1"
let cnt=cnt+1
echo -n " $cnt:{$1}"
shift;
done
echo ""
dotest "${clientargs[@]}"
....snip....
$ ./test.sh "to dele" "to mere"
all: {to dele to mere}
args: 1:{to dele} 2:{to mere}
dotest: 1:<to dele> 2:<to mere>
Det betyder dog at startx skal tilrettes lidt
alle steder hvor clientargs tildeles værdi
(og oprettes som array med declare -a)
tildeling f.eks.:
clientargs=( "$var" )
tilføjelse af element:
clientargs=( "${clientargs[@]" "$1")
brug ved kald:
xinit "${clientargs[@]}" -- ......
PS.
Måske man skulle foreslå Xfree86 den tilrettede version
som ny sample fil ?
--
mvh Frank Damgaard |
References
-
tvout
From: Esben Skov Pedersen, 2002-10-13
-
Re: tvout
From: Frank Damgaard, 2002-10-13
-
Re: tvout
From: Esben Skov Pedersen, 2002-10-13