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 $shellvrací/bin/tcshze skriptu, aleenv | grep -i shellnenalezne správnou proměnnou v cronu. Podle mého chápání z jiných míst (například tato odpověď )$SHELLby 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$SHELLje 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.