Думаю, я выяснил то, что работает.
Я использовал программу под названием LaunchControl , чтобы создать файл под названием Включить Core Dump.plist
в / Система / Библиотека / Launchdemons
со следующим содержимым:
GroupName
wheel
InitGroups
Label
core dumps launchctl
ProgramArguments
launchctl
limit
core
unlimited
unlimited
RunAtLoad
UserName
root
С этими разрешениями:
$ ls -al enable\ core\ dumps.plist
-rw-r--r-- 1 root wheel 582 Dec 30 15:38 enable core dumps.plist
, и это, казалось, сделали трюк:
$ launchctl limit core
core unlimited unlimited
$ ulimit -a core
core file size (blocks, -c) unlimited
...
Я создал небольшую тестовую программу, которая просто падает:
$ ./a.out
Segmentation fault: 11 (core dumped)
и, VOILA, сформирована ядра сброса:
$ # ls -al /cores/
total 895856
drwxrwxr-t@ 3 root admin 102 Dec 30 15:55 .
drwxr-xr-x 31 root wheel 1122 Oct 18 10:32 ..
-r-------- 1 root admin 458678272 Dec 30 15:55 core.426
-121-----45986-
Пространства не допускаются вокруг =
!
Итак:
#!/bin/bash
ping -c 20 google.com > results.txt
packetloss=$(awk '/packet loss/{print $6}' results.txt)
echo "$packetloss" >> debug.txt
или даже более короткий:
ping -c 20 google.com |
awk '/packet loss/{sub(/%/, "");print $6 >> "debug.txt"}'
x
; Вы можете распечатать $ 6
напрямую. `используется в подстановке команд старого стиля, например:
foo=`command`
Foo = $ (команда)
вместо этого рекомендуется синтаксис. Обращение с обратной косой чертой внутри $ ()
менее удивительно, а $ ()
легче вводиться.
Проверка http://mywiki.woolegege.org/bashfaq/082
ping -c 20 google.com |
perl -lne '/(\d+)%\s+packet\s+loss/ and print $1' >> debug.txt
Пробелы и -gt
user1@machine:~/tmp$ for i in {1..10}; do if [ $i -gt 5 ]; then echo $i; fi; done
6
7
8
9
10
Если вы имеете дело исключительно с целыми числами, вы также можете использовать арифметическое расширение bash :
$ for i in {1..10}; do if ((i>5)); then echo $i; fi; done
6
7
8
9
10
$
i=0
while case $((i+=1)) in
([6-9])
echo "$i";;
(??)
! echo "$i"
esac
do :; done