私の仕事にはCentos Linuxボックスがいくつかあります。
私は彼らのための一種の環境変数ツールを作る任務を務めました。
アイデアは、ユーザーがプロジェクトのパラメータ(およびPythonpath "mode")を使用してツールを実行し、Enterキーを押してa)"PROJ"
という新しい変数を作成し、b)PYTHONPATH
新しいフォルダを追加することです。これらの変数の範囲は、ターミナルセッションが開いている間のみ持続します。
私が働いた他の場所でも、このようなことが起こっているのを見ました。しかし、私はそれが何であるかを掘り下げたことがなく、今は自分自身を蹴っています!
私はこれが変数名を与えられたパスにエクスポートするbashスクリプトだと思います。 Pythonは環境変数をエクスポートしますが、保持されません。エクスポートはPythonスクリプトのサブプロセスにのみ適用されるため、スクリプトが終了したら変数も同じです。だから私はそれがbashスクリプトであると結論付けました。
もしそうなら、すべてのボックスにスクリプトが含まれるように(可能であればユーザーが入力しないようにエイリアスを指定する)、このツールをデプロイする最善の方法は何ですかsource <script_location>.sh
?
第二に、パラメータが有効であることを確認する最良の方法は何ですか?正しいプロジェクトコードを含むjsonファイルを考えています。
最後に表示されたパラメータと表示されていないパラメータを混在させることはできますか?たとえば、ユーザーは次のように入力できますか?<tool_name> <project_title> -f
ここで、-fは追加の選択機能ですか?これをすべてのユーザーの~/.bashrcに配布する必要がありますか?
私が探しているものの例がある場合は、正しい方向を教えてください。
ベストアンサー1
shファイルを作成して定義できます。機能環境が更新されました。関数名は「tool_name」で指定できます。
確認するhttps://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files- 対話型ログインシェルがソースコードを提供します/etc/profile
。システムでこのファイルを確認すると、特定のディレクトリ内のすべてのファイルをインポートするのと同じことがわかります。私のUbuntuベースのシステムでは、
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
だから/etc/profile.d/tool_name.sh
ファイルは次のようになります
# create the tool function to update the environment
tool_name() {
# todo: parse options, validate arguments
export PROJ=$1
PYTHONPATH+=":$PROJ/bin"
}
ユーザーはそれを使用するために特別なものは必要ありません。
複数のボックスに配布する方法を教えてくれるわけではありません。 /etc/profile.dにインストールするには、sudoまたはrootアクセスが必要です。