Proč SHELL ukazuje na / bin / sh ve skriptu Csh?

Ano, vím, že C-shell je špatný. Ne, nevybral jsem si C-shell. Ano, raději bych použil správnou skořápku. Ne, nemohu přepnout na lepší prostředí.

Mám velmi zjednodušující skript:

/tmp/env_test.csh

#!/bin/csh -f env 

Když spustím tento skript od svého uživatele, který je přihlášen pomocí shellu tcsh, SHELL se rovná /bin/tcsh. Když spustím tento skript z cronu, SHELL se rovná /bin/sh.

Proč SHELL není správně aktualizován? Co musím udělat, abych tento problém vyřešil?

Komentáře

  • Proč je to přesto problém?
  • @muru po překonání tohoto problému a nalezení řešení se zdá, že je to ' problém, protože perlbrew zjevně vhodně iv id = „není ' 82bb9a685b „>

sense " shell je [t] csh, pokud $SHELL není nastaven na správný shell. Když cron běží pomocí /bin/sh, $SHELL=/bin/sh, a to i po spuštění skriptu C-shell (#!/bin/csh -f). Perlbrew pak předpokládá, že ' je prostředí Bourne a nastavuje prostředí pomocí příkazů prostředí Bourne. K tomu dochází navzdory spuštění source <perlbrew path>/perlbrew/etc/cshrc před spuštěním perlbrew use. Vyřešil jsem to vložením setenv SHELL /bin/csh do perlbrew cshrc.

Odpovědět

Podívejte se do man 1 csh. Sekce Pre-defined and environment variables uvádí, které proměnné csh definují nebo respektují. V malých písmenech je proměnná 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. 

Pojďme se tedy podívat:

% echo $shell /bin/csh 

Komentáře

  • Takže z toho, co mohu zjistit po několika testech, $ shell není skutečné prostředí proměnná, ale spíše proměnná interpretovaná pomocí shellu. echo $shell vrací /bin/tcsh ze skriptu, ale env | grep -i shell nenalezne správnou proměnnou v cronu. Podle mého chápání z jiných míst (například tato odpověď ) $SHELL by měl být nastaven. Ve svém aktivním přihlašovacím prostředí to skutečně je. Jediné místo, kde ' nedostanu $SHELL je cron.

Odpověď

Měli byste nastavit proměnnou SHELL do /bin/csh ve svém crontrabu můžete zkontrolovat proměnnou prostředí cron pomocí:

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

Výchozí SHELL by měl být nastaven na /bin/sh.

SO: Jak simulovat prostředí, ve kterém cron spouští skript?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *