Вы можете заставить bash
быть выполнен как интерактивная оболочка. Попробуйте эту команду:
sudo -iu someuser /bin/bash -i -c '$NODE_PATH $FULL_PATH/$FILE_NAME \
>> /var/log/$PROGRAM_NAME.sys.log 2>&1'
Теперь, перед выполнением вашей команды, ~/.bashrc
и /etc/bash.bashrc
исходят от bash
. Это то же самое поведение, что и при открытии терминала.
Я не знаю, будет ли оно более эффективно, но вы могли бы сделать это полностью в awk
:
awk -F': *' '$1 == "Name" {name = $2; next};
$0 == "Account disabled (or locked): TRUE" {
print gensub(/.*\\/, "", 1, name)
}'
Просто сделайте это с помощью sed
, раз уж вы все равно его используете:
/opt/util/enum-users --level 2 |
sed -n '/^Name:/h;//,/^Account/{
/^Account/!d;/TRUE[^:]*$/!d;g
s/^[^:]*:[[:blank:]]*//p
}'
На самом деле я не знаю, как бизнес [[: blank:]]
должен быть обработан, но сделанное выше предположение состоит в том, что интересная группа строк, вероятно, будет начинаться как:
^Name:[[:blank:]]*[INFORMATION YOU WANT]$
... и что следующая встречающаяся строка, начинающаяся с строка Учетная запись должна заканчиваться строкой TRUE , за которой следует любое количество пробелов, и что неинтересная группа, вероятно, будет иметь FALSE или что-то в этом роде.