Gnu画面を実行する前にインポートするプロジェクト固有の設定ファイルがあります。
このファイルでは、テストコマンドと関連テストのbashコンプリートを設定しました。
次のようになります。
$PROJECT_HOME/app/bin/lib/behat_suites.sh # _behat_suites() defined here
complete -F _behat_suites run_behat_suite
export -f _behat_suites
問題は、各画面が新しいシェルであり、complete -F
設定を維持できないことです(残りの環境では維持されます。適切なサブシェルです)。
これはexport
、関数が画面サブシェルに保持されますが、完了設定自体は維持されないことを意味します。
direnvのようなツールが不足しているか、私のユーザー〜/ .bashrcに設定を配置する場合は、サブシェルプロセスが完了した設定を継承する方法はありますか?
答え1
これを簡単に行う方法はありません。complete -p
親シェルの出力を子シェルに渡す必要があります。
まず、サブシェルに追加のコマンドを挿入できます。
$ bash --rcfile <(echo '. ~/.bash_profile')
complete -p
今これを次のように紹介しようとすると:
$ bash --rcfile <(echo '. ~/.bash_profile'; while read line; do echo "$line"; done < <(complete -p))
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
ほぼうまくいきますが、コマンドを入力したときに一気に動くようですcomplete
。ファイルを中間ファイルとして使用しようとしても機能しません。
$ complete -p > /tmp/cmp.txt; bash --rcfile <(echo '. ~/.bash_profile'; echo '. /tmp/cmp.txt')
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
なぜ失敗したのかを調べようとするだけでは、もはや物事を明らかにすることはできません。ここでは、以下を介してbashの詳細出力を有効にします-set -x
。
$ bash
$ set -x
次に、作成したばかりのファイルを取得します。
$ . /tmp/cmp.txt
+ . /tmp/cmp.txt
++ complete -F _manila manila
++ complete -F _minimal
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
++ complete -F _command time
++ complete -F _command do
++ complete -o bashdefault -o default -o nospace -F __git_wrap_git_checkout gcob
したがって、特別なことが起こらない限り、出力に含まれるデータはこの特別な場合に移植可能であるようには見えませんcomplete -p
。
引用する
答え2
入れる必要はありませんみんな~/.bashrcに設定がありますが、「1行」を追加して関数が定義_behat_suites
されていることを確認できます。そして
完成機能はいいえ定義されている場合、定義は完了です。
以下は、読みやすいように1行ずつ分類したものです。
declare -f _behat_suites >/dev/null &&
! complete -p run_behat_suite >/dev/null &&
complete -F _behat_suites run_behat_suite