ຮຽນຮູ້ຄວາມແຕກຕ່າງລະຫວ່າງການຫາແລະການຊອກຫາໃນ Bash


ຈຸດສຸມຕົ້ນຕໍຂອງບົດຄວາມນີ້ແມ່ນເພື່ອເຂົ້າໃຈຢ່າງຈະແຈ້ງວ່າມີຫຍັງເກີດຂື້ນເມື່ອທ່ານໃຊ້ script vs source script ໃນ bash. ຫນ້າທໍາອິດ, ພວກເຮົາຈະເຂົ້າໃຈຢ່າງຈະແຈ້ງວ່າໂປແກຼມຖືກສົ່ງແນວໃດເມື່ອທ່ານໂທຫາສະຄິບໃນແບບທີ່ແຕກຕ່າງກັນ.

ຫມາຍເຫດ: ການສ້າງສະຄິບດ້ວຍສ່ວນຂະຫຍາຍບໍ່ແມ່ນເລື່ອງ ສຳ ຄັນ. ສະຄິບຈະເຮັດວຽກໄດ້ດີເຖິງວ່າຈະບໍ່ມີການຂະຫຍາຍເວລາ.

ໂດຍພື້ນຖານແລ້ວ, ທຸກໆຕົວອັກສອນເລີ່ມຕົ້ນດ້ວຍເສັ້ນທີ່ເອີ້ນວ່າ shebang (#!). ສັນຍາລັກ Hash ໃນ bash ຈະຖືກຕີຄວາມວ່າເປັນ ຄຳ ເຫັນແຕ່ວ່າ shebang ມີຄວາມ ໝາຍ ພິເສດ. ມັນບອກ bash ໃຫ້ຂຽນໂປແກຼມໃນນາຍແປພາສາໃດກໍ່ຕາມທີ່ທ່ານໄດ້ກ່າວໃນ shebang.

ຂ້າງລຸ່ມນີ້ແມ່ນໂຄງການຕົວຢ່າງແລະຂ້ອຍ ກຳ ລັງລະບຸວ່າແມ່ນນາຍແປພາສາຂອງຂ້ອຍ.

$ cat >> Hello_World.sh
#!/usr/bin/env bash
echo "Hello world"

$ chmod +x Hello_world.sh

ຕອນນີ້ເພື່ອ ດຳ ເນີນການສະຄິບ, ທ່ານສາມາດເຮັດມັນໄດ້ສອງທາງ.

  • ໃຊ້ເສັ້ນທາງທີ່ກ່ຽວຂ້ອງເພື່ອເອີ້ນສະຄິບ. ຍ້າຍໄປທີ່ໄດເລກະທໍລີທີ່ສະຄິບແລະແລ່ນ ./Hello_world.sh.
  • ໃຊ້ເສັ້ນທາງຢ່າງແທ້ຈິງເພື່ອເອີ້ນສະຄິບ. ຈາກທຸກບ່ອນທີ່ຢູ່ໃນລະບົບແຟ້ມເອກະສານປະເພດເສັ້ນທາງເຕັມໄປຫາສະຄິບ.

$ ./Hello_world.sh
$ pwd
$ /home/karthick/Hello_world

ບັດນີ້ໃຫ້ທ່ານເບິ່ງວ່າມີຫຍັງເກີດຂື້ນໃນເວລາທີ່ທ່ານພະຍາຍາມສົ່ງໂປແກຼມຂອງທ່ານໂດຍບໍ່ຕ້ອງມີ shebang. ໃນກໍລະນີທີ່ບໍ່ມີ shebang, ໂປແກຼມຈະຖືກສົ່ງເຂົ້າໄປໃນຫອຍທີ່ທ່ານ ກຳ ລັງແລ່ນຢູ່, ໃນກໍລະນີຂອງຂ້ອຍ, ມັນແມ່ນ Bash (/ bin/bash).

ຂ້າພະເຈົ້າຂໍຍົກຕົວຢ່າງ. ຂ້ອຍ ກຳ ລັງສ້າງຕົວອັກສອນ python ໂດຍບໍ່ມີ shebang ແລະເມື່ອຂ້ອຍໂທຫາໂປແກມ, bash ບໍ່ຮູ້ວ່າມັນຄວນຈະສົ່ງໂປແກຼມນີ້ໄປຫານາຍພາສາ Python ແທນທີ່ມັນຈະໃຊ້ໂປແກມໃນແກະປະຈຸບັນ.

$ cat > run-py.py
echo $SHELL
print("Hello world")

$ chmod +x run-py.py
$ ./run-py.py

ໃນກໍລະນີນີ້, ທ່ານສາມາດໂທຫາໂຄງການໂດຍກ່າວເຖິງຜູ້ແປພາສາໃດທີ່ມັນຄວນຈະຖືກສົ່ງໄປຫາຫຼືພຽງແຕ່ເພີ່ມເສັ້ນ shebang ທີ່ແນະ ນຳ ສະ ເໝີ.

# which python3
$(which python3) /home/karthick/run_py.py

ໃນປັດຈຸບັນທີ່ທ່ານຮູ້ຈັກວິທີການໂທສະຄິບ, ຂັ້ນຕອນຕໍ່ໄປກໍ່ຄືການເຂົ້າໃຈສິ່ງທີ່ເກີດຂື້ນເມື່ອພວກເຮົາເອີ້ນສະຄິບ. ເມື່ອທ່ານຮຽກຮ້ອງອັກສອນດັ່ງທີ່ສະແດງຢູ່ໃນຕົວຢ່າງຂ້າງເທິງມັນຈະສ້າງຂະບວນການຂອງເດັກນ້ອຍ (ການປອມ) ແລະສະຄິບຈະຖືກສົ່ງເຂົ້າໃນຂະບວນການຂອງເດັກ. ຂ້າພະເຈົ້າໄດ້ແລ່ນສະຄິບທີ່ເປັນຕົວຢ່າງເຊິ່ງຈະພຽງແຕ່ ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້ແລະສະແດງໃຫ້ເຫັນວ່າຕົວອັກສອນຖືກສົ່ງເຂົ້າໃນຂະບວນການເດັກ.

$ ps -ef --forest | grep -i bash

ມັນສາມາດມີຫຼາຍຂະບວນການຂອງເດັກເປັນສ່ວນ ໜຶ່ງ ຂອງບົດຂຽນແລະນັ້ນກໍ່ຂື້ນກັບລະຫັດຂອງພວກເຮົາ. ມັນຄວນຈະໄດ້ຮັບຍົກໃຫ້ເຫັນວ່າຕົວແປສິ່ງແວດລ້ອມທີ່ສ້າງຂື້ນໂດຍຈົດ ໝາຍ ຍ່ອຍຈະຖືກລຸດລົງເມື່ອມັນ ສຳ ເລັດ. ຂະບວນການເດັກສາມາດເຂົ້າເຖິງຕົວແປທີ່ສ້າງຂື້ນໂດຍຂັ້ນຕອນຂອງພໍ່ແມ່ໂດຍການສົ່ງອອກພວກມັນ. ແຕ່ຂັ້ນຕອນຂອງພໍ່ແມ່ບໍ່ສາມາດເຂົ້າເຖິງຕົວແປທີ່ສ້າງຂື້ນໂດຍຂັ້ນຕອນຂອງເດັກ.

ເບິ່ງທີ່ບົດຂຽນຂ້າງລຸ່ມນີ້ເພື່ອເຂົ້າໃຈເພີ່ມເຕີມກ່ຽວກັບຕົວແປທີ່ເຮັດວຽກແລະວິທີການສົ່ງອອກຕົວແປຕ່າງໆ.

  • ຄວາມເຂົ້າໃຈແລະການຂຽນ 'ຕົວແປ Linux' ໃນ Shell Scripting
  • ຮຽນຮູ້ຄວາມແຕກຕ່າງລະຫວ່າງ 3637494 ແລະ 3637494 ໃນ Bash

ການຊອກຫາ ໜັງ ສື

"ແຫຼ່ງຂໍ້ມູນ" ແມ່ນ ຄຳ ສັ່ງທີ່ມີຢູ່ໃນຫອຍເຊິ່ງອ່ານເອກະສານທີ່ຜ່ານໄປເພື່ອເປັນການໂຕ້ຖຽງກັບມັນແລະໃຊ້ລະຫັດໃນສະພາບແວດລ້ອມແກະໃນປະຈຸບັນ. ກໍລະນີການ ນຳ ໃຊ້ທີ່ ເໝາະ ສົມທີ່ທ່ານໃຊ້ສ່ວນໃຫຍ່ແມ່ນການດັດແປງການຕັ້ງຄ່າຂອງທ່ານໃນ .bashrc ຫຼື .bash_profile ແລະການໂຫຼດ ໃໝ່ ການປ່ຽນແປງໂດຍໃຊ້ ຄຳ ສັ່ງແຫຼ່ງ.

$ type -a source

ມີສອງວິທີການສັງເຄາະທີ່ຈະ ດຳ ເນີນການ ຄຳ ສັ່ງ source. ທ່ານສາມາດເລືອກເອົາຜູ້ໃດຜູ້ ໜຶ່ງ ຈາກສອງ syntaxes ແລະມັນແມ່ນຂອງຕົວເລືອກສ່ວນຕົວ.

$ source FILE_NAME [ARGUMENTS]
$ . FILE_NAME [ARGUMENTS]

ຂ້າພະເຈົ້າຂໍສະແດງໃຫ້ເຫັນວ່າແຫຼ່ງຂໍ້ມູນດັ່ງກ່າວເຮັດວຽກໄດ້ແນວໃດ. ຂ້ອຍຈະສ້າງສະຄິບແກະສອງໃບ. ສະຄິບ ທຳ ອິດ (Module.sh) ກຳ ລັງຈະມີຕົວແປແລະຫນ້າທີ່ບາງຢ່າງ. ຄິບທີສອງ (Main.sh) ແມ່ນຈະພິມຕົວແປແລະເອີ້ນຟັງຊັນ.

ແຟ້ມເອກະສານ Module.sh.

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo “Function f1 is called”
}

ເອກະສານ Main.sh.

#!/usr/bin/env bash

echo $VAR1
f1

ກໍານົດການອະນຸຍາດການປະຕິບັດສໍາລັບສະຄິບແລະໂທຫາສະຄິບຕົ້ນຕໍ "main.sh". ດຽວນີ້, ສະຄິບນີ້ຈະພະຍາຍາມຊອກຫາຟັງຊັນ f1 ແລະຕົວປ່ຽນແປງ VAR1 ໃນສະພາບແວດລ້ອມຂອງແກະປະຈຸບັນແລະຈະລົ້ມເຫລວດ້ວຍ ຄຳ ສັ່ງທີ່ບໍ່ພົບ.

$ bash main.sh

ຕອນນີ້ໃຫ້ໃຊ້ ຄຳ ສັ່ງທີ່ຢູ່ໃນສະຄິບເຊິ່ງຈະສາມາດໂຫລດຕົວແປແລະຫນ້າທີ່ເຂົ້າໄປໃນສະພາບແວດລ້ອມແກະໃນປະຈຸບັນແລະມັນຈະສາມາດເຂົ້າເຖິງໄດ້ໂດຍ "main.sh".

ແຟ້ມເອກະສານ Module.sh.

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo "Function f1 is called"
}

ເອກະສານ Main.sh.

#!/usr/bin/env bash

source module.sh Tecmint
echo $VAR1
f1

ບັດນີ້ຈົ່ງຂຽນຄິບອີກເທື່ອ ໜຶ່ງ ແລະເບິ່ງ.

$ bash main.sh

ແຫຼ່ງຂໍ້ມູນແມ່ນມີປະໂຫຍດຫຼາຍໃນການປະຕິບັດຕາມແບບແຜນການຂຽນໂປແກຼມແບບໂມເດັມໃນການສ້າງສະຄິບແກະຂອງພວກເຮົາ ພວກເຮົາສາມາດແຍກລະຫັດຂອງພວກເຮົາອອກເປັນໂມດູນຂະ ໜາດ ນ້ອຍແລະສາມາດ ນຳ ໃຊ້ໄດ້ໃນຫລາຍໂປແກມ. ດ້ວຍວິທີເຫຼົ່ານີ້, ພວກເຮົາສາມາດປະຕິບັດຕາມຫຼັກການ DRY (ຢ່າເຮັດຊ້ ຳ ຕົວທ່ານເອງ).

ນັ້ນແມ່ນ ສຳ ລັບບົດຂຽນນີ້. ພວກເຮົາໄດ້ປຶກສາຫາລືກັນສັ້ນໆກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງການຫາແລະການປອມໃນການແຕກ. ໄປຜ່ານບົດຄວາມແລະແບ່ງປັນ ຄຳ ຕິຊົມທີ່ມີຄຸນຄ່າຂອງທ່ານກັບພວກເຮົາ.