Saya menggunakan source
perintah dalam skrip bash saya untuk membaca / mencetak nilai variabel
more linuxmachines_mount_point.txt
export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
source linuxmachines_mount_point.txt
echo $linuxmachine01
sdb sdc sdf sdd sde sdg
Apa kebalikan dari source
untuk mengesampingkan variabel?
Hasil yang diharapkan
echo $linuxmachine01
< no output >
bash
shell-script
source
yael
sumber
sumber
source
yang mengatur variabel di lingkungan Anda, tetapiexport
pernyataan dalam file yang Andasource
. Jadi kebalikan darisource
itu bisasource
, jika Andasource
file yang berbeda yangunset
semuanya variabel yang sama.export
s. Yangexport
dilakukan adalah menyalin nilai-nilai ke lingkungan - tetapi mereka hadir sebagai variabel shell apakah mereka juga didefinisikan sebagai variabel lingkungan. Selain itu, mendefinisikan variabel lingkungan yang tidak perlu mempersingkat panjang baris perintah maksimum Anda, karena mereka disimpan dalam ruang per-proses (terbatas!) Yang sama.Jawaban:
Menggunakan subkulit (Disarankan)
Jalankan perintah sumber dalam subkulit:
Subkulit didefinisikan oleh parens:
(...)
. Setiap variabel shell yang diatur dalam subkulit dilupakan saat subkulit berakhir.Menggunakan tidak disetel
Ini menghapus variabel apa pun yang diekspor oleh
linuxmachines_mount_point.txt
:-F'[ =]+'
memberitahu awk untuk menggunakan kombinasi spasi dan tanda sama dengan apa pun sebagai pemisah bidang./^export/{print $2}
Ini memberitahu awk untuk memilih garis yang dimulai dengan
export
dan kemudian mencetak bidang kedua.unset $(...)
Ini menjalankan perintah di dalam
$(...)
, menangkap stdout-nya, dan menghapus semua variabel yang dinamai oleh outputnya.sumber
file
adalah pernyataan ekspor.Anda tidak dapat membuka
source
skrip.Apa yang dapat Anda lakukan adalah menyimpan semua variabel yang diekspor dalam file sementara, membandingkannya dengan variabel setelah skrip diambil, dan kemudian dihapus dengan
unset
, misalnya:sumber
export
s.Anda dapat menggunakan
unset
perintah untuk "melupakan" variabel.sumber
Solusi paling sederhana untuk mendapatkan output yang Anda harapkan (tidak ada) adalah mendeklarasikan ulang variabel sebagai kosong:
Tentu saja variabel masih didefinisikan (dan diekspor), kosong tetapi didefinisikan:
Untuk menghapus variabel dari lingkungan dan shell yang berjalan dengan benar, Anda harus menggunakan unset (cara yang disarankan):
sumber
Cara paling sederhana untuk melakukan ini adalah dengan memodifikasi skrip Anda sehingga ia juga mendefinisikan perintah untuk membatalkan efek skrip:
sumber
declare -A linuxmachines=( [01]="sdb sdc sdf" [02]="sde sdd sdb" [03]="whatever" )
maka itu hanyaunset linuxmachines
untuk mengembalikan.Anda dapat menulis linuxmachines_mount_point.txt Anda seperti ini
Ketika Anda membutuhkan variabel Anda
Saat Anda ingin menghapus variabel
sumber
Jika Anda menggunakan
source
perintah untuk mengaktifkanVirtualEnvironment
, Anda bisa keluar menggunakan perintahdeactivate
.sumber