Я не думаю, что Вы действительно хотите это. Мой обычный рабочий процесс идет как это:
Теперь, если бы неудавшаяся команда не была сохранена в историю, то я не мог бы заставить ее легко назад фиксировать и работать снова.
В Вашем особом случае:
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
Примечание: Первый символ, $
, подсказка.
Если Вы обеспокоены 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
C2
если C1
сбои, который нарушает спецификацию, размеченную в вопросе (а именно, это только одна из команд выполняется). x && y || z
не эквивалентно if x; then y; else z; fi
.
– Chris Down
03.07.2013, 07:34
C1
команда, которая иногда возвращает ненулевой код выхода, Вы закончите тем, что выполнили обоих C1
и C2
когда это происходит. подводная лодка
– tripleee
03.07.2013, 09:23
((...))
вместо [...]
- двойные круглые скобки специально для арифметических выражений.
– glenn jackman
03.07.2013, 12:45
(( RANDOM % N == 0 ))
вместо(( RANDOM % N ))
. Это только в особом случае N=2, что они имеют идентичную вероятность. – Acumenus 08.07.2015, 06:25== 0
неявно в((
блоки без сравнения, таким образом, я не уверен, что Вы имеете в виду. – Chris Down 08.07.2015, 15:23== 0
опечатка в моем предыдущем комментарии, я имею в виду> 0
неявно. С тех пор% 100
будет почти всегда возвращать значение выше0
, это ожидается. – Chris Down 08.07.2015, 22:51RANDOM % $N
без== 0
? IMO, например, с N=100, это намного более прагматично для желания 1 в 100 разногласиях (поставленный с== 0
) чем 99 в 100 разногласиях (поставленный без== 0
). – Acumenus 08.07.2015, 23:41