Получите все каталоги, разделенные запятой, и отправьте вывод на другой script
Мы используем phpDocumentator для документирования нашего PHP-кода.
PHP-код находится в разных словарях.
script, который запускает phpDocumentator, выглядит следующим образом:
./phpdoc -d dir1,dir2,dir3,dir4
Каждый раз, когда мы добавляем новый каталог, я должен добавить его в script.
Я хотел бы сделать это динамически.
ls -d ../*test*
в этом списке перечислены все необходимые каталоги, но пространство разделено и не разделяется запятой.
Вопрос:
Как я могу перечислить разделенные запятыми каталоги?
как добавить этот список в качестве параметра -d в phpdoc script?
Ответы
Ответ 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 ' ')