Я пытаюсь создать отчет о состоянии linux box с краткой информацией. Я использую jps для заполнения нескольких массивов именами экземпляров нашего приложения, которое работает. Затем я хочу напечатать эти отсортированные массивы в 4 столбцах, чтобы мы могли видеть, что работает легко.
Я использую некоторую условную логику, чтобы определить, какая длина массива самая длинная. Поскольку некоторые массивы короче других, простой цикл по самому длинному значению может вызвать проблемы с индексом массива. Поэтому я хотел бы напечатать пустую строку в столбцах, где нет значений для этой строки.
Ниже приведен код, который у меня есть, но он выдает ошибки «Команда не найдена», когда пытается выполнить команду внутри цикла. Идея состоит в том, чтобы попытаться использовать условную логику, чтобы определить, находится ли текущий массив вне границ, и если это так, просто выведите «».
Я пытался с ``, чтобы он выглядел как код. Я пробовал и без них. Я пробовал без "" и с ними. Я пытался с $ {} вокруг переменных и без. Я также пробовал использовать () для значений и без.
Я не совсем понимаю, что происходит за кулисами этого кода и сценариев на машинном коде Windows, предназначенном для командной строки Linux. коробка не легко отлаживать. Есть предложения?
printf "| %-40s | %-40s | %-40s | %-40s |\n" "Array 1:" "Array 2:" "Array 3:" "Array 4:" >> ${OUTPUT}
for i in $(seq ${maxRows}); do
(The command below is all on one line but to make it more readable here I entered on multiple.)
printf "| %-40s | %-40s | %-40s | %-40s |\n" "`[[ ${i} > ${#Array1[@]} ]] && ("") ||
("${Array1[$i]}")`" "`[[ $i > ${#Array2[@]} ]] && "" || ${Array2[$i]}`" "`[[ $i > ${#Array3[@]} ]]
&& "" || ${Array3[$i]}`" "`[[ $i > ${#Array4[@]} ]] && "" || ${Array4[$i]}`" >> ${OUTPUT}
done