Ошибка TCSH в цикле foreach: files.list: Команда не найдена - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь передать переменную пользовательского ввода (имя файла) в цикл foreach в tcsh.Введенная пользователем переменная, например, «files.list» (сохраняется в той же папке, что и сценарий оболочки, и запускается из нее).

Вот мой код:

 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

foreach i ('$x')    
echo $i     
end

Я хочу, чтобы каждое слово из «files.list» выводилось на экран.Files.list содержит 5 строк, каждая с именем файла.

myScript22.sh
Mad45.sh
Number32.sh
killBill.sh
gotMilk.sh
bugslife.sh

Я получаю сообщение об ошибке - «foreach: Слова не заключены в скобки».

Может быть, 'cat $x' неправильно вызывает переменную x?Если так, как мне настроить файл так, чтобы его содержимое можно было перебрать?

Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Если вам действительно действительно нужно использовать , то вот лучший способ сделать это:

#!/usr/bin/tcsh -f
echo please enter files list
set x = $<

foreach line (" `cat $x` ")
   echo "$line"
end

Важно видеть, что catкоманда между,Разница в том, что в противном случае оператор foreach будет читать слово за словом, а версия в двойных кавычках будет читать строку за строкой.Логика этого ... сомнительна.Кроме того, я цитировал переменную line в операторе echo, потому что он действительно будет жаловаться, когда попадет на пустую строку.

В , вы просто сделаете следующее:вещь:

#!/usr/bin/env bash
echo "Please enter files list"
file=""
while [[ ! -e $file ]]; do read -r file; done

while read -r line; do
  echo "$line"
done < "$file"

Очень важно читать:

0 голосов
/ 28 апреля 2019

В вашем сценарии tcsh есть две ошибки:

  1. Отсутствует команда cat перед именем файла в вашем условии foreach.
  2. Вместо этого используйте прямые одинарные кавычки ('')обратных кавычек (``) в вашем условии foreach.

Следующий скрипт должен работать для вас.

#!/usr/bin/tcsh -f

echo please enter files list 

set x = $<

foreach i(`cat $x`)
  echo $i
end
0 голосов
/ 09 октября 2018

В справочных целях мне не хватало команды cat до $ x.

Поэтому код должен выглядеть так:

 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

foreach i ('cat $x')    
echo $i     
end
...