私は最近フィッシュシェルを使い始めました。
echo $EDITOR
返品vim
ところでエディタを実行させてEDITOR
環境変数で探してみなければならないプログラムを使えば何も出ないようです。
使用時の例としてpass edit
(fromhttps://www.passwordstore.org/)それは戻ります
vi: command not found
(env変数に何も設定されていない場合は、viを代替手段として使用しますEDITOR
)
私が逃したものは何ですか?
ベストアンサー1
一部のプログラムは$VISUAL
環境変数よりも環境変数を最初に見つける$EDITOR
ため、両方が設定されている場合は$VISUAL
その変数が優先されます。
また、シェル変数はシェル言語の変数です。EDITOR=preferred-editor
そのコマンドからコマンドを呼び出す必要があります。環境彼らにそれを選択させてください。
シェルは一部の変数を環境変数にマップし、これらの変数をvar=value
実行するすべてのコマンドの環境に渡すことができます。rc
-like シェルでは、次のように実行されます。みんなBourneなどのシェルではシェル変数が使用されますexport var
。シェルでは環境変数を設定csh
できますsetenv var value
。次のオプションをfish
使用してください。-x
set
> set var value
> echo $var
value
> printenv var
>
$var
シェル変数が設定されましたが、に渡されたvar=value
環境にエクスポートされませんでしたprintenv
。
> set -x var value2
> echo $var
value2
> printenv var
value2
今回は、それが受け取ったコンテキストからprintenv
1つを取得します。var=value2
printenv
標準コマンドではありませんが、一般的です。env
は標準コマンドなので、システムにない場合は、次のことをprintenv
試すことができます。
env | grep -E '^(VISUAL|EDITOR)='
ただし、変数にvar=<newline>VISUAL=
同じ値がある場合、またはそれより大きい値がある場合は、だますことがLINE_MAX
できます。
他のオプションは次のとおりです。
perl -le 'print $ENV{VISUAL}'
python -c 'import os; print(os.getenv("VISUAL"))'
var=value
さらに、ここのシナリオはごくまれですが、特定のvar
環境に対して複数のコマンドを使用してコマンドを実行できます。
たとえば、次のことができます。
execve("/path/to/cmd", ["cmd", "some arg"], ["VISUAL=vi", "VISUAL=emacs"])
cmd
環境変数が持つと見なされる値は、VISUAL
受け取る環境変数のリストを取得する方法によって異なりますexceve()
。一部のコマンド/ライブラリ(例:libc
's getenv()
)は最初のコマンドを選択し、一部のコマンド/ライブラリは最後のコマンドを選択します。一部のシェルはこれらのいずれかを対応する環境変数にマップしますが、他のシェルは保持して追加の実行時に渡すことができます。
だからあなたはそれを行うことができset -x VISUAL vim
、両方とも実行され、最初のものだけを変更するので、2番目のものも提供することがprintenv
わかります。emacs
fish
VISUAL=vi
VISUAL=emacs
VISUAL
printenv
しかし、これには積極的にユーザーを欺くために何かまたは誰かがfish
必要です。