ERRNO будет устанавливаться только gawk (GNU awk только)если getline или close завершатся ошибкой, но успешно прочитает (empty! )вывод ls. Этот вывод пуст, потому что ls выдает сообщение об ошибке ("ls :не может получить доступ..." )в стандартном канале ошибок, ничего не записывает в стандартный вывод и существует с кодом ошибки.
С помощью GNU awk вы можете получить статус выхода команды следующим образом:
exitstatus=close(cmd)
if (exitstatus) {
# do something
}
Если вам нужно сообщение об ошибке команды, то вы должны перенаправить ее стандартный канал ошибки в какой-либо файл,и прочитайте это:
awk 'BEGIN {
cmd = "ls -lrth /non/existing/path 2>standard-error.txt"
while ( ( cmd | getline result ) > 0 ) {
print result
}
es=close(cmd);
if (es) {
getline errstring < "standard-error.txt"
print "exitstatus "es" error message "errstring;
}
}'