Получите и сохраните время либо с iPhone, либо с NIST и текущего времени исполнения из функции повышения производительности BSD. Для времени NIST см. Как я могу получить реальное время в iPhone, а не время, заданное пользователем в настройках?
Когда вы хотите проверить перезагрузку, получите новые значения этих , вычислить прошедшее время для каждого и сравнить прошедшее время. Исходя из разницы, вы должны иметь возможность определить перезагрузку.
Аналогично самому первому варианту, но без конечного разделителя.
ls -1 | paste -sd "," -
Версия Quick Perl с завершающей косой чертой:
ls -1 | perl -E 'say join ", ", map {chomp; Версия Quick Perl с завершающей косой чертой:
[110] Объяснить:
- perl -E: выполнить Perl с поддержкой функций (скажем, ...)
- говорят: печатать с возвратом носителя
- join ",", ARRAY_HERE: соединять массив с помощью ","
- map {chomp; $ _} ROWS: удалить из каждой строки возвращаемую несущую и вернуть результат
- <>: stdin, каждая строка является ROW, в сочетании с картой она создаст массив каждой ROW
} <>'
Объяснить:
В добавление к ответу majkinetor, вот способ удаления конечного разделителя (поскольку я пока не могу просто комментировать его ответ):
ls -1 | awk 'ORS=","' | head -c -1
Просто удалите столько конечных байтов, сколько ваш разделитель считает для .
Мне нравится этот подход, потому что я могу использовать многосимвольные разделители + другие преимущества awk
:
ls -1 | awk 'ORS=", "' | head -c -2
РЕДАКТИРОВАТЬ
Как заметил Питер, отрицательно Подсчет байтов не поддерживается в родной версии главы MacOS. Это, однако, может быть легко исправлено.
Сначала установите coreutils
. «Основные утилиты GNU - это базовые утилиты для работы с файлами, оболочками и текстом в операционной системе GNU».
brew install coreutils
Команды, также предоставляемые MacOS, устанавливаются с префиксом «g». Например, gls
.
Как только вы это сделаете, вы можете использовать ghead
с отрицательным числом байтов или лучше, сделать псевдоним:
alias head="ghead"
ls
производит один выходной столбец при подключении к трубе, поэтому -1
является избыточным.
Вот еще один ответ perl, использующий встроенную функцию join
, которая не оставляет завершающий разделитель:
ls | perl -F'\n' -0777 -anE 'say join ",", @F'
Непонятный -0777
заставляет perl прочитать весь ввод перед запуском программы.
альтернатива sed, которая не оставляет завершающий разделитель
ls | sed '$!s/$/,/' | tr -d '\n'
Вы можете использовать:
ls -1 | perl -pe 's/\n$/some_delimiter/'
Если ваша версия xargs поддерживает флаг -d, тогда это должно сработать
ls | xargs -d, -L 1 echo
-d - это флаг-разделитель
Если у вас нет -d, вы можете попробовать следующее
ls | xargs -I {} echo {}, | xargs echo
Первый xargs позволяет вам указать разделитель, который является запятой в этом примере.
Эта команда для поклонников PERL:
ls -1 | perl -l40pe0
Здесь 40 - восьмеричный ascii-код для пространства.
-p будет обрабатывать построчно и печатать
-l позаботится о замене завершающего \ n на символ ascii, который мы предоставляем.
-e должен сообщить PERL, что мы выполняем командную строку.
0 означает, что на самом деле нет команды для выполнения.
perl -e0 совпадает с perl -e ''
просто bash
mystring=$(printf "%s|" *)
echo ${mystring%|}
Не изобретай велосипед.
ls -m
Это именно так.
Я думаю, что это круто
ls -1 | awk 'ORS=","'
ORS - это «разделитель выходных записей», так что теперь ваши строки будут соединяться запятой.
Чтобы избежать потенциальной путаницы новой строки для tr, мы могли бы добавить флаг -b к ls:
ls -1b | tr '\n' ';'
Парсинг ls
в целом не рекомендуется , поэтому альтернативным лучшим способом является использование find
, например:
find . -type f -print0 | tr '\0' ','
Или с использованием find
и paste
:
find . -type f | paste -d, -s
Для общего объединения нескольких строк (не относящихся к файловой системе) проверьте: Краткое и переносимое «соединение» в командной строке Unix .
Комбинация настроек IFS
и использования "$*"
может сделать то, что вы хотите. Я использую подоболочку, поэтому я не вмешиваюсь в $ IFS этой оболочки
(set -- *; IFS=,; echo "$*")
Для захвата вывода,
output=$(set -- *; IFS=,; echo "$*")
Это заменяет последнюю запятую новой строкой:
ls -1 | tr '\n' ',' | sed 's/,$/\n/'
ls -m
включает переводы строки с шириной экрана (например, 80-й).
В основном Bash (только ls
является внешним):
saveIFS=$IFS; IFS= Использование readarray
(он же mapfile
) в Bash 4:
readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS
Благодаря gniourf_gniourf для предложения.
\n'
files=($(ls -1))
IFS=,
list=${files[*]}
IFS=$saveIFS
Использование readarray
(он же mapfile
) в Bash 4:
readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS
Благодаря gniourf_gniourf для предложения.
РЕДАКТИРОВАТЬ : Просто " ls -m " Если вы хотите, чтобы ваш разделитель был запятой
Ах, сила и простота !
ls -1 | tr '\n' ','
Поменяйте запятую ", " на любую, какую хотите. Обратите внимание, что это включает "запятую"