Проблема с простым скриптом

bash не имеет встроенной поддержки для синтаксического анализа CSV. Вместо этого вы можете использовать ksh93 , который поддерживает синтаксический анализ CSV (по крайней мере, некоторая форма CSV, та, в которой литерал " вводится как " " в двойных кавычках) с прочтите -S :

#! /bin/ksh93 -
while IFS=, read -rSu3 P D ignore; do
  ./xyz --project "$P" --displayname "${D#*.}"
done 3< file.csv

Или используйте perl / python с соответствующей библиотекой синтаксического анализа CSV, которую вы можете настроить для точного формата вашего CSV. Пример с perl :

perl -C -MText::CSV -e '
  $c = Text::CSV->new;
  while (($p, $d) = @{$c->getline(STDIN)}) {
    $d =~ s/.*?\.//;
    system "./xyz", "--project", $p, "--displayname", $d;
  }' < file.csv

Если вы можете гарантировать, что содержимое полей CSV не будет содержать двойных кавычек, запятых или символов новой строки, с оболочками POSIX, такими как bash , вы можете делать:

tr -d \" < file.csv | while IFS=, read -r p d ignore; do
  ./xyz --project "$p" --displayname "${d#*.}"
done
2
18.03.2019, 04:03
2 ответа

$ PATH - это переменная среды по умолчанию, которая сообщает вашей системе, где найти свои двоичные файлы программы (например, программу find , которую вы пытаетесь использовать), поэтому вы должны использовать для этого другое имя Переменная. Я держу пари, что вы перезаписываете $ PATH своей системы, и теперь ваша система не может найти программу find . Попробуйте это и посмотрите, работает ли это.

4
27.01.2020, 21:59

ПУТЬ - это переменная среды, используемая оболочкой для поиска исполняемых файлов. Если вы его отключите или измените, оболочка может не найти такие команды, как find или cp .

Было бы лучше, если бы вы использовали в скриптах имена переменных в нижнем регистре. Маловероятно, что они столкнутся с важными переменными среды.

В этом случае вы можете использовать, например, source_dir и target_dir , которые имеют дополнительное преимущество, предоставляя читателю немного документации.

0
27.01.2020, 21:59

Теги

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