私は先月、これを書き上げたので不思議でした。argsからランダムなエントリを選択する方がいいですか?
#!/usr/bin/bash
# Collects all of the args, make sure to seperate with ','
IN="$*"
# Takes everything before a ',' and places them each on a single line of tmp file
echo $IN | sed 's/,/\n/g' > /tmp/pick.a.random.word.or.phrase
# Obvious vars are obvious
WORDFILE="/tmp/pick.a.random.word.or.phrase"
# Pick only one of the vars
NUMWORDS=1
## Picks a random line from tmp file
#Number of lines in $WORDFILE
tL=`awk 'NF!=0 {++c} END {print c}' $WORDFILE`
# Expand random
RANDOM_CMD='od -vAn -N4 -tu4 /dev/urandom'
for i in `seq $NUMWORDS`
do
rnum=$((`${RANDOM_CMD}`%$tL+1))
sed -n "$rnum p" $WORDFILE | tr '\n' ' '
done
printf "\n"
rm /tmp/pick.a.random.word.or.phrase
主に私が尋ねる:
- 私はtmpファイルを持っている必要がありますか?
- これを別のプログラムで1行で実行する方法はありますか?
- できるだけ凝縮するには?
コマンドの呼び出し例を表示できますか?説明にカンマが表示されている場所は明確ではありません。 –
btw、 'RANDOM_CMD'で使用しているパターンは、重大なバグを起こしやすくなります。リテラル引用符、エスケープされた空白などを含むコマンドは正しく処理されません。関連するベストプラクティスの説明については、[BashFAQ#50](http://mywiki.wooledge.org/BashFAQ/050)を参照してください。 –
また、(非標準化された) 'seq'コマンドをbash組み込み' for((i = 0; i