Подтвердить что ты не робот

Получите все каталоги, разделенные запятой, и отправьте вывод на другой script

Мы используем phpDocumentator для документирования нашего PHP-кода. PHP-код находится в разных словарях. script, который запускает phpDocumentator, выглядит следующим образом:

./phpdoc -d dir1,dir2,dir3,dir4 

Каждый раз, когда мы добавляем новый каталог, я должен добавить его в script.

Я хотел бы сделать это динамически.

ls -d ../*test* 

в этом списке перечислены все необходимые каталоги, но пространство разделено и не разделяется запятой.

Вопрос:

Как я могу перечислить разделенные запятыми каталоги?

как добавить этот список в качестве параметра -d в phpdoc script?

4b9b3361

Ответ 1

Используйте ls -dm */ для создания списка каталогов, разделенных запятыми. -d будет возвращать только каталоги, а -m будет выводиться в список, разделенный запятыми.

Затем вы можете сохранить вывод в переменной и передать его в качестве аргумента:

#!/bin/bash
MY_DIRECTORY=/some/directory
FOLDERS=`ls -dm $MY_DIRECTORY/*/ | tr -d ' '`
phpdoc -d $FOLDERS

Ответ 2

Не нужно вызывать внешнюю программу (предполагая bash или ksh93):

var=(../*test*)
IFS=','
phpdoc -d "${var[*]}"

См. комментарий @mklement0 ниже. Проблема с этим решением заключается в том, что он найдет имена файлов, а также каталоги, поэтому:

var=(../*test*/)            # trailing / ensures directories only
IFS=','
phpdoc -d "${var[*]/%/}"    # remove the trailing / from the names

Решение с расширением для всех элементов массива - @mklement0 (за исключением того, что нет необходимости упускать/).

Ответ 3

Вот более простой способ: find и paste:

dirs=$(find . -type d | paste -d, -s)

и то же самое, но используя абсолютные пути:

dirs=$(find "$PWD" -type d | paste -d, -s)

и версия с tr:

dirs=$(find . -type d -print0 | tr '\0' ',')

Выше будет сканировать папки рекурсивно, если вы не добавите -maxdepth 1, чтобы перечислить только один уровень.

затем запустите phpdoc как:

./phpdoc -d "$dirs"

Ответ 4

./phpdoc -d $(ls -dm ../*test* | tr -d ' ')