( stra | 2012. 01. 21., szo – 17:52 )

Ahogy a manból is idézted: "The commands in the specified file are read and executed by the shell.". Shell, és nem subshell. Az "érdekességek" részből úgy veszem észre, éppen ezt a lényeget nem találtad meg a fentiekben. Minimálisan kifejtve hozzávetőlegesen ezek az okok:

Source-ot (.) használsz, tehát ennek hatására az alapeset ez:


  #!/bin/sh
  # második script: prb-source.sh
  #!/bin/sh
  # első script: what-shell.sh
  export REF_SHELL=`ps -e -o pid,cmd | grep $$ |grep -v grep | awk '{print $2}'`
  if [ -h $REF_SHELL ]
  then
    export REF_SHELL=`readlink $REF_SHELL`
  fi
  echo "using shell: $REF_SHELL"
  echo "REF_SHELL = $REF_SHELL"

 
"Ha az első scriptben a hasbang -et átírom /bin/bash -ra (a második scriptben marad a /bin/sh - azaz jelen esetben dash) a REF_SHELL /dash lesz."
Mert az egy egyszerű komment lesz. (Az első sorban pedig egy, a hívó shell által speciálisan értelmezett komment.) Megközelítőleg így:


  #!/bin/sh
  # második script: prb-source.sh
  #!/bin/bash
  # első script: what-shell.sh
  export REF_SHELL=`ps -e -o pid,cmd | grep $$ |grep -v grep | awk '{print $2}'`
  if [ -h $REF_SHELL ]
  then
    export REF_SHELL=`readlink $REF_SHELL`
  fi
  echo "using shell: $REF_SHELL"
  echo "REF_SHELL = $REF_SHELL"

 
 
"Ha a második scriptben, a hashbang -er /bin/bash -ra teszem akkor REF_SHELL értéke /bin/bash lesz."
Természetesen, mivel az az első sor, ennek megfelelően van megkülönböztetett jelentősége.
 
 
"Ha az eslő scriptben a második, feltételes értékadásból kiveszem aaz "export" kulcsszót akkor is a helyes érték "jön át" az első scriptbe vagyis dash (mindkét scriptben a hashbang /bin/sh)."
Az ok ugyanaz, mint ami a többinél. Ahogy Kambus írta, ez innentől egyetlen scriptnek tekinthető, tehát az export nem oszt, nem szoroz. (A feltételben meg felesleges másodszor is exportra jelölni a változót, mivel már megtetted előtte.)

Ha saját szemmel is meg akarsz győződni a fentiekről, akkor tegyél a shell neve mögé egy -v paramétert is (vagy set -o verbose).