環境変数を設定し、メモリ内のファイルを編集せずに他のシェルに影響を与える方法はありますか?この方法は、システムに接続するすべての新しいユーザーに適用され、次にLinuxシステムを再起動した後にのみ適用されますか?
私は私のLinuxでコンピュータが起動したときにのみ(スクリプトで)動作することを覚えようとしています(したがってファイルは必要ありません)、私のシェルから接続されているすべてのユーザーにいくつかのフラグを設定したいと思います。例:
linux_test_run=yes
しかし、私はそのLinuxで開かれた新しいシェルで動作したいと思います。次に、誰かがコンピュータを再起動したら、変数が消えることを願っています。
これを達成するために私ができる(簡単な)作業はありますか? (ファイルを使わずに...)
答え1
export
環境の子プロセスに渡される変数を表示するために使用できます。
export linux_test_run=yes
新しく接続されたユーザーがこの変数を使用できるようにするには、シェルの初期化ファイルを編集する必要があります。
答え2
さて、そこにあるファイルは通常/tmp
再起動時にクリーンアップされるので、「ファイルが存在する場合はインポートされます」などのファイルをインポートするスクリプトを含めることはどうですか?その後、必要に応じてそのファイルから初期化できます。これは/etc/profile
。
ところで、文脈がよく理解できませんね。実行したい操作の詳細を提供できる場合は、より良い回答を得ることができます。
答え3
ほとんどのログイン方法は環境変数を読み取ります/etc/profile
。 (他の可能性があるかもしれませんが、これが最も簡単です。)したがって、私が正しく理解したら、/etc/profile
次回の再起動時に環境変数の割り当てを追加し、それから再起動時にそれらを削除したいと思います。
まず、まだ存在しない場合(一部のディストリビューションには設定されている)というディレクトリを作成し、/etc/profile.d
このコードを次に追加します/etc/profile
。
for x in /etc/profile.d/*.sh; do
. "$x"
done
unset x
export linux_test_run=yes
というファイルを含むファイルを作成します/etc/profile.d/test_run.sh.0
。
次のコードスニペットを/etc/rc.local
(または起動時に実行される他のスクリプト)に追加します。
for x in /etc/profile.d/*.sh.[0-9]*; do
n=${x##*.} # extract the part after the last .
case n in
*[!0-9]*) continue;; # n is not a number, so skip this file
*[1-9]*) mv "$x" "${x%.*}.$(($n-1))";; # decrement the number in the file name
*) # the file is *.sh.0, so rename to .sh and schedule for deletion
echo "${x%.*}" >>/etc/profile.d/cancel-on-reboot.list
mv "$x" "${x%.*}";;
esac
done
if [ -e /etc/profile.d/cancel-on-reboot.list ]; then
# rename all files in this list so they won't be considered any longer
while read -r x; do
mv "$x" "$x.cancelled"
done </etc/profile.d/cancel-on-reboot.list
rm /etc/profile.d/cancel-on-reboot.list
fi
再起動後にこの設定を再度有効にするには、名前を*.sh.0
。
答え4
bashrc
申し訳ありません。スタートアップファイルをどこかで編集する必要があります/etc
。おそらく。
ただし、ファイルを使用したくない唯一の理由が、再起動時にこの動作が消えることを望む場合は、他の方法があります。
- このファイル
setvariable.bash
から。bashrc
/etc/init.d
再起動時に起動するファイルをファイルに挿入して無効にしますsetvariable.bash
(空のファイルまたは他のものと置き換えます)。
ハッキングですが、機能することもできます。