ls-d */работает в некоторых папках, а не в других

Проблема в том, что с при чтении вы читаете файл построчно. Поскольку сертификат распространяется на несколько строк (с явными символами новой строки), вы не можете просто прочитать его, как вы это делаете. Если все файлы похожи на эти и не имеют нескольких сертификатов или какого-либо другого содержимого, вы можете сделать это:

Удалить строки 1 и 2, удалить certificate = и прочитать остальную часть файла как элемент массива (затем удалите символы новой строки с помощью tr ).

arr[2]="$(sed '1,2d;s/certificate=//' abcd.txt | tr -d '\n' )"

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

arr[0]="$( awk -F'=' 'NR == 1 { print $2 }' abcd.txt )"

(то же самое для второго элемента с NR == 2 ) или с sed , как указано выше

arr[0]="$(sed -n '1s/.*=//p' abcd.txt)"

(то же самое для второго элемента с 2s ... )

2
14.08.2018, 17:08
2 ответа

Каталог содержит подкаталог с именем -, так что расширение */оболочкой включает -/, что ошибочно интерпретируется как параметр команды.

Этого можно избежать, явно пометив конец опций с помощью --, т.е.

ls -d -- */

или путем добавления пути к глобусу

ls -d./*/
17
27.01.2020, 21:48
find. -maxdepth 1 -type d ! -name "\.*"

«-d» означает просто перечислить этот каталог, как я его понимаю.

2
27.01.2020, 21:48

Теги

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