Производить команды произвольно

Я хочу запустить одну из двух команд C1 и C2 в случайном порядке. Как это сделать в командной строке (bash)? Поймите, если один лайнер возможен.

    3 Solutions collect form web for “Производить команды произвольно”

     if (( RANDOM % 2 )); then C1; else C2; fi 

    В вашем специальном случае:

     C$((RANDOM%2+1)) 

    будет работать 🙂 И эй, это самый короткий ответ!

    Вы можете сделать что-то подобное в Bash:

     $ (( RANDOM%2 == 0 )) && C1 || C2 

    Это порождает случайное число, либо 0, либо 1. Если оно равно 0, то выполняется C1, иначе выполняется C2, если это не так.

    пример

     $ (( RANDOM%2 == 0 )) && echo 0 || echo 1 1 $ (( RANDOM%2 == 0 )) && echo 0 || echo 1 0 

    ПРИМЕЧАНИЕ. Первым символом является $ prompt.

    другой пример

    Если вы заинтересованы в том, чтобы C1 был терпеть неудачу, чтобы C2 мог работать, вы могли бы реструктурировать вышеупомянутое так:

     (( RANDOM%2 == 0 )) && CMD=C1 || CMD=C2 $CMD 

    зачем использовать это над оператором if / then?

    Этот ответ подвергся критике, но есть способ моего безумия. Хотя этот шаблон может казаться более неясным, чем если бы, то я нахожу его более читабельным и компактным, когда делаю что-то вроде следующего:

     #!/bin/bash CMD="" DIRS="/etc /home /www /data1 /data2 /var/log /var/spool/mail" FILE="/backup/$(hostname)-$(date +'%m-%d-%y').tar.gz" [ "$1" == "nas" ] && CMD="lftp -u user,password -e 'cd /dump/; mput /backup/*; quit' nas.mylan.com" || : [ "$1" == "scp" ] && CMD="scp /backup/* scponly@dumpserver:incoming' username" || : [ "$1" == "tape" ] && CMD='tar -cf /dev/st0 /backup/*' || : [ "$CMD" == "" ] && exit 1 || : # make a backup tar -zcvf $FILE $DIRS # Now depend upon circumstances run a backup command $CMD 

    Рекомендации

    • Совет скрипта оболочки Bash: запуск команд из переменной
    Interesting Posts

    Бафф / кеш памяти не совпадают

    Умножает общие ресурсы cifs с noauto на той же точке монтирования работает только с root

    dnf установить завершение не работает с zsh, но работает с bash

    как создать много tar-архивов для огромной папки

    Можно ли разблокировать несколько устройств LUKS для формирования LVM при загрузке?

    Как использовать два операнда в левой части оператора сравнения в Bash

    установить значение по умолчанию g ++ на CentOS?

    Постепенное получение изображения с использованием SANE

    Разделить tmux окна с теми же ключами, что и в Emacs?

    ffmpeg пакетное преобразование .avi в .mp4 – в золе

    Какова команда «добавить» строку в файл?

    Какие типы установщиков должны использовать коммерческое программное обеспечение для поддержки Linux?

    Возобновить загрузку wget из другого зеркала

    Невозможно сделать motd для показа на Debian 8

    Отобразите awesome wm cheatsheet, удерживая клавишу Windows

    Linux и Unix - лучшая ОС в мире.