Miért mutat a SHELL a / bin / sh-re egy Csh szkriptben?

Igen, tudom, hogy a C-shell rossz. Nem, nem a C-shellt választottam. Igen, legszívesebben megfelelő héjat használnék. Nem, nem tudok jobb shellre váltani.

Nagyon leegyszerűsített szkriptem van:

/tmp/env_test.csh

#!/bin/csh -f env 

Amikor ezt a szkriptet a tcsh héjjal bejelentkezett felhasználómtól futtatom, SHELL megegyezik a /bin/tcsh értékkel. Amikor ezt a szkriptet a cron-ból futtatom, SHELL egyenlő: /bin/sh.

Miért nem frissítik megfelelően a SHELL-t? Mit kell tennem a probléma megoldása érdekében?

Megjegyzések

  • Miért is probléma ez egyáltalán?
  • @muru miután ezen megbotlott és megoldást talált, úgy tűnik, hogy ' probléma, mert a perlbrew nem látszik ' nyilvánvalóan megfelelően " sense " a héj [t] csh, ha a $SHELL nincs beállítva a megfelelő héjra. Amikor a cron a /bin/sh, $SHELL=/bin/sh használatával fut, még egy C-shell parancsfájl elindítása után is (#!/bin/csh -f). Ezután Perlbrew feltételezi, hogy ' egy Bourne-héj, és Bourne shell-parancsokkal használja a környezet beállítását. Ez annak ellenére történik, hogy a source <perlbrew path>/perlbrew/etc/cshrc futtatás előtt futott a perlbrew use. Ezt úgy oldottam meg, hogy beillesztettem a setenv SHELL /bin/csh fájlt a perlbrew cshrc-be.

Válasz

Nézze meg a man 1 csh oldalt. A Pre-defined and environment variables szakasz felsorolja, hogy a csh változók melyik változókat definiálják vagy tiszteletben tartják. Van egy shell változó kisbetűvel:

 shell The file in which the shell resides. This variable is used in forking shells to interpret files that have execute bits set, but which are not executable by the system. (See the descrip- tion of Non-builtin Command Execution below.) Initialized to the (system-dependent) home of the shell. 

Tehát nézzük meg:

% echo $shell /bin/csh 

Megjegyzések

  • Tehát abból, amit számos teszt után meg tudok mondani, a $ shell nem igazi környezet változó, hanem inkább egy shell által értelmezett változó. echo $shell /bin/tcsh visszatér a szkriptből, de env | grep -i shell nem találja meg a helyes változót a cronban. Más helyekről megértettem (például ezt a választ ), hogy $SHELL beállítást. Valóban, az aktív bejelentkezési héjban az. Csak ' nem kapok $SHELL cron.

Válasz

Be kell állítania a SHELL változót /bin/csh a crontrab-ban a cron környezeti változót a következőképpen ellenőrizheti:

* * * * * env > ~/cron-env tail -f ~/cron-env 

Az alapértelmezett SHELL értéket /bin/sh értékre kell állítani.

SO: Hogyan szimulálhatjuk a környezetet, a cron végrehajt egy szkriptet?

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük