Можно ли будет распечатать файл, используемый для перенаправления STDERR? - PullRequest
0 голосов
/ 15 октября 2018

Можно ли напечатать имя файла, использованное для перенаправления STDERR, с помощью приведенного ниже примера команды:

command.sh 2>file.err

Код в command.sh:

#!/bin/sh
ls -l non_existing_file.txt
echo "STDERR file is: $stderrFilename" # variable should print file.err

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я сделал решение, используя историю.Не уверен, есть ли более простой способ сделать это (или правильный).

#!/bin/sh
stderrfname=`history | tail -1 | awk '{ print $3 }' | sed "s/.*>//"`
echo "STDERR file is: $stderrfname"
0 голосов
/ 17 октября 2018

Это немного рискованно, но вы можете попробовать проанализировать вывод procfiles в AIX.Он включает в себя захват старшего и младшего номеров устройства stderr вместе с номером инода, затем поиск соответствующего устройства, его точки монтирования и затем использование find для поиска файла с заданным номером инода:

#!/bin/sh
dev=$(procfiles $$ | awk '$1 == "2:" { print substr($4, 5) }')
inode=$(procfiles $$ | awk '$1 == "2:" { print substr($5, 5) }')

major=${dev%%,*}
minor=${dev##*,}

if [ "$major}" -eq 0 ]
then
  echo I give up, the major number is zero
  exit 1
fi

for file in /dev/*
do
  [ -b "$file" ] || continue
  if istat "$file" | grep -q "^Major Device ${major}.*Minor Device ${minor}$"
  then
    break
  fi
done

fs=$(mount | awk '$1 == "'"${file}"'" { print $2 }')
stderrFilename=$(find "$fs" -inum "$inode")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...