Установка переменной окружения в csh - PullRequest
1 голос
/ 16 марта 2012

В моем файле сценария есть следующая строка:

#!/bin/sh

Так что я использую csh. (?)

Я хочу присвоить выходные данные следующей переменной среды:

echo $MYUSR | awk '{print substr($0,4)}'

Я пытаюсь:

set $MYVAR = echo $MYUSR | awk '{print substr($0,4)}'

Но это не работает, Как мне это сделать? Я хочу сделать это в файле sh.

Ответы [ 4 ]

2 голосов
/ 16 марта 2012

Ваш скрипт должен выглядеть как

 #!/bin/csh

 set MYVAR = `echo $MYUSR | awk '{print substr($0,4)}'`

 echo $MYVAR

У меня нет способа проверить это сейчас, позвольте мне сейчас, если это не сработает.


Если вы унаследовали основу вашего скрипта от кого-то другого, с #!/bin/sh, тогда вам нужно выяснить, является ли / bin / sh действительно оболочкой bourne, или это ссылка на / bin / bash

Вы можете сказать это, выполнив

   ls -l /bin/sh /bin/bash

если вы получите информацию о файлах, размер которых точно такой же, то вы действительно используете bash, но он называется / bin / sh

Так что попробуйте эти 2 решения

   MYVAR=$(echo $MYUSR | awk '{print substr($0,4)}')
   echo $MYVAR

И

   MYVAR=``echo $MYUSR | awk '{print substr($0,4)}``  
   echo $MYVAR

   # arg!! only one pair of enclosing back-ticks needed, 
   # can't find the secret escape codes to make this look exactly right.

во всех включенных случаях (csh) обратные галочки И $( ... ) известны как подстановка команд. То, что каждый вывод приходит при выполнении команды внутри, подставляется в командную строку И затем выполняется вся команда.

Надеюсь, это поможет.

0 голосов
/ 19 мая 2012

Первая строка вашего кода ясно показывает, что вы не используете csh. Вы используете простую sh среду / оболочку. У вас есть 2 варианта:

  1. Либо измените первую строку на #!/bin/csh ИЛИ
  2. Оставив первую строку без изменений, обновите код для установки переменной.

    MYVAR=`echo $MYUSR | awk '{print substr($0,4)}`
    echo $MYVAR
    

Дайте мне знать, если возникнет какая-либо ошибка.

0 голосов
/ 16 марта 2012

Эта первая строка сценария указывает, что он должен интерпретироваться оболочкой Bourne (sh), а не csh.Измените его на

#!/bin/csh
0 голосов
/ 16 марта 2012

, если это /bin/sh, это оболочка Bourne или bash, и используйте обратные кавычки, чтобы выполнить что-то, и это, чтобы назначить это ...

MYVAR=`echo $MYUSR | awk ...`
...