Команды выполнения наугад

Я не думаю, что Вы действительно хотите это. Мой обычный рабочий процесс идет как это:

  • Введите команду
  • Выполните его
  • Заметьте его сбой
  • Нажмите клавишу UP
  • Отредактируйте команду
  • Выполните его снова

Теперь, если бы неудавшаяся команда не была сохранена в историю, то я не мог бы заставить ее легко назад фиксировать и работать снова.

25
26.08.2013, 11:36
3 ответа
if (( RANDOM % 2 )); then C1; else C2; fi
33
27.01.2020, 19:40
  • 1
    Примите во внимание, что, если Вы хотите 1 в разногласиях N выполнения C1, необходимо, вероятно, использовать (( RANDOM % N == 0 )) вместо (( RANDOM % N )). Это только в особом случае N=2, что они имеют идентичную вероятность. –  Acumenus 08.07.2015, 06:25
  • 2
    @A-B-B == 0 неявно в (( блоки без сравнения, таким образом, я не уверен, что Вы имеете в виду. –  Chris Down 08.07.2015, 15:23
  • 3
    @A-B-B == 0 опечатка в моем предыдущем комментарии, я имею в виду > 0 неявно. С тех пор % 100 будет почти всегда возвращать значение выше 0, это ожидается. –  Chris Down 08.07.2015, 22:51
  • 4
    Явно помещенный, того, каково практическое применение было бы RANDOM % $N без == 0? IMO, например, с N=100, это намного более прагматично для желания 1 в 100 разногласиях (поставленный с == 0) чем 99 в 100 разногласиях (поставленный без == 0). –  Acumenus 08.07.2015, 23:41

В Вашем особом случае:

C$((RANDOM%2+1))

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

21
27.01.2020, 19:40
  • 1
    Почему требуется два набора круглых скобок вокруг этого? Я просто не очень знаком с тем, что Вы использовали. –  AJMansfield 03.07.2013, 21:16
  • 2
    @AJMansfield $((1+1)) -> 2, например. $(( )) вычисляет то, что внутри. –  Tyilo 03.07.2013, 21:46
  • 3
    Это было бы еще короче, если бы OP выбрал C0 и C1. Возможно, он не программист? –  ott-- 03.07.2013, 22:51
  • 4
    я вполне уверен, который C1 и C2 были заполнителями, а не фактическими командами для выполнения. :-) –  Chris Down 06.07.2013, 06:42
  • 5
    Это является милым. В ответе Stephane +1 –  sudo 19.01.2017, 00:47

Можно сделать что-то вроде этого в 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

Примечание: Первый символ, $, подсказка.

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

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

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

почему использование это по условному оператору?

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

#!/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

Ссылки

5
27.01.2020, 19:40
  • 1
    Это будет работать C2 если C1 сбои, который нарушает спецификацию, размеченную в вопросе (а именно, это только одна из команд выполняется). x && y || z не эквивалентно if x; then y; else z; fi. –  Chris Down 03.07.2013, 07:34
  • 2
    @ChrisDown - посмотрите модификации. –  slm♦ 03.07.2013, 07:48
  • 3
    Редактирование номинально фиксирует это, но это действительно неясно. "Если Вы обеспокоены C1, имеющим необходимость перестать работать так, чтобы C2 мог работать", не получает сценарий вообще. Проблема - это если C1 команда, которая иногда возвращает ненулевой код выхода, Вы закончите тем, что выполнили обоих C1 и C2 когда это происходит. подводная лодка –  tripleee 03.07.2013, 09:23
  • 4
    +1, но использование ((...)) вместо [...] - двойные круглые скобки специально для арифметических выражений. –  glenn jackman 03.07.2013, 12:45
  • 5
    @glennjackman - спасибо я внес изменение. –  slm♦ 03.07.2013, 14:57

Теги

Похожие вопросы