2016-09-02 3 views
1

Пока человек за env в Linux, похоже, указывает, что перед выполнением команды вы можете установить новые переменные среды. К сожалению, когда я устанавливаю новые переменные в shebang файла в системах Linux, файл никогда не выполняется.Установка переменной среды в/usr/bin/env зависает в Linux

#!/usr/bin/env VAR1=foo bash 
echo $VAR1 

Когда я запускаю этот файл на компьютере CentOS или Ubuntu, он просто сидит там.

$ ./shell-env.sh 
<nothing happens> 

Что я нахожу особенно странным является то, что это работает прекрасно на OS X с BSD env.

$ ./shell-env.sh 
foo 
$ 

Является ли это просто разница между BSD env и Linux env? Почему страницы man для Linux, похоже, говорят, что они должны работать так же, как на BSD?

P.S. Моим вариантом использования является переопределение переменной PATH, поэтому я могу попытаться найти ruby в системе, но это не на PATH.

Спасибо заранее!

+1

Вы переопределяете 'PATH'? Если да, то ваш новый PATH включает 'bash'? –

+1

Вы можете использовать 'env' для установки переменной перед выполнением команды _ из командной строки_, но не в shebang в Linux. – mwp

+0

Этот Q ** может быть более уместным на S.E. сайт http://unix.stackexchange.com (Unix & Linux). Подумайте, используя ссылку 'flag' в нижней части вашего Q и попросите модератора переместить ее. Пожалуйста, не публикуйте те же Q на двух разных сайтах. Спасибо и удачи. – shellter

ответ

1

Там есть способ управлять окружающей средой перед выполнением сценария Ruby, без использования обертки скрипта какого-то, но это не очень:

#!/bin/bash 
export FOO=bar 
exec ruby -x "$0" "[email protected]" 

#!ruby 
puts ENV['FOO'] 

Это, как правило, зарезервирован для сложных ситуаций, когда вам нужно манипулировать например PATH или LD_LIBRARY_PATH перед выполнением программы, и по какой-то причине она должна быть автономной. Он работает и для Perl, и, возможно, для других!

+0

Это потрясающе, спасибо! Это именно то, что я искал. –

Смежные вопросы