echo
Bash 3.2.52では、環境ではないすべての変数(すべての独自の宣言変数)が必要です。
すべての変数を印刷するこのコマンドは、私が理解できない出力を提供し、私の考えでは、私がすでにset -x && clear -r
作業しているパターンと衝突します。
diff -U 1 <(set -o posix ; set |cut -d= -f1) <(
exec bash -ic 'set -o posix ; set' | cut -d= -f1) |
grep '^[-][^-]' |
cut -d- -f2 |
grep -vE '^(COLUMNS|HISTFILESIZE|HISTSIZE|LINES|PIPESTATUS)$'
echo
そのようなリストを取得するにはprintf
(または他の「より簡単な」)作業が必要です。
このバージョンのBashで可能であれば、どのように達成できますか?
ベストアンサー1
GNU Parallel Includeenv_parallel
セクションには、env_parallel
サポートされているシェルのすべての変数がリストされています。
このコードの場合はbash
次のようになります。
_names_of_VARIABLES() {
compgen -A variable
}
_bodies_of_VARIABLES() {
typeset -p "$@"
}
したがって、すべての変数が与えられたら、ユーザーがどの変数を設定したかを調べる必要があります。私たちできるこれは特定のバージョンのすべての変数をハードコードすることによって行われますが、将来のバージョン(ユーザーまたは将来のバージョン?)でより多くの変数が設定される可能性があるため、bash
これは将来の証拠ではありません。bash
$BASH_MYVAR
bash
したがって、env_parallel
クリーンな環境を定義し、env_parallel --session
その中で実行する必要があります。これは$PARALLEL_IGNORED_NAMES
、以前に定義された名前をリストして設定されます(上記のコードを使用)。
後でユーザーが変数を設定した環境で実行してみると、クリーン環境と現在の環境の違いが簡単にわかります。
env_parallel --session
セッションごとにきちんとした環境を定義することは可能ですが、セッション全体で使用できる参照環境が必要な場合は、変数のリストをファイルに保存できます。だから:
# In clean envronment
compgen -A variable > ~/.clean-env-vars
# In environment with user defined vars
compgen -A variable | grep -Fxvf ~/.clean-env-vars
たとえば、
#!/bin/bash
# In clean envronment
compgen -A variable > ~/.clean-env-vars
myvar=4
yourvar=3
# In environment with user defined vars
compgen -A variable | grep -Fxvf ~/.clean-env-vars
# This prints:
# myvar
# yourvar
# PIPESTATUS (which is set when running a pipe)