Для командной строки IRC самый популярный или наиболее часто используемый - вероятно, irssi. Это очень устойчиво, очень гибко, очень расширяемо со сценариями и темами расположения, очень хорошо зарегистрированными, и имеет достойное сообщество пользователей и сторонников.
Следующее - то, что я закончил тем, что использовал для надежного создания временного каталога, который работает и над Linux и над Darwin (все версии перед Mac OS X 10.11) без жесткого кодирования $TMPDIR
или /tmp
:
mytmpdir=`mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir'`
GNU mktemp команда не требует никаких аргументов. Плоскость mktemp
будет работать и создает временный файл во временном каталоге системы.
Плоскость mktemp -d
создаст каталог вместо файла, который является тем, что Вы хотели бы использовать на Linux.
(gnu-coreutils)$ man mktemp
> ..
> If DIR is not specified, uses $TMPDIR if set, else /tmp.
> ..
По умолчанию GNU mktemp использует шаблон tmp.XXXXXXXXXX
для названия подкаталога (или файл). Настроить этот шаблон, -t
опция может использоваться.
mktemp OSX не имеет никакого шаблона по умолчанию и требует, чтобы шаблон был указан. К сожалению, где GNU mktemp берет шаблон как -t
опция, на OSX это передается как позиционный параметр. Вместо этого mktemp OSX имеет a -t
опция, которая означает что-то еще. -t
опция на OSX документируется как "префикс" для шаблона. Это расширено до {prefix}.XXXXXXXX
, таким образом, это добавляет Xs к нему автоматически (например. mktemp -d -t example
мог создать example.zEJZWCTQ
во временном каталоге).
Я был удивлен найти это во многих средах Linux, $TMPDIR
не установлен по умолчанию. Много программ CLI действительно поддерживают его, когда установлено, но все еще нужны в значении по умолчанию для /tmp
. Это означает передавать $TMPDIR/example.XXXXXXXX
к mktemp или mkdir опасно, потому что он может произвести /example.XXXXXXXX
в корневом каталоге локального диска (из-за сбрасываемого $TMPDIR и становящийся пустой строкой).
На OSX, $TMPDIR
всегда устанавливается и (по крайней мере, в оболочке по умолчанию) это не установлено на /tmp
(который является символьной ссылкой на /private/tmp
) но к /var/folders/dx/*****_*************/T
. Так независимо от того, что мы делаем для OSX, должен соблюдать то поведение по умолчанию.
В заключение следующее - то, что я закончил тем, что использовал для надежного создания временного каталога, который работает и над Linux и над Darwin (Mac OS X) без жесткого кодирования также $TMPDIR
или /tmp
:
mytmpdir=`mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir'`
Первая часть для Linux. Эта команда перестанет работать на Darwin (Mac OS X) с кодом состояния ошибки 1
отвечание "использованием:...". Вот почему мы игнорируем stderr и вместо этого затем выполняем вариант Mac. mytmpdir
префикс только используется на Mac (где та опция требуется, чтобы быть установленной).
Изменение --directory
кому: -d
. Первый - изм GNU, но GNU mktemp
от coreutils также поддерживает -d
. mktemp
в OS X совпадает с от BSD, таким образом, -d
должно быть довольно портативным среди систем, это на самом деле поставляет a mktemp
программа.
mktemp
на OS X требует шаблона. Сценарий, который Вы используете, принимает конвенции GNU, который использует шаблон по умолчанию, если ни один не предоставляется.
– James Sneeringer
26.01.2012, 23:24
XXXXX
быть предоставленным в шаблоне, где, поскольку OS X не делает уверенный, если существует совместимый шаблонный флаг?
– user3467349
15.03.2016, 09:06
mktemp
на OS X 10.11.5 работ El Capitan для меня: file $(mktemp -d)
: /var/folders/j4/htlnmbf97vlcdszj7_x8g0vh4k3_fp/T/tmp.JXmsrQnL: directory
– Heath Borders
15.07.2016, 21:52
Необходимо предоставить шаблон. mktemp -d /tmp/foo.XXXX
должен работать. Я никогда не видел --directory
. --
предполагает, что это - расширение GNU.
$TMPDIR
когда доступно, сделать mktemp -d "${TMPDIR:-/tmp}"/foo.XXXX
. Это работает в ударе над Mac и тире на Debian, таким образом, это кажется портативным.
– Tom Anderson
15.04.2015, 10:36
temp_dir="$(mktemp -q -d -t "$(basename "$0").XXXXXX")"
mktemp
для BSD (включая OSX) требуется шаблон, но он допускает любое количество X
s в шаблоне. mktemp
для Linux не требует шаблона, однако, если шаблон указан, то число X
s должно быть 6. Обратите внимание, что -t
для GNU mktemp
устарел, так что более перспективный код был бы
temp_dir="$(mktemp -q -d -t "$(basename "$0").XXXXXX" 2>/dev/null || mktemp -q -d)"
mktemp -d
на OS X 10.11.5 El Capitan, и это работало как ожидалось:file $(mktemp -d)
:/var/folders/j4/htlnmbf97vlcdszj7_x8g0vh4k3_fp/T/tmp.JXmsrQnL: directory
– Heath Borders 15.07.2016, 21:50mktemp -d -t 'mytmpdir'
на Linux (протестированный сmktemp
отcoreutils 8.26
), это работает как ожидалось. – 20.02.2017, 11:06