Так как это было очень простое упражнение, учитель потребовал, чтобы упражнения использовали базовые команды, которые требуют немного большего развития и могут быть позже заменены более мощными командами, такими как найти или стат. Но я получил ответ, и это было:
dir=$1
if [ ! -d $dir ]
then
exit 1
else
sum=0
cd $dir
(ls -l $dir) > fitxers.txt
C=($(awk '{print $5}' fitxers.txt))
len=${#C[*]}
i=0
while [ $i -lt $len ]
do
for element in $(ls $dir)
do
if [ -f $element ]
then
let "sum = $sum + ${C[$i]}"
fi
(( i++ ))
done
done
echo $sum
rm -r fitxers.txt
exit 0
fi
Надеюсь, это будет немного полезно для других новичков.
Нет. Но, возможно, вместо использования strace
вы можете просто отслеживать стандартный вывод pid, используя tail -f /proc/<pid>/fd/1
, чтобы, тем не менее, достичь своей цели.
Пример:
$ for F in $(seq 1 100);do echo $F;sleep 1;done >/tmp/foo 2>&1 &
[1] 163
$ tail -f /proc/163/fd/1
4
5
6
7
8
9
^C
$
Вы можете фильтровать вывод strace
с помощью параметра -P
, если знаете путь к файловому дескриптору.
-y Print paths associated with file descriptor arguments.
-P path Trace only system calls accessing path. Multiple -P options can be used to specify several paths.
При использовании -P
нет необходимости использовать -y
. Вы можете использовать -y
, чтобы изначально узнать путь к вашему файловому дескриптору. Это может быть что-то вроде /dev/pts/0
.
Вот пример, который можно использовать для отображения вывода процесса, который был отключен от bash с помощью команды disown
:
strace -e trace=write -s 1000 -p12345 -P "/dev/pts/0 (deleted)" 2>&1 | awk -F "\"" '{print $2}'
В этом примере 12345
— это PID процесса, запущенного в сеансе bash
и первоначально записанного в stdout
. Мы отключили процесс от bash
с помощью disown 12345
и закрыли bash. Используя приведенную выше команду, мы можем отобразить вывод этого процесса в другом сеансе bash.
Если вы знаете PID, вы можете подключить параметр -P
к файловому дескриптору STDOUT в /proc. Вот так:
strace -p PID -P /proc/PID/fd/1 -e write
Вы можете найти все дескрипторы открытых файлов процесса в /proc/PID/fd. 1 — это символическая ссылка на файл STDOUT.