概要
以下、自分用のメモです。いつも忘れるので。。
業務でお客様の環境でシェル操作をする場合、勝手に設定変更して、それを保存しておくことはなかなか出来ません。
なので、一時的な設定変更を行って、作業終わりに元に戻すことが多いと思います。
んで、Linux上で作業している場合シェル操作が主になるのですが、**
の展開をONにしていないと何かと不便ですので、よくONにして作業します。
が、いざ使い時に忘れてしまっているので、毎回うーんってなって思い出してます。(年ですね・・)
忘れないうちにここにメモしておきます。
まずは今の設定を出力しておく
shopt -s
で有効化、shopt -u
で無効化です。
最初に有効になってるかどうか、プラス、後で戻せるように今の設定を出しておきます。
$ shopt -p > shopt.txt
こんな風な内容が出力されます。
shopt -u autocd shopt -u assoc_expand_once shopt -u cdable_vars shopt -u cdspell shopt -u checkhash shopt -u checkjobs shopt -s checkwinsize shopt -s cmdhist shopt -u compat31 shopt -u compat32 shopt -u compat40 shopt -u compat41 shopt -u compat42 shopt -u compat43 shopt -u compat44 shopt -s complete_fullquote shopt -u direxpand shopt -u dirspell shopt -u dotglob shopt -u execfail shopt -s expand_aliases shopt -u extdebug shopt -s extglob shopt -s extquote shopt -u failglob shopt -s force_fignore shopt -s globasciiranges shopt -u globstar shopt -u gnu_errfmt shopt -s histappend shopt -u histreedit shopt -u histverify shopt -u hostcomplete shopt -u huponexit shopt -u inherit_errexit shopt -s interactive_comments shopt -u lastpipe shopt -u lithist shopt -u localvar_inherit shopt -u localvar_unset shopt -u login_shell shopt -u mailwarn shopt -u no_empty_cmd_completion shopt -u nocaseglob shopt -u nocasematch shopt -u nullglob shopt -s progcomp shopt -u progcomp_alias shopt -s promptvars shopt -u restricted_shell shopt -u shift_verbose shopt -s sourcepath shopt -u xpg_echo
プラス、念の為、set
コマンドで設定されている内容も出力しておきましょう。
$ shopt -po > set.txt
こんな風な内容が出力されます。
set +o allexport set -o braceexpand set -o emacs set +o errexit set +o errtrace set +o functrace set -o hashall set -o histexpand set -o history set +o ignoreeof set -o interactive-comments set +o keyword set -o monitor set +o noclobber set +o noexec set +o noglob set +o nolog set +o notify set +o nounset set +o onecmd set +o physical set +o pipefail set +o posix set +o privileged set +o verbose set +o vi set +o xtrace
後で元に戻す際に利用できます。(見て戻したりするのが多いとおもいますが、eval で一気に戻すことも出来ますね)
globstarを有効
以下で設定できます。
$ shopt -s globstar
これで '**' の展開が有効になりました。試してみましょう。
以下のようなディレクトリ階層とします。
$ tree . ├── dir1 │ ├── sub1 │ │ └── Taskfile.yml │ └── Taskfile.yml ├── dir2 │ ├── sub2 │ │ └── Taskfile.yml │ └── Taskfile.yml
globstar が無効の状態だと、以下のようになります。
$ shopt -u globstar $ ls **/*.yml dir1/Taskfile.yml dir2/Taskfile.yml
globstarが有効な場合は以下のようになります。
$ shopt -s globstar $ ls **/*.yml dir1/sub1/Taskfile.yml dir1/Taskfile.yml dir2/sub2/Taskfile.yml dir2/Taskfile.yml
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。