Описание:
Здравствуйте, Stackers! В настоящее время я создаю графический интерфейс zenity для команды chattr
. Я пытаюсь показать и изменить атрибуты файла, используя zenity --list --checklist
, чтобы отметить атрибуты, которые мне нужны, но главная проблема, с которой я столкнулся, заключается в том, что я не знаю, каков порядок из lsattr
вывода, например: -------------e-- file
Пример кода:
attr=("A" "Solo escritura" "a" "No actualizar" "c" "Comprimido" "C" "No copiar en escritura" "D" "Actualización de directorio sincrónica" "d" "Ignorar en backup" "E" "Error de compreción" "e" "Usando extents" "h" "Archivo enorme" "I" "Indexación hashed trees" "i" "Archivo inmutable" "j" "Registro de datos" "s" "Borrado seguro" "S" "Actualización sincrónica" "T" "Directorio tope" "t" "Archivo sin cola" "u" "Deshacer borrado" "X" "Acceso crudo dec compreción" "Z" "Archivo comprimido sucio" "-v" "Generar verción de archivo")
fileattr=$(lsattr "$file") ; j=0 ; k=1
for (( i=1; i<=15; i++ )); do
[[ "${fileattr:$i:1}" != "-" ]] && values+="true ${attr[$j]} ${attr[$k]//' '/_} " && setted+="${attr[$j]} " ||\
values+="false ${attr[$j]} ${attr[$k]//' '/_} "
((j+=2)) ; ((k+=2))
done
zenity --list --checklist --column="Estado" --column="Atributo" --column="Descripción" ${values}
Объяснение кода:
attr
представляет собой массив и упорядочен с использованием этой страницы.- Цикл
for
выполняется 15 раз (это равно количеству атрибутов файла, возвращаемыхlsattr
), и на каждом этапе он проверяет не установленные атрибуты "-", если атрибут установлен, то добавляет "true attr[j] attr[k ]" кvalues
и добавьте атрибут кsetted
(для дальнейших целей) или добавьте "false attr[j] attr[k]" кvalues
- Наконец позвоните
zenity
с собраннымиvalues
Запуск вывода:
окно Zenity говорит мне, что атрибут "s" установлен, но это не так, потому что выход lsattr
равен -------------e-- file
. Я заметил, что на странице больше атрибутов, чем на странице lsattr
.
Примечание.
Я знаю, может быть, я использую неправильный подход, поэтому, если вы можете найти лучший способ сделать это, я весь внимание.
Спасибо.