2017-01-31 17 views
0

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

Надеясь на помощь любого здесь, спасибо заранее. У меня T.csh который выглядит следующим образом:

#! /bin/csh 

set a="01 02 03 04 05 06 07 08 09 10 11 12 13" 
set b="14 15 16 17 18 19 20 21 22 23 24 25" 
set c="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25" 

set X = `grep $1 EOL.txt | head -n1 | cut -d- -f1` 
printf "$X\n$2\n$3\nYYYY\n1\nN\n" 

переменных а, б и в, необязательно использовать в качестве 3-го аргумента в PRINTF линии. Проблема в том, что всякий раз, когда я пытаюсь запустить скрипт, он показывает неопределенную переменную. Эти заданные командные строки работают всякий раз, когда я назначаю их в интерактивном режиме, но внутри скрипта, похоже, не работает. Возможно, мне нужно инициализировать его, но не мог понять, как это сделать. Я просто хочу сказать, что кто-то здесь может мне помочь. Заранее большое спасибо.

Вот выполнение пробы и ошибки для справки:

CAT-46{bc2}40>set a="01 02 03 04 05 06 07 08 09 10 11 12 13" 
CAT-46{bc2}41>./T.csh 4773 XXXX.XX "$a" 
62 
XXXX.XX 
01 02 03 04 05 06 07 08 09 10 11 12 13 
82869 
1 
N 
CAT-46{bc2}42>unset a 
CAT-46{bc2}43>./T.csh 4773 XXXX.XX "$a" 
a: Undefined variable 
CAT-46{bc2}44> 

Если я установить переменные вручную, это нормально, но когда я позвонил к нему из сценария, его слабеющей неопределенной переменной ошибки.

Майк

+1

Вставьте точную ошибку, которую вы видите в своем вопросе. – codeforester

+0

И показать использование, которое включает $ a, $ b, $ c. Основываясь на другом Q вчера для csh, я считаю, что csh дросселирует пробелы в значениях для переменных назначений. (даже если они указаны). Поэтому убедитесь, что вы можете просто использовать один из этих варов (с пробелами в них), прежде чем тратить на это много времени. См. Http://grymoire.com/unix/csh.html для разумного учебника csh и обсуждения того, почему вы, вероятно, захотите использовать 'bash', если сможете. Удачи. – shellter

ответ

0
prompt> unset a 
prompt> ./T.csh 4773 XXXX.XX "$a" 

Первая команда "незадан", удаляет переменную. Во второй команде вы пытаетесь прочитать переменную (в командной строке!). Вот почему csh жалуется.

+0

привет @linuxfan, я просто показал на этом примере, что команда set работает над моей оболочкой. Внутри T.csh я также объявлял ту же команду набора, поэтому я ожидаю, что ее можно вызвать и при ее выполнении, но ее нет. – Mike

+0

№ Комплект ** работает ** в T.csh (при условии, что csh действительно находится в/bin - вы уверены?). Но если вы в интерактивном режиме сделаете «unset a», а затем «blabla $ a», **, который ** не может работать. – linuxfan

+0

Невозможно отключить переменные для этого случая. Что касается csh, то его в/bin. Любая идея, почему он показывает неопределенную переменную, когда T.csh выполняется, хотя объявление было сделано в скрипте? – Mike

0

Я отправляю другой ответ, потому что комментарий слишком короткий. Посмотрите на следующее.

У меня есть сценарий с именем /tmp/T.csh:

#!/bin/csh 
set a="blah" 
echo $a 
  1. Моя оболочка баш; Я печатаю /tmp/T.csh: результат blah (csh выполнил скрипт).
  2. Еще в bash; Я печатаю unset a; /tmp/T.csh $a: результат такой же.
  3. Еще в bash; Я печатаю . /tmp/T.csh: нет результата (bash выполнил скрипт).
  4. I тип csh; теперь я в csh.
  5. I type /tmp/T.csh: результат blah (конечно).
  6. I типа /tmp/T.csh $a: "а: Неопределенная переменная"
  7. set a = something
  8. /tmp/T.csh $a: бла
  9. echo $a: что-то
  10. unset a
  11. echo $a: "а: Undefined переменной"

Я воспроизвел все, что вы сделали; надеюсь это поможет. Вы получаете сообщение о том, что вы написали в командной строке, а не на содержимое вашего скрипта. Даже простой echo, как вы можете видеть здесь выше, дает ошибку, если вы в командной строке ссылаетесь на переменную, которая не существует.

+0

это означает, что я не могу вызвать значения a, b и c, если я не установил их в интерактивном режиме? Есть ли другой способ вызова этих переменных всякий раз, когда я нуждаюсь в них в качестве аргумента скрипта, поскольку я уже установил их в скрипте? – Mike

+0

Я не понимаю, чего вы хотите. Учтите, что скрипт csh имеет свои локальные переменные, и вы передаете ему _arguments_ из командной строки. Может быть, «setenv» - ваш друг, читайте об этом или, как говорилось ранее, используйте более firendly shell. – linuxfan

+0

ОК, мой выбор команд может быть виноват здесь, что я действительно хочу - назначить определенную группу чисел (то же, что и мои примеры) в переменные, для этого случая a, b и c будут использоваться позже в качестве аргумента для моего скрипт. Я думал, что набор может сделать трюк. Любая идея, как я могу это сделать? использование другого типа оболочки Im fear не может быть и речи, насколько это возможно, без интерактивной настройки переменных. – Mike