squeeze не поставляется с /etc/os-release
, это мой 'hack':
dpkg --status tzdata|grep Provides|cut -f2 -d'-'
-121-33918- Если folder1
предметов на самом деле является файлом file1
, то ранее существовавший каталог folder1
отсутствовал. Поведение cp
по умолчанию заключается в том, что если местом назначения является каталог, копируемые предметы (предметы ) копируются в целевой каталог. Обратите внимание, что в Linux папки folder1
и Folder1
различаются, так как они чувствительны к регистру.
Оказывается, что я загружал файл opcache.ini
, который был тем, что php 5 использовался по умолчанию, но в php 7 он был загружен как 10-opcache.ini
по умолчанию, поэтому, когда мой файл opcache.ini был предоставлен в нем, имел два файла .ini
и пытался
Я не собираюсь удалять этот вопрос, так как я считаю, что это ошибка, которую легко упустить из виду и может быть полезной, так как вы не можете действительно гуглить эту фазу ошибки, и ни в одном месте, где было что-либо сказано о удвоенных ini-файлах или объявлении расширения дважды.
Это зависит от того, что вы хотите сделать с созданной строкой. Это выглядит как набор параметров командной строки, поэтому я предполагаю, что вы хотите использовать его как таковой вместе с некоторой утилитой под названием util
.
Вот решение для/bin/sh
:
#!/bin/sh
listfile=$1
set --
while IFS= read -r line; do
set -- "$@" -o "$line:1"
done <$listfile
util "$@"
Это читает из файла, указанного в командной строке сценария, и для каждой строки, считанной из этого файла, устанавливает позиционные параметры, включающие -o
и LINE:1
, где LINE
— строка, считанная из файла..
После прочтения всех строк вызывается util
с построенным списком аргументов командной строки. Используя"$@"
(с двойными кавычками ), мы гарантируем, что каждый отдельный элемент в построенном списке аргументов заключен в кавычки.
С bash
и использованием массива bash
для хранения аргументов командной строки, которые мы создаем:
#!/bin/bash
listfile=$1
while IFS= read -r line; do
args+=( -o "$line:1" )
done <$listfile
util "${args[@]}"
В обоих приведенных выше примерах важно цитирование. Точно так же мы создаем массив отдельных элементов (, каждый -o
и каждый LINE:1
являются элементами списка ).Другим способом сделать это было бы создать одиночную строку -o LINE1:1 -o LINE2:1 etc.
, но это было бы интерпретировано как один единственный аргумент, если бы использовалось как util "$string"
, и подверглось бы разбиению на слова и подстановке имен файлов, если бы использовалось как util $string
(. ] это не сработало бы, если бы какая-либо строка во входном файле содержала пробелы, символы табуляции или подстановочные символы имени файла ).
Оба скрипта выше будут использоваться как
$./script.sh file
, где script.sh
— исполняемый файл сценария, а file
— имя входного файла для чтения.
Связанные:
Входной файл:
line1
line2
line3
Команда:
perl -lpe '$\=" ";$_="-o $_:1"' input.txt
Альтернативная команда:
awk '{ORS=":1 ";print"-o "$0}' input.txt
Выход (одинаковый для обеих команд):
-o line1:1 -o line2:1 -o line3:1
sed 's/\(.*\)/-o \1:1/' file.txt | xargs /path/to/command
Замена sed
читается как :заменить текст в данной строке на "-o исходный _текст _:1". Затем команда xargs
берет эти измененные строки текста и объединяет их в соответствии с аргументами командной строки
С недавней оболочкой (например. bash
), попробуйте
mapfile -t TMP <file
TMP=(${TMP[@]/%/:1})
echo ${TMP[@]/#/-o }
-o line1:1 -o line2:1 -o line3:1