ຮຽນຮູ້ຄວາມແຕກຕ່າງລະຫວ່າງການຫາແລະການຊອກຫາໃນ 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 (ຢ່າເຮັດຊ້ ຳ ຕົວທ່ານເອງ).
ນັ້ນແມ່ນ ສຳ ລັບບົດຂຽນນີ້. ພວກເຮົາໄດ້ປຶກສາຫາລືກັນສັ້ນໆກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງການຫາແລະການປອມໃນການແຕກ. ໄປຜ່ານບົດຄວາມແລະແບ່ງປັນ ຄຳ ຕິຊົມທີ່ມີຄຸນຄ່າຂອງທ່ານກັບພວກເຮົາ.