Вы можете заставить столбцы выстроиться в линию, выполнив
# fcinfo hba-port | awk '
BEGIN {printf("HBA_Manufacturer Firmware_Version State\n")
printf("---------------- ---------------- -----\n")
}
/Manufacturer:/ {m=$2}
/Firmware Version:/ {F=$3}
/State/ {print m, F, $2}' | column -t
Это даст результат, подобный
HBA_Manufacturer Firmware_Version State
---------------- ---------------- -----
Emulex 2.82a4 online
Emulex 2.82a4 online
Emulex 2.82a4 offline
Emulex 2.82a4 offline
Emulex 2.82a4 online
Emulex 2.82a4 online
Примечания:
--output-separator string
(или -o string
)
в конце, чтобы указать строку, которую нужно поместить между колонками.
По умолчанию используется два пробела; например, ...| column -t -o " "
(с четырьмя пробелами) даст вам что-то более близкое к тому.
к показанному вами примеру. В показанном вами примере после заголовков идет непрерывный ряд тире после заголовков. Моя команда, как показано выше, даст только короткий ряд тире под каждым заголовком. Это становится еще более очевидным, если некоторые из ваших данных длиннее:
HBA_Manufacturer Firmware_Version State
---------------- ---------------- -----
Emulex 2.82a4 онлайн
Emulex 2.82a4 online
Какой-то_другой_производитель 2.82a4 offline
Emulex 2.82a4 offline
Emulex 2.82a4 online
Emulex 2.82a4 online
Это можно исправить, если необходимо.
Это зависит от вашей системы. Одна из многих операционных систем, особенно на базе Linux, sh
является ссылкой на bash
.
В этом случае все еще есть некоторые различия в поведении, когда bash
пытается быть больше похожим на традиционную оболочку Борна при вызове sh
, но все же принимает большинство башизмов.
В некоторых других операционных системах, таких как Debian, sh
предоставляется dash
, а не bash
. Это имеет гораздо большее значение, поскольку тире
не поддерживает bashisms, будучи спроектированным как чистая реализация оболочки POSIX.
В проприетарных операционных системах sh
часто предоставляется POSIX-совместимым ksh88
, который, как и dash
, не реализует bashisms. В Solaris 10 и старше, в зависимости от вашего PATH, sh
, скорее всего, будет устаревшей оболочкой Bourne, предшествующей POSIX.
В любом случае, вы, вероятно, получили тот же результат с вашим тестом просто потому, что ваш скрипт не использовал какую-либо команду, параметр или синтаксис bash
.
Когда вы запускаете ./ исполняемый файл
, то, какая оболочка будет запущена, по существу зависит от shebang, записанного в начале исполняемого скрипта. Это будет bash
, если shebang указывает это:
#!/bin/bash
....
Если shebang отсутствует и вы вызываете сценарий из POSIX-совместимой оболочки, сценарий технически должен выполняться первым sh
] найден в PATH.Многие интерпретаторы оболочки, такие как bash
, dash
и ksh
, считают себя POSIX, поэтому будут интерпретировать сценарий. Обратите внимание, что переменная среды SHELL
здесь не используется.
Да, может быть, но не обязательно. Обе оболочки не совпадают, но основы совместимы. Посетите этот пост для получения дополнительной информации.
Вы можете использовать следующую строку в сценарии для проверки используемого интерпретатора:
ps h -p $$ -o args='' | cut -f1 -d' '
Вы можете явно указать оболочку, которая будет использоваться, когда сценарий будет выполняться непосредственно со строкой sheebang
:
#!/bin/sh
или
#!/bin/bash