Как заставить Linux отображать скрытые файлы, начинающиеся с b?

Puedes usar:

source <(declare -f | grep -o '^[[:alnum:]]\+')

Esto enumera todas las definiciones de función en el alcance (declare -f), luego filtra solo sus nombres, que serán las únicas cadenas alfanuméricas en el margen izquierdo (grep -o '^[[:alnum:]]\+'), y finalmente obtiene la salida resultante, que es uno -por -lista de líneas de nombres de funciones, a través de sustitución de procesos para que todos sean llamados en el shell actual.

Lo anterior funciona con GNU o BSD greps que tienen -o, pero puede intercambiar un comando adecuado sedo awksi es necesario.


Las funciones no estarán en ningún orden en particular aquí (Creo que el orden de la tabla hash -de Bash, que es esencialmente aleatorio ). Si necesita conservar un orden, nómbrelos adecuadamente y agregue un sorten el medio:

source <(declare -f | grep -o '^[[:alnum:]]\+'|sort)

Si las funciones en sí están destinadas a llamarse de forma independiente, esta estructura de nombres podría no ser deseable. No veo una manera simple de evitarlo.


Eso funciona dentro de un solo archivo. Si está obteniendo el archivo en un shell que ya tiene funciones definidas, debe recordar cuáles ya existían y omitirlas:

funcs=($(declare -f | grep -o '^[[:alnum:]]\+'|sort))
source file
source <(declare -f | grep -o '^[[:alnum:]]\+' | sort - <(printf '%s\n' "${funcs[@]}" | uniq -u)

Hay varias formas de hacerlo, todas bastante incómodas. Esto también falla cuando redefines una función existente. Otro enfoque sería grepsacar todas las líneas de definición de función del propio archivo; si está estructurado acerca de cómo lo escribe, eso también funciona.


Un enfoque posiblemente -mejor si controla el contenido del archivo sería enumerar los nombres de las funciones,en el orden en que desea que se llamen, en una sola definición de matriz de línea -en la parte inferior de su archivo. Luego, puede recorrerlo en el shell de abastecimiento y hacer lo que necesita.

Este enfoque sería más claro y menos frágil. Sin embargo, introduce la posibilidad de que las dos ubicaciones no estén sincronizadas.

-5
23.02.2017, 12:56
2 ответа

Имена скрытых файлов начинаются с . (точка), нет ни одного, начинающегося с b . Чтобы перечислить имена, начинающиеся с .b , используйте

$ ls .b*

. Это также перечислит содержимое любого каталога, имя которого начинается с .b . Обратите внимание, что -a здесь не требуется, поскольку мы явно указываем шаблон имени файла для оболочки. Поскольку паттерн начинается с . (точка), он будет соответствовать скрытым файлам. Расширенный шаблон будет передан на ls для обработки.

Чтобы избежать перечисления содержимого каталогов, используйте

$ ls -d .b*

Вышеупомянутые решения выдадут ошибку, если ни одно имя не соответствует шаблону.

Чтобы перечислить только имена обычных файлов , имена которых начинаются с .b , используйте

$ for name in .b*; do test -f "$name" && printf '%s\n' "$name"; done

, чтобы получить результат аналогично обычному ls (обратите внимание, что столбец - нестандартная утилита):

$ for name in .b*; do test -f "$name" && printf '%s\n' "$name"; done | column

Последний пара решений не будет печатать ничего, имя которого не соответствует шаблону.

4
28.01.2020, 05:20

ls - это команда, а - a - флаг для команды. Чтобы увидеть файлы, начинающиеся с b , можно указать шаблон - .b * {{1} } Где . означает, что файлы скрыты, а * означает все остальное ...

и вообще, если вы не знаете, что делает команда, прочтите руководство - man ls

Чтобы избежать перечисления содержимого перечисленных элементов, используйте параметр -d .

4
28.01.2020, 05:20

Теги

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