我们使用phpDocumentator来记录我们的PHP代码.php代码在不同的词典中.运行phpDocumentator的脚本如下所示:
./phpdoc -d dir1,dir2,dir3,dir4
Run Code Online (Sandbox Code Playgroud)
每次我们添加一个新目录时,我都要将这个添加到脚本中.
我想动态地这样做.
ls -d ../*test*
Run Code Online (Sandbox Code Playgroud)
这列出了所有需要的目录,但空格分隔而不是逗号分隔.
题:
如何列出逗号分隔的目录?
如何将此列表作为-d参数添加到phpdoc脚本中?
Aro*_*eel 37
使用ls -dm */生成一个逗号分隔的目录列表.-d将仅返回目录,-m并将输出到以逗号分隔的列表.
然后,您可以将输出存储在变量中并将其作为参数传递:
#!/bin/bash
MY_DIRECTORY=/some/directory
FOLDERS=`ls -dm $MY_DIRECTORY/*/ | tr -d ' '`
phpdoc -d $FOLDERS
Run Code Online (Sandbox Code Playgroud)
无需调用外部程序(假设bash或ksh93):
var=(../*test*)
IFS=','
phpdoc -d "${var[*]}"
Run Code Online (Sandbox Code Playgroud)
请参阅下面的@ mklement0的评论.这个解决方案的问题是它会找到文件名和目录,因此:
var=(../*test*/) # trailing / ensures directories only
IFS=','
phpdoc -d "${var[*]/%/}" # remove the trailing / from the names
Run Code Online (Sandbox Code Playgroud)
涉及所有数组元素扩展的解决方案是@ mklement0(除了不需要转义/).
这是使用findand 的更简单方法paste:
dirs=$(find . -type d | paste -d, -s)
Run Code Online (Sandbox Code Playgroud)
同样,但使用绝对路径:
dirs=$(find "$PWD" -type d | paste -d, -s)
Run Code Online (Sandbox Code Playgroud)
和版本tr:
dirs=$(find . -type d -print0 | tr '\0' ',')
Run Code Online (Sandbox Code Playgroud)
以上将递归扫描文件夹,除非您将添加-maxdepth 1到仅一层深的列表。
然后运行phpdoc为:
./phpdoc -d "$dirs"
Run Code Online (Sandbox Code Playgroud)