- Published on
Bash エクスクラメーション(!)を無効にする
- Authors
- Name
- Shou Arisaka / 有坂翔
Linuxパソコン・サーバーのBash言語において、コマンド、特殊文字として認識されてしまうエクスクラメーション(!)、つまり"ビックリマーク""びっくり記号"を無効化する方法について紹介します。
以前エクスクラメーションのエスケープについて書きました。
Bashで!(エクスクラメーション)をエスケープするには単純なケースでは上記の方法はうまくいくのですが、クウォートで囲まれていたりするとエラーになります。
以下はエスケープできるケース
xsv select '!path' -d "\t" - <<< "$( awk '{print NR "\t" $s}' <<< "$( data-music-csv | removeEmptyLines )" )" | xsv sort --select rate -N -R | xsv search --select genre "${2:-".*"}" | xsv table | shuf | tail -1 | awk 1
以下はエラーになるケース
id="$( xsv select '!path' -d "\t" - <<< "$( awk '{print NR "\t" $s}' <<< "$( data-music-csv | removeEmptyLines )" )" | xsv sort --select rate -N -R | xsv search --select genre "${2:-".*"}" | xsv table | shuf | tail -1 | awk 1 )"
僕もどうやってこれをエスケープするのか全くわからないので、いっそ無効にしてしまいましょう。
set +H
$ : !music
: music-random
$ set +H
$ : !music
$
これで!
コマンドが使えなくなりました。普段常用してるから使えなくなるのは困るという場合はset -H
で戻せばいいですね。
以下でも書かれていますが、やっぱり!
ってこわいですよね。rm -rf .
とかが!r
で実行されてしまうわけですから、危険すぎる。