Как прочитать файл свойств через мой скрипт?

Я использую оболочку bash. Я пытаюсь написать сценарий, который будет читать файл свойств, а затем делать некоторые замены в другом файле на основе пар ключ-значение, которые он читает в файле. Так что я

#!/bin/bash file = "/tmp/countries.properties" while IFS='=' read -r key value do echo "${key} ${value}" sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g' /tmp/country.rb done < "$file" 

но когда я запускаю файл, я получаю сообщение об ошибке «Nno такой файл или каталог», несмотря на то, что мой файл существует (я сделал «ls» после проверки).

  • Сценарий Bash не может найти модуль perl
  • Найдите файл, содержащий определенное ключевое слово, используя `grep`
  • Bash, выполнить команду после вызова новой оболочки
  • Как перемещать файл без сохранения разрешений
  • Существуют ли проблемы с дефисами в функциях, псевдонимах и исполняемых файлах?
  • Преобразование простых данных в json-файл
  •  localhost:myproject davea$ sh /tmp/script.sh =: cannot open `=' (No such file or directory) /tmp/countries.properties: ASCII text /tmp/script.sh: line 9: : No such file or directory localhost:myproject davea$ localhost:myproject davea$ ls /tmp/countries.properties /tmp/countries.properties 

    Что еще мне нужно сделать, чтобы прочитать в моем файле свойств успешно?

  • Потерянный каталог справочника ls после сбоя
  • нужна помощь с awk, объединяющим строки по последовательности из нескольких файлов в один файл
  • Ошибка при синтаксисе рядом с неожиданным токеном `('?"
  • nscd использует 100% процессор
  • Больше сценариев оболочки, чем один в одном текстовом файле?
  • Как проверить, присутствует ли какой-либо IP-адрес в файле с использованием сценариев оболочки?
  • 2 Solutions collect form web for “Как прочитать файл свойств через мой скрипт?”

    Ошибки находятся прямо там:

     =: cannot open `=' (No such file or directory) 

    Что-то пытается открыть файл с именем = , но его не существует.

     /tmp/script.sh: line 9: : No such file or directory 

    Обычно это имя файла перед последним двоеточием, но поскольку оно пустое, кажется, что-то пытается открыть файл с пустым именем.

    Рассмотрим линию:

     file = "/tmp/countries.properties" 

    Это запускает командный file с аргументами = и /tmp/countries.properties . (Оболочке все равно, какие аргументы для команды есть, может быть что-то, что использует знак равенства в качестве аргумента.) Теперь file просто так происходит, как программа, используемая для идентификации типов файлов , и это делает только то. Сначала /tmp/countries.properties открыть = , в результате /tmp/countries.properties ошибка, а затем /tmp/countries.properties , сообщив вам, что это такое:

     /tmp/countries.properties: ASCII text 

    Другой No such file or directory из < $file перенаправления < $file . Поскольку переменной не присвоено значение, перенаправление не будет работать.

    Назначение в оболочке требует, чтобы не было пробела вокруг знака = , поэтому:

     file=/tmp/countries.properties 

    Также здесь:

     sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g' 

    Переменные не расширяются в одинарных кавычках, и у вас есть все вокруг всего второго аргумента, поэтому sed получит литерал ${key} а не содержимое переменной.

    Либо завершите одиночные кавычки, чтобы развернуть переменные, либо просто используйте двойные кавычки для всей строки:

     sed -ie 's/:iso=>"'${key}'"/:iso=>"'${key}'",:alpha_iso=>"'${value}'"/g' sed -ie "s/:iso=>\"${key}\"/:iso=>\"${key}\",:alpha_iso=>\"${value}\"/g" 

    Пытаться:

     file="/tmp/countries.properties" 
    Linux и Unix - лучшая ОС в мире.