Miksi SHELL osoittaa / bin / sh Csh-komentosarjassa?

Kyllä, tiedän, että C-shell on huono. Ei, en valinnut C-kuorta. Kyllä, haluaisin mieluummin käyttää oikeaa kuorta. Ei, en voi vaihtaa parempaan kuoreen.

Minulla on hyvin yksinkertainen komentosarja:

/tmp/env_test.csh

#!/bin/csh -f env 

Kun suoritan tämän komentosarjan käyttäjältäni, joka on kirjautunut sisään tcsh-kuorella, SHELL on yhtä suuri kuin /bin/tcsh. Kun suoritan tämän komentosarjan cronista, SHELL on yhtä suuri kuin /bin/sh.

Miksi SHELLiä ei päivitetä asianmukaisesti? Mitä minun on tehtävä ongelman ratkaisemiseksi?

Kommentit

  • Miksi ongelma on silti?
  • @muru Tämän kompastumisen ja ratkaisun löytämisen jälkeen näyttää siltä, että se on ' ongelma, koska perlbrew ei ' t ilmeisesti sopivasti " sense " kuori on [t] csh, jos $SHELL ei ole asetettu oikeaan kuoreen. Kun cron on käynnissä käyttämällä /bin/sh, $SHELL=/bin/sh, myös C-shell-komentosarjan käynnistämisen jälkeen (#!/bin/csh -f). Sitten Perlbrew olettaa ' Bourne-kuoren ja käyttää Bourne-kuorikomentoja ympäristön asettamiseen. Näin tapahtuu huolimatta siitä, että source <perlbrew path>/perlbrew/etc/cshrc on suoritettu ennen perlbrew use -ajon suorittamista. Ratkaisin tämän lisäämällä setenv SHELL /bin/csh perlbrew-cshrc-tiedostoon.

Vastaus

Katso man 1 csh. Osiossa Pre-defined and environment variables on luettelo muuttujista, jotka csh määrittelevät tai kunnioittavat. Pienillä kirjaimilla on muuttuja shell:

 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. 

Joten katsotaanpa:

% echo $shell /bin/csh 

Kommentit

  • Joten siitä, mitä voin kertoa useiden testien jälkeen, $ shell ei ole todellinen ympäristö muuttuja, vaan pikemminkin kuorella tulkittu muuttuja. echo $shell palauttaa komentosarjan /bin/tcsh, mutta env | grep -i shell ei löydä oikeaa muuttujaa cronista. Muista paikoista (kuten tämä vastaus ) ymmärsin, että $SHELL pitäisi asettaa. Todellakin, aktiivisessa kirjautumissähköpostissani se onkin. Ainoa paikka, josta en saa ', et id cron.

Vastaus

Sinun tulisi asettaa muuttuja SHELL /bin/csh -sivustolle voit tarkistaa cron-ympäristömuuttujan seuraavasti:

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

Oletusasetuksen SHELL arvoksi tulisi asettaa /bin/sh.

SO: Kuinka simuloida ympäristöä, cron suorittaa komentosarjan?

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *