как получить csh сценарий от среды удара?

Я использую оболочку удара, но некоторые сценарии, которые я должен получить, находятся в csh формате. Кто-то может сказать, как я могу получить csh сценарии от оболочки удара?

Путем определения источника я подразумеваю, что полученный csh сценарий должен смочь установить переменные среды. Так, я хочу выполнить в чем-то вроде этого мой ~/.bashrc:

source path/to/csh_script/script.cshrc
2
задан 11 December 2015 в 01:16

2 ответа

удар не выполнит все csh сценарии отлично. Может быть некоторое основное перекрытие, как очень простой удар, который сценарии выполнят в sh/dash, но если этому не удается работать в ударе (тест с bash [file]) тогда, это - остановка. Или

  • изменяют их для выполнения в ударе, или
  • выполняет их с csh, названным из сценария удара, как будто Вы выполняете их в терминале, имение их возвращает значение результата или делает то, что они, как предполагается. Это не оставило бы переменные или функции доступными основному сценарию удара, как Вы прокомментировали, таким образом, Вы будете или

    • , сделали, чтобы они сделали то, что они, как предполагается, делают во внешние файлы, или
    • возвращают единственное значение/строку, или возможно
    • рассматривают их как другая программа и читают несколько строк вывода в Ваш сценарий удара.

, Если Вы просто обращаетесь к исходным переменным, теоретически возможно пройти csh сценарий линию за линией и добавляющий просто переменные в текущую оболочку/сценарий удара. Что-то подобное этому:

while read line
do
[stuff with $line]
done < /path/to/[the csh script to add]

я не знаю, как все переменные размечаются в сценариях, Вы получаете, так Вам решать, что [наполняют $line], должен быть.

  • , Если они похожи удар , тогда возможно, просто grep какие-либо строки, которые начинаются с пробелов или символов, имейте = с дополнительно большим количеством символов без пробелов, таким образом:

    эхо "$line" | grep '^\s*\S*=\S*'

  • или как выше с чем-либо после = с:

    эхо "$line" | grep '^\s*\S*=.*'

, Но я думаю csh переменные, которые все запускают с set / setenv, так могли найти set/setenv строки, затем вывести set/setenv. Попробуйте как начинающий:

echo "$line" | grep '^\s*\S*set.*=.*'

Это - просто быстрый образец grep / regex шаблоны, видит этот & тот & другие для большего количества информации

Или, если это - только несколько из них, проходят их вручную & вставьте все переменные в bash/sh совместимые файлы, которые можно тогда получить в ударе без проблем.

2
ответ дан 2 December 2019 в 03:50

Строка хижины уже заботится об этом для Вас. При выполнении сценария, который имеет #! /bin/csh -f так же первая строка, система распознает #! часть как сценарий и загрузится, любой интерпретатор определяется после него (в этом случае /bin/csh).

, С другой стороны, Вы могли назвать интерпретатор явно, с csh /path/to/script.csh.

Вот маленькая демонстрация. Моя интерактивная оболочка mksh, и я называю простое csh сценарий:

xieerqi:
$ cat bin/whiledemo.csh                                                                       
#! /bin/csh -f 
# demoloop.csh - Sample loop script 
set j = 1
 while ( $j <= 5 )
   echo "Welcome $j times"
   @ j++
 end

xieerqi:
$ echo $SHELL
/bin/mksh

xieerqi:
$ bin/whiledemo.csh                                                                           
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times

xieerqi:
$ csh bin/whiledemo.csh                                                                       
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times

Примечание, которое, если у Вас есть даже одно пространство перед #!, эти #!, не будет интерпретироваться, следовательно сценарий, будет работать с Вашей интерактивной оболочкой, от которой Вы называете сценарий. Естественно, можно ожидать, что сценарий перестанет работать из-за другого синтаксиса между сценарием и что ожидает интерактивная оболочка. В процессе записи этого ответа я встретился с этой точной ошибкой.

0
ответ дан 2 December 2019 в 03:50

Другие вопросы по тегам:

Похожие вопросы: