シェルはより「攻撃的」になることができますか?


10

私のGentoo Linuxは、不適切 USE フラグを有効にしてコンパイルされています。

# sudo su -
Password: 
Hold it up to the light --- not a brain in sight!
Password: 

不快感の程度に基づいて運勢を選択することもできます。

# fortune -o kernelcookies | cowsay -b
 _________________________________________ 
/ /* This is total bullshit: */           \
|                                         |
\ linux-2.6.6/drivers/video/sis/init301.c /
 ----------------------------------------- 
        \   ^__^
         \  (==)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

リンクで提供されているフレーバーアイテムのリスト1が短いことを考えると-個人的には分子動力学シミュレーションパッケージを使用していません-Linux (またはUNIX)のシェルにそのようなスパイスは他にもありますか?


1- cowsayコマンドやスクリプトの出力など、運命だけでなく任意の引数を出力できることを覚えておくのは良いことですcowsay -s $(script_in_path_or_command)。注-sは、ここでの牛の外観のためのものです。マンページを参照してください。


apt-get mooおよびaptitude moo、aptitude moo -v、aptitude moo -vvなど。しかし、それはDebianベースです。
Renan Vicente

1
あなたが走るたびに特別な侮辱があるべきですsudo su -。たぶん、ルートパスワードをに変更するだけですsudo -i
derobert 14年

1
ところで、私はbashでこれを行う方法を考えました。終了コードに基づいてプロンプトに色を付けるのに使用するのと同じスタントを使用し、Ubuntuのコマンドも見つかりませんでした...帰宅したら、それを書いて投稿します。
derobert 14年

1
それほど不快ではありませんが、そのような気分で:sl-「ls」の代わりに「sl」と入力すると、蒸気機関車が画面上を走ります
Ouki

1
さて、家に帰って就寝したので、今日まで執筆していませんでしたが、回答として投稿しました。
derobert 14年

回答:


9

では、PS1and を使用するとcommand_not_found_handle、bashを侮辱することができます。

anthony@Watt:~$ . /tmp/insult.sh 
anthony@Watt:~$ sl
bash: sl: command not found, incompetent spoony bard
anthony@Watt:~$ ls /wrong/path
ls: cannot access /wrong/path: No such file or directory
Learn to type, second-rate Horrified Heron.
anthony@Watt:~$ 

そして/tmp/insult.sh、これは私が上記で調達したものです。

### Data ###
bash_insulter_sentences=(
    'Have you considered Windows, %s?\n'
    'Learn to type, %s.\n'
    'Fell asleep at the keyboard again, %s?\n'
    "Failure is common when you're a %s, isn't it?\n"
)

bash_insulter_subjects=(
    'spoony bard'           # we all played this, right?
    'extra-Warty Warthog'
    'Dazed Drake'
    'Fidgety Fawn'
    'Horrified Heron'       # etc.
)

bash_insulter_adjectives=(
    'incompetent ' # these have built-in spacing
    'inept '
    'second-rate '
    '' # chance of none
    ''
)

### Functions to generate insults ###
bash_insulter_random_element() {
    if [ ${BASH_VERSINFO[0]} -lt 4 ] || \
        [ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -lt 3 ]; then
        # bash before 4.3 doesn't have -n
        eval "local var=(\"\${$1[@]}\")"
    else
        local -n var="$1"
    fi
    local len=${#var[@]}
    echo -n "${var[$RANDOM % len]}" # Slightly biased. Don't care.
}

bash_insulter_full_subject() {
    bash_insulter_random_element bash_insulter_adjectives
    bash_insulter_random_element bash_insulter_subjects
}

bash_insulter_do_insult() {
    printf "$(bash_insulter_random_element bash_insulter_sentences)" "$(bash_insulter_full_subject)"
}

### set up ###
command_not_found_handle() {
    echo "bash: $1: command not found, $(bash_insulter_full_subject)"
    return 127
}

PS1='`
    if [ 0 -ne $? -a 127 -ne $? ]; then
        bash_insulter_do_insult
    fi
    echo "\u@\h:\w\$ "; 
`'

@illuminÉ古いバージョンのbashを使用している可能性がありますが、その機能がいつ追加されたかはわかりません。declare -nは機能しますか?
derobert 2014年

4.2.45(1)リリースがあります。たまたま、更新する大量のpkgが必要になります。後でArchでこれを試します!おかげで、楽しそうです、私はそれを混同するアイデアが好きです!乾杯!

@illuminÉ4.3.0ここでは、DebianがGentooよりも新しいbashを持っている可能性はありますか?とにかく、NEWSファイルを確認すると、4.3の新機能です。新機能を必要としないバージョンの追加について見ていきます。
derobert 2014年

@illuminÉが編集され、うまくいけばbash 4.2で動作するようになります。
derobert 2014年

ありがとう、それは本当に爆笑です。よく働く!しかし、確かにDebian。私が調べたところ、確かに4.3はまだ実現していません。ああ、ところで、私はバードの物語の笑いにもっと夢中になりました。

2

誰かが言及しましたsl。最大の予測可能性を目指すインタープリターのようなソフトウェアでは、サプライズは確かにコンテキストで「攻撃的」なものと見なされます。マニュアルには、適切なオプションもリストされています。

DESCRIPTION
   sl  is a highly advanced animation program for curing your bad habit of
   mistyping.

   -a     An accident is occurring. People cry for help.

   -l     Little version

   -F     It flies like the galaxy express 999.

   -c     C51 appears instead of D51.

...そして興味深いバグ

BUGS
   It sometimes list directory contents.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.