POSIX, вы могли бы сделать это с помощью awk
относительно эффективно (определенно эффективнее, чем запускать по крайней мере одну утилиту GNU shuf
для каждой строки ввода )как:
awk '
BEGIN {srand()}
{
for (i = 1; i <= NF; i++) {
r = int(rand() * NF) + 1
x = $r; $r = $i; $i = x
}
print
}' < your-file
(обратите внимание, что в большинстве реализаций awk
запуск одной и той же команды дважды в одну и ту же секунду, вероятно, даст вам тот же результат, что и случайное начальное число по умолчанию, используемое с srand()
, обычно основанное на текущем времени эпохи в секундах. ).
По-видимому, нет собственного способа избежать рекурсии с помощью dxhd
, но это можно сделать с помощью sxhkd
, используя следующую конфигурацию:
@{a-z}
pkill -USR2 -x sxhkd; xdotool key ctrl+g key {a-z} sleep 1 key Tab; pkill -USR2 -x sxhkd
Первая и последняя команды отправляют sxhkd
сигнал SIGUSR2
, который переключает состояние захвата всех его привязок . Это позволяет нам использовать связанный ключ между ними, не вызывая рекурсии.
(Команда xdotool
также была сжата в одну строку с помощью встроенной -в цепочки команд , просто чтобы сделать строку короче; исходные команды, разделенные ;
, также будут работать. К сожалению, sxhkd
не поддерживает многострочные -команды.)