← Back to team overview

sslug-teknik team mailing list archive

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