Perintah Ekspor Bash

Perintah Ekspor Bash

Jika Anda pernah berdiri di depan terminal, ketik `deklarasikan -p` untuk melihat apa yang terjadi dengan variabel Anda di bash, dan tekan enter, keren! Anda akan membunuhnya dengan ekspor di bash dalam waktu singkat. Di sini Anda akan belajar cara menggunakan ekspor di dalam dan di luar skrip bash. Sebelum Anda pergi dan membunuh zombie apa pun di bash, selalu membantu jika Anda tahu ke mana harus mendapatkan bantuan jika dalam kesulitan. Berikut adalah tampilan bagian bantuan untuk ekspor. Copy dan tempel. Tidak banyak yang terlihat tetapi kami akan mengembangkannya sehingga semuanya masuk akal.

Garis komando

help export

Keluaran

export: export [-fn] [name[=value]...] or export -p

Set export attribute for shell variables.
Marks each NAME for automatic export to the environment of subsequently
executed commands.  If VALUE is supplied, assign VALUE before exporting.

Options:

-f        refer to shell functions
-n        remove the export property from each NAME
-p        display a list of all exported variables and functions

An argument of `--' disables further option processing.

Exit Status:
Returns success unless an invalid option is given or NAME is invalid.

Besar! Sekarang Anda tahu semua yang perlu diketahui tentang ekspor bash. Sebelum Anda pergi dan memerasnya, inilah mengapa Anda akan mempertimbangkan untuk menggunakan ekspor daripada mendeklarasikan.

Mengapa ekspor?

Ada banyak alasan untuk tidak menggunakan ekspor. Lagi pula, Anda dapat mencapai hasil yang sama menggunakan deklarasi atau perintah yang tidak kita bicarakan, mengeset. Itu adalah argumen di pihak lawan.

Di sisi lain, kami dapat memilih untuk menggunakan ekspor. Sebagian besar pemrogram terbiasa dengan praktik mengekspor variabel ke subkulit. Ini dapat memberikan langkah awal saat mempelajari pemrograman bash.

Di tengah, tidak ada salahnya untuk mengganti export dengan perintah lain seperti mendeklarasikan. Selain itu, tidak ada salahnya menggunakan ekspor dalam situasi tertentu.

Karena kita sudah membahas cara menggunakan perintah mendeklarasikan sebelumnya, mari kita lihat daftar ekspresi yang setara menggunakan kedua perintah.

Export versus declare

Jika Anda dapat melakukannya dengan ekspor, Anda dapat melakukannya dengan menyatakan, atau dapatkah Anda? Di sini kami harus Anda bagaimana melakukan segala sesuatu dalam ekspor menggunakan mendeklarasikan.

Export a variable or function

Anda dapat dengan mudah menggunakan mendeklarasikan sebagai ganti ekspor untuk menambahkan atribut ekspor ke variabel atau fungsi. Namun, kebalikannya tidak benar. Ekspor tidak mengizinkan modifikasi atribut selain atribut ekspor.

Menggunakan ekspor

Di sini diperlukan dua deklarasi terpisah: variabel dan fungsi yang digunakan dalam contoh berikut. Selain itu, baris deklarasi juga diperlukan untuk menambahkan atribut integer ke variabel kita.

Jika forehammer kuat (lebih besar dari 9000), fungsi anonim akan menghasilkan teriakan perang, “forehammer!”

export  forehammer
declare -i forehammer
 linuxhint="linuxhint.com"
test -d "${linuxhint}" || {
  git clone https://github.com/temptemp3/linuxhint.com
}
true() { test ! ${forehammer} -gt 9000 || echo "forehammer!" ; }
export -f true
_() { ( bash ${linuxhint}/true.sh ) ; } # forehammer!
forehammer=900 ; _ #
forehammer=9001 ; _ #  forehammer!

Perhatikan bahwa contoh di atas dapat dijalankan sebagai bagian dari skrip bash atau di terminal tanpa komentar.

Menggunakan menyatakan

Di sini kita menyelamatkan satu baris kode dengan menggunakan perintah mendeklarasikan untuk mengekspor variabel dan fungsi selain menambahkan atribut lainnya. palu depan!

declare -ix forehammer
linuxhint="linuxhint.com"
test -d "${linuxhint}" || {
  git clone https://github.com/temptemp3/linuxhint.com
}
true() { test ! ${forehammer} -gt 9000 || echo "forehammer!" ; }
export -f true
_() { ( bash ${linuxhint}/true.sh ) ; } # forehammer!
declare -xf true
forehammer=900 ; _ #
forehammer=9001 ; _ #  forehammer!

Perhatikan bahwa contoh di atas dapat dijalankan sebagai bagian dari skrip bash atau di terminal tanpa komentar.

List export variables and functions

Ekspor dan deklarasi dapat digunakan secara bergantian untuk membuat daftar variabel dan fungsi ekspor dengan pengecualian bahwa daftar fungsi ekspor (hanya nama) hanya berfungsi dengan deklarasi. Jika tidak, mereka bekerja persis sama saat membuat daftar variabel dan fungsi ekspor.
 
Mari kita bandingkan ekspor dan deklarasikan saat melaku
kan operasi berikut:
 
[1] – daftar variabel ekspor
[2] – daftar nama variabel ekspor dengan isi
[3] – daftar fungsi ekspor (hanya nama)

Menggunakan ekspor

Gunakan ekspor untuk membuat daftar variabel dan nama fungsi kecuali deklarasi seperti daftar fungsi tanpa isi. Untuk itu, Anda akan memerlukan solusi atau menggunakan mendeklarasikan.

export -p  # [1] - list export variables
export -pf # [2] - list export function names with body
export -pF #[3] - (exit code 2)
export -pf | grep -e declare # [3] - workaround

Menggunakan menyatakan

Gunakan deklarasi untuk membuat daftar nama variabel dan fungsi tanpa solusi dalam kasus nama fungsi saja.

declare -px   # [1] - list export variables
declare -pxf  # [2] - list export function names with body
declare -pxF # [3] - list export functions (name only)

Remove the export attribute from variables and functions

Atribut ekspor dapat dihapus dari fungsi dan variabel menggunakan perintah ekspor atau deklarasi.

Menggunakan ekspor

Berikut cara menghapus atribut ekspor dari variabel atau fungsi menggunakan perintah ekspor. Pada contoh berikutnya, kami menggunakan ekspor untuk menambah, menghapus, dan membuat daftar variabel ekspor, a sampai d.

perintah

_ ()
{
function __ ()
{
export -p | grep -e 's(a|b|c|d)$' | xargs
};
export a b c;
__;
export -n b;
__;
export -n c;
__;
export b c d;
__;
export -n a b c;
__
}
_

Perhatikan bahwa contoh di atas dapat dijalankan di terminal jika Anda mengetik atau menyalin dan menempel.
Output

declare -x a declare -x b declare -x c declare -x d
declare -x a declare -x c declare -x d
declare -x a declare -x d
declare -x a declare -x b declare -x c declare -x d
declare -x d

Menggunakan menyatakan

Berikut cara menghapus atribut ekspor dari variabel dan fungsi menggunakan perintah mendeklarasikan. . Contoh ini melakukan hal yang sama seperti contoh di atas hanya menggunakan mendeklarasikan.

_ ()
{
function __ ()
{
declare -px  | grep -e 's(a|b|c|d)$' | xargs
};
declare -x a b c;
__;
declare +x b;
__;
declare +x c;
__;
declare -x b c d;
__;
declare +x  a b c;
__
}
_

Keluaran

declare -x a declare -x b declare -x c
declare -x a declare -x c
declare -x a
declare -x a declare -x b declare -x c declare -x d
declare -x d

Perintah yang setara

Berikut adalah daftar perintah ekspor dan perintah yang sesuai dengan menggunakan mendeklarasikan.

  1. ekspor dan deklarasikan -x
  2. ekspor -p dan deklarasikan -px
  3. ekspor -n dan nyatakan +x
  4. ekspor -f dan deklarasikan -xf
  5. ekspor -pf dan nyatakan -pxf
  6. ekspor -nf dan deklarasikan +xf

Contoh ekspor

Tidak ada panduan perintah ekspor bash yang lengkap tanpa contoh. Kami memiliki mereka di sini.

Cleanup export functions and variables in a script

Misalkan kita ingin menghapus semua jejak variabel dan fungsi ekspor dalam skrip bash. Tidak ada yang tidak dapat Anda lakukan dengan perintah ekspor.

#!/bin/bash
## test-export-cleanup
## version 0.0.1 - initial
##################################################
test -d "sh2" || git clone https://github.com/temptemp3/sh2.git -b 190607
SH2=sh2
. ${SH2}/cecho.sh
list-exports() {
  {
    export -p
    export -pf
  }
  | grep declare
  | cut '-d ' '-f3'
  | cut '-d=' '-f1'
}
cleanup-export() { { local name ; name="${1}" ; }
  {
     export -n  ${export}
     export -nf ${export}
   } 2>/dev/null
}
test-export-cleanup() {
  cecho yellow "exports: $( list-exports )"
  cecho green "cleaning up exports..."
  for export in $( list-exports )
  do
   cleanup-export ${export}
  done
  cecho green "done cleaning up exports"
  cecho yellow "exports: $( list-exports )"
}
##################################################
if [ ${#} -eq 0 ]
then
true
else
exit 1 # wrong args
fi
##################################################
test-export-cleanup
##################################################
## generated by create-stub2.sh v0.1.2
## on Wed, 03 Jul 2019 23:07:31 +0900
## see <https://github.com/temptemp3/sh2>
##################################################

Sumber: tes
t-export-cleanup.sh

Memerintah

bash test-export-cleanup.sh

Keluaran

exports: A B C f1 f2 f3
cleaning up exports...
done cleaning up exports
exports:

Perhatikan bahwa jika skrip dijalankan dalam cara terbatas, fungsi ekspor tidak disertakan. Kita dapat memodifikasi script di atas agar dapat berjalan dalam cara terbatas sebagai berikut.

#!/bin/bash
## test-export-cleanup
## version 0.0.1 - initial
##################################################
test -d "sh2" || git clone https://github.com/temptemp3/sh2.git -b 190607
SH2=sh2
. ${SH2}/cecho.sh
list-exports() {
  {
    export -p
  }
  | grep declare
  | cut '-d ' '-f3'
  | cut '-d=' '-f1'
}
cleanup-export() { { local name ; name="${1}" ; }
  {
     export -n  ${export}
   }
}
test-export-cleanup() {
  echo "exports: $( list-exports )"
  echo "cleaning up exports..."
  for export in $( list-exports )
  do
   cleanup-export ${export}
  done
  echo "done cleaning up exports"
  echo "exports: $( list-exports )"
}
##################################################
if [ ${#} -eq 0 ]
then
true
else
exit 1 # wrong args
fi
##################################################
test-export-cleanup
##################################################
## generated by create-stub2.sh v0.1.2
## on Wed, 03 Jul 2019 23:07:31 +0900
## see <https://github.com/temptemp3/sh2>
##################################################

Sumber: test-export-cleanup-restricted.sh

Export function for xargs

Menjalankan fungsi sebagai bagian dari daftar perintah xargs memerlukan fungsi yang akan diekspor. Anda dapat menggunakan perintah ekspor.

#!/bin/bash
## test-export-xargs
## version 0.0.1 - initial
##################################################
test-export-xargs() {
fun() {
echo A${@}
}
export -f fun
seq 9 | xargs -i bash -c "fun {}" | xargs
seq 9 | xargs -i echo "fun {}" | bash | xargs
}
##################################################
if [ ${#} -eq 0 ]
then
true
else
exit 1 # wrong args
fi
##################################################
test-export-xargs
##################################################
## generated by create-stub2.sh v0.1.2
## on Fri, 05 Jul 2019 22:47:19 +0900
## see <https://github.com/temptemp3/sh2>
##################################################

Sumber: test-export-xargs.sh

Garis komando

bash test-export-xargs.sh

Keluaran

A1 A2 A3 A4 A5 A6 A7 A8 A9
A1 A2 A3 A4 A5 A6 A7 A8 A9

Export all functions

Anda mungkin ingin mengekspor semua fungsi alih-alih mengekspor semua secara eksplisit. Kenapa tidak?

#!/bin/bash
## test-export-all-functions
## version 0.0.1 - initial
##################################################
a() { true ; }
b() { true ; }
c() { true ; }
test-export-all-functions() {
_() {
{
declare -Fx
declare -F
} | sort
| uniq -c
| grep -v -e '^s*2s' -e '_'
| sed 's/.*-fs//'
}
local function
for function in $( _ )
do
export -f "${function}"
done
declare -Fx
}
##################################################
if [ ${#} -eq 0 ]
then
true
else
exit 1 # wrong args
fi
##################################################
test-export-all-functions
##################################################
## generated by create-stub2.sh v0.1.2
## on Sun, 07 Jul 2019 16:18:26 +0900
## see <https://github.com/temptemp3/sh2>
##################################################

Sumber: test-export-all-functions.sh

Garis komando

bash test-export-all-functions.sh

Keluaran

declare -fx a
declare -fx b
declare -fx c
declare -fx test-export-all-functions

Inspect export functions

Anda mungkin ingin memeriksa fungsi ekspor sebelum menjalankan muatan skrip Anda. Lagi pula, Anda tidak ingin perintah apa pun menyelinap ke perintah eksternal.

#!/bin/bash
## test-export-inspect
## version 0.0.1 - initial
##################################################
test-export-inspect() {
test ! "$( export -f | grep eval )" || {
echo chaos detect 1>&2
echo exiting script... 1>&2
exit 2 # chaos
}
echo life is good
}
##################################################
if [ ${#} -eq 0 ]
then
true
else
exit 1 # wrong args
fi
##################################################
test-export-inspect
##################################################
## generated by create-stub2.sh v0.1.2
## on Sun, 07 Jul 2019 16:40:13 +0900
## see <https://github.com/temptemp3/sh2>
##################################################

Sumber: test-export-inspect.sh

perintah

bash test-export-inspect.sh
chaos() { eval ${@} ; }
export -f choas
bash test-export-inspect.sh

Keluaran

life is good
chaos detect
exiting script...

Export all variables

Anda mungkin ingin melanjutkan dan mengekspor semua variabel dikurangi semua hal yang tidak Anda perlukan. Berikut cara melakukannya menggunakan ekspor di bash.

#!/bin/bash
## test-export-all-variables
## version 0.0.1 - initial
##################################################
A=
B=
C=
test-export-all-variables() {
local a
local b
local c
local variable
local temp
temp=$( mktemp )
_() {  # get list variables to export
declare -p | grep -v -e '-x' -e '[A-Z_]+=?' -e '^"$' -e 'variable' | cut '-d ' '-f3'
}
local variable
for variable in $( _ | tee ${temp} )
do
export ${variable}
done
declare -xp $( cat ${temp} )
}
##################################################
if [ ${#} -eq 0 ]
then
true
else
exit 1 # wrong args
fi
##################################################
test-export-all-variables
##################################################
## generated by create-stub2.sh v0.1.2
## on Sun, 07 Jul 2019 17:01:38 +0900
## see <https://github.com/temptemp3/sh2>
##################################################

Sumber: test-export-all-variables.sh

perintah

bash test-export-all-variables.sh

Keluaran

declare -x a
declare -x b
declare -x c

Kesimpulan

Ekspor adalah perintah bawaan yang memungkinkan manipulasi atribut ekspor untuk variabel dan fungsi. Ini juga dapat digunakan untuk menampilkan nama yang dikaitkan dengan ekspor. Semua perintah ekspor dapat diimplementasikan menggunakan perintah mendeklarasikan.

Related Posts