subversion a korn shell ellen

 ( NevemTeve | 2018. július 16., hétfő - 17:27 )

subversion-1.10.0 fordítása során merült fel némi gond, ami végül ahhoz a kérdéshez vezetett el, hogy mit kellene csináljon ez a shell-utasítás:

echo "`Unused_variable=" $random_variable"`"

Ebben ott vélem a gondot látni, hogy a "macskakörmön" belül van a `backtick`, és azon belül van az újabb "macskaköröm". Mindenesetre nincs gond, ha ha `backtick` helyett $(cmd) van, vagy ha a belső macskakörmön belül nincs szóköz. Vagy ha a bash/dash/zsh shellt használunk.

Az érdekesség kedvéért itt az igazi kódrészlet is (sorszámokkal):

  4913    LDFLAGS="$LDFLAGS `
  4914    input_flags="$apr_ldflags"
  4915    output_flags=""
  4916    filtered_dirs="/usr/local/lib64"
  4917    for flag in $input_flags; do
  4918      filter="no"
  4919      for dir in $filtered_dirs; do
  4920        if test "$flag" = "-L$dir" || test "$flag" = "-L$dir/"; then
  4921          filter="yes"
  4922          break
  4923        fi
  4924      done
  4925      if test "$filter" = "no"; then
  4926        output_flags="$output_flags $flag"
  4927      fi
  4928    done
  4929    if test -n "$output_flags"; then
  4930      printf "%s" "${output_flags# }"
  4931    fi
  4932  `"

A hibaüzenet:

./configure[4926]: : cannot execute
./configure[4926]: syntax error at line 4926 : `then' unmatched

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Az echo-nál az a kérdés, hogy mit akarsz csinálni - mert ha azt mondodt, hogy a macskakörmön belül van a backtick és azon *belül* a másik macskaköröm, akkor szerintem a *belső* macskaköröm elé kéne egy rep-jel.

Hogy a script miért ha el, azt még csak nem is értem. (Azt meg pláne nem, hogy miért test || test áll és nem egy db test a -a operátorral.)

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

És a legrosszabb az, hogy nem is svn-t akartam eredetileg, hanem cmake-t, csak függősége nekije az svn. https://tvtropes.org/pmwiki/pmwiki.php/Main/NotMakingThisUpDisclaimer

Most gyorsan megnéztem, ha a belső idézőjeleket takarom, akkor se kapom ezt az agyhalott hibát:

$ echo "`Unused_variable=\" $random_variable\"`" 

$ echo "`Unused_variable=" $random_variable"`"  
ksh: : cannot execute [Ez egy könyvtár]
 
$ 

Annyival jobb a helyzet, hogy a sokkal rövidebb, és olvashatóbb formával is látszik, hogy mi a gond:

$ "`"
ksh: : cannot execute [Ez egy könyvtár]
ksh: : cannot execute [Ez egy könyvtár]
$ 

Igen, két hibaüzi is van. És ha ezt írod, akkor lassan meg is lesz a dolog:

$ "` `"
ksh: : cannot execute [Ez egy könyvtár]
$ 

Szóval annyi, hogy a Korn-shell előre veszi a nyitó zárójel párjának megtalálását, és csak utána kezdi el a `-et értelmezni. A backtickek között meg elvárja, hogy valami értelmes parancs legyen.

Fenti két furcsa parancs bash-ban:

$ "`"
> `
> "
bash: command substitution: sor: 1: váratlan EOF „"” helyett
bash: command substitution: sor: 2: szintaktikai hiba: váratlan fájlvége

: a parancs nem található
$ "` `"
: a parancs nem található
$ 

Azaz a bash már a nyitó idézőjel után fontosnak érzi a backtick feldolgozását - függetlenül attól, hogy vége van-e már a "sztringnek".

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Köszönöm szépen, érdekesek ezek az eredmények, talán majd írok is valami bugregport félét subversion-éknek, hogy legyenek szívesek a $(cmd) formát használni, egyelőre lett egy 'export CONFIG_SHELL=/usr/local/bin/bash'; most éppen fordul.

Persze a cmake ott segít, ahol tud, esetünkben saját fordításában is részt vesz, és mivel nem tud a '-X64' című bűvős opcióról, ezért nem is fordul.

Mennyia _POSIX_ARG_MAX értéke a rendszerben?
Tippemre az a gond, hogy a ksh számára a backtikek között egyszerűen túl sok karakter van, és nincs akkora puffere.

Csináltam egy leegyszerűsített példát, a blogbejegyzés elején látható; a githubról leszedett új ksh-val is kijön a gond.