ನೀವು ಹುಡುಕಾಟದಲ್ಲಿ ಈ ಪುಟವನ್ನು ಕಂಡುಕೊಂಡರೆ, ನೀವು ಬಹುಶಃ ರನ್ನಿಂಗ್ ಬ್ಯಾಷ್ನೊಂದಿಗೆ ಕೆಲವು ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವಿರಿ.
ಬಹುಶಃ ನಿಮ್ಮ ಬ್ಯಾಷ್ ಪರಿಸರವು ಪರಿಸರ ವೇರಿಯಬಲ್ ಅನ್ನು ಹೊಂದಿಸುತ್ತಿಲ್ಲ ಮತ್ತು ಏಕೆ ಎಂದು ನಿಮಗೆ ಅರ್ಥವಾಗುತ್ತಿಲ್ಲ. ನೀವು ವಿವಿಧ ಬ್ಯಾಷ್ ಬೂಟ್ ಫೈಲ್ಗಳು ಅಥವಾ ಪ್ರೊಫೈಲ್ಗಳು ಅಥವಾ ಅದು ಕೆಲಸ ಮಾಡುವವರೆಗೆ ಯಾದೃಚ್ಛಿಕವಾಗಿ ಎಲ್ಲಾ ಫೈಲ್ಗಳಲ್ಲಿ ಏನನ್ನಾದರೂ ಅಂಟಿಕೊಂಡಿರಬಹುದು.
ಯಾವುದೇ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು ಸಮಸ್ಯೆಗಳನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಾದಷ್ಟು ಸರಳವಾಗಿ ಬ್ಯಾಷ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವ ವಿಧಾನವನ್ನು ರೂಪಿಸುವುದು ಈ ಟಿಪ್ಪಣಿಯ ಅಂಶವಾಗಿದೆ.
ರೇಖಾಚಿತ್ರ
ಈ ಫ್ಲೋಚಾರ್ಟ್ ಬ್ಯಾಷ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುವಾಗ ಎಲ್ಲಾ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಸಾರಾಂಶಗೊಳಿಸುತ್ತದೆ.
ಈಗ ಪ್ರತಿಯೊಂದು ಭಾಗವನ್ನು ಹತ್ತಿರದಿಂದ ನೋಡೋಣ.
ಲಾಗಿನ್ ಶೆಲ್?
ಮೊದಲು ನೀವು ಲಾಗಿನ್ ಶೆಲ್ನಲ್ಲಿದ್ದೀರಾ ಅಥವಾ ಇಲ್ಲವೇ ಎಂಬುದನ್ನು ನೀವು ಆರಿಸಬೇಕಾಗುತ್ತದೆ.
ಲಾಗಿನ್ ಶೆಲ್ ನೀವು ಸಂವಾದಾತ್ಮಕ ಸೆಷನ್ಗಾಗಿ ಲಾಗ್ ಇನ್ ಮಾಡಿದಾಗ ನೀವು ನಮೂದಿಸುವ ಮೊದಲ ಶೆಲ್ ಆಗಿದೆ. ಲಾಗಿನ್ ಶೆಲ್ಗೆ ಬಳಕೆದಾರಹೆಸರು ಮತ್ತು ಪಾಸ್ವರ್ಡ್ ಅಗತ್ಯವಿಲ್ಲ. ಫ್ಲ್ಯಾಗ್ ಸೇರಿಸುವ ಮೂಲಕ ಲಾಗಿನ್ ಶೆಲ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ನೀವು ಒತ್ತಾಯಿಸಬಹುದು --login
ಕರೆದಾಗ bash
, ಉದಾಹರಣೆಗೆ:
bash --ಲಾಗಿನ್
ನೀವು ಮೊದಲು ಬ್ಯಾಷ್ ಶೆಲ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿದಾಗ ಲಾಗಿನ್ ಶೆಲ್ ಮೂಲ ಪರಿಸರವನ್ನು ಹೊಂದಿಸುತ್ತದೆ.
ಇಂಟರ್ಯಾಕ್ಟಿವ್?
ನಂತರ ಶೆಲ್ ಸಂವಾದಾತ್ಮಕವಾಗಿದೆಯೇ ಅಥವಾ ಇಲ್ಲವೇ ಎಂಬುದನ್ನು ನೀವು ನಿರ್ಧರಿಸುತ್ತೀರಿ.
ವೇರಿಯಬಲ್ ಇರುವಿಕೆಯಿಂದ ಇದನ್ನು ಪರಿಶೀಲಿಸಬಹುದು PS1
(ಇದು ಕಮಾಂಡ್ ಇನ್ಪುಟ್ ಕಾರ್ಯವನ್ನು ಸ್ಥಾಪಿಸುತ್ತದೆ):
ಒಂದು ವೇಳೆ [ "${PS1-}" ]; ನಂತರ ಪ್ರತಿಧ್ವನಿ ಸಂವಾದಾತ್ಮಕ ಬೇರೆ ಪ್ರತಿಧ್ವನಿ ಸಂವಾದಾತ್ಮಕವಲ್ಲದ fi
ಅಥವಾ ಆಯ್ಕೆಯನ್ನು ಹೊಂದಿಸಲಾಗಿದೆಯೇ ಎಂದು ನೋಡಿ -i
, ವಿಶೇಷ ಹೈಫನ್ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬಳಸುವುದು -
ಬ್ಯಾಷ್ನಲ್ಲಿ, ಉದಾಹರಣೆಗೆ:
$echo$-
ಔಟ್ಪುಟ್ನಲ್ಲಿ ಚಿಹ್ನೆ ಇದ್ದರೆ i
, ನಂತರ ಶೆಲ್ ಸಂವಾದಾತ್ಮಕವಾಗಿರುತ್ತದೆ.
ಲಾಗಿನ್ ಶೆಲ್ನಲ್ಲಿ?
ನೀವು ಲಾಗಿನ್ ಶೆಲ್ನಲ್ಲಿದ್ದರೆ, ಬ್ಯಾಷ್ ಫೈಲ್ಗಾಗಿ ಹುಡುಕುತ್ತದೆ /etc/profile
ಮತ್ತು ಅದು ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೆ ರನ್ ಆಗುತ್ತದೆ.
ನಂತರ ಈ ಕೆಳಗಿನ ಕ್ರಮದಲ್ಲಿ ಈ ಮೂರು ಫೈಲ್ಗಳಲ್ಲಿ ಯಾವುದನ್ನಾದರೂ ಹುಡುಕುತ್ತದೆ:
~/.bash_profile ~/.bash_login ~/.profile
ಅದು ಒಂದನ್ನು ಕಂಡುಕೊಂಡಾಗ, ಅದು ಅದನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ ಮತ್ತು ಇತರರನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತದೆ.
ಸಂವಾದಾತ್ಮಕ ಶೆಲ್ನಲ್ಲಿ?
ನೀವು ಲಾಗಿನ್ ಅಲ್ಲದ ಶೆಲ್ನಲ್ಲಿದ್ದರೆ, ನೀವು ಈಗಾಗಲೇ ಲಾಗಿನ್ ಶೆಲ್ನಲ್ಲಿದ್ದೀರಿ ಎಂದು ಊಹಿಸಲಾಗಿದೆ, ಪರಿಸರವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಆನುವಂಶಿಕವಾಗಿ ಪಡೆಯಲಾಗುತ್ತದೆ.
ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಈ ಕೆಳಗಿನ ಎರಡು ಫೈಲ್ಗಳು ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೆ ಅವುಗಳನ್ನು ಕ್ರಮವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ:
/etc/bash.bashrc ~/.bashrc
ಆಯ್ಕೆ ಇಲ್ಲವೇ?
ನೀವು ಲಾಗಿನ್ ಶೆಲ್ ಅಥವಾ ಸಂವಾದಾತ್ಮಕ ಶೆಲ್ನಲ್ಲಿ ಇಲ್ಲದಿದ್ದರೆ, ನಿಮ್ಮ ಪರಿಸರವು ಖಾಲಿಯಾಗಿರುತ್ತದೆ. ಇದು ಬಹಳಷ್ಟು ಗೊಂದಲವನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ (ಕ್ರಾನ್ ಉದ್ಯೋಗಗಳ ಬಗ್ಗೆ ಕೆಳಗೆ ನೋಡಿ).
ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಬ್ಯಾಷ್ ವೇರಿಯಬಲ್ ಅನ್ನು ನೋಡುತ್ತದೆ BASH_ENV
ನಿಮ್ಮ ಪರಿಸರ ಮತ್ತು ಅಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಅನುಗುಣವಾದ ಫೈಲ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ.
ಸಾಮಾನ್ಯ ತೊಂದರೆಗಳು ಮತ್ತು ಹೆಬ್ಬೆರಳಿನ ನಿಯಮಗಳು
ಕ್ರಾನ್ ಉದ್ಯೋಗಗಳು
95% ರಷ್ಟು ಸಮಯ ನಾನು ಡೀಬಗ್ ಬ್ಯಾಷ್ ಸ್ಟಾರ್ಟ್ಅಪ್ ಮಾಡುತ್ತೇನೆ ಏಕೆಂದರೆ ಕ್ರಾನ್ ಕೆಲಸವು ನಿರೀಕ್ಷೆಯಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ.
ಈ ಡ್ಯಾಮ್ ಟಾಸ್ಕ್ ನಾನು ಅದನ್ನು ಕಮಾಂಡ್ ಲೈನ್ನಲ್ಲಿ ಚಲಾಯಿಸಿದಾಗ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಆದರೆ ನಾನು ಅದನ್ನು ಕ್ರಾಂಟಾಬ್ನಲ್ಲಿ ಚಲಾಯಿಸಿದಾಗ ವಿಫಲಗೊಳ್ಳುತ್ತದೆ.
ಇದು ಎರಡು ಕಾರಣಗಳು:
- ಕ್ರಾನ್ ಉದ್ಯೋಗಗಳು ಸಂವಾದಾತ್ಮಕವಾಗಿಲ್ಲ.
- ಕಮಾಂಡ್ ಲೈನ್ ಸ್ಕ್ರಿಪ್ಟ್ಗಳಂತೆ, ಕ್ರಾನ್ ಉದ್ಯೋಗಗಳು ಶೆಲ್ ಪರಿಸರವನ್ನು ಆನುವಂಶಿಕವಾಗಿ ಪಡೆಯುವುದಿಲ್ಲ.
ಪರಿಸರವು ಸಂವಾದಾತ್ಮಕ ಶೆಲ್ನಿಂದ ಆನುವಂಶಿಕವಾಗಿ ಪಡೆಯುವುದರಿಂದ ಶೆಲ್ ಸ್ಕ್ರಿಪ್ಟ್ ಸಂವಾದಾತ್ಮಕವಾಗಿಲ್ಲ ಎಂಬುದನ್ನು ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಗಮನಿಸುವುದಿಲ್ಲ ಅಥವಾ ಕಾಳಜಿ ವಹಿಸುವುದಿಲ್ಲ. ಇದರರ್ಥ ಎಲ್ಲವೂ PATH
и alias
ನೀವು ನಿರೀಕ್ಷಿಸಿದಂತೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ.
ಅದಕ್ಕಾಗಿಯೇ ನಿರ್ದಿಷ್ಟವಾಗಿ ಹೊಂದಿಸಲು ಇದು ಅಗತ್ಯವಾಗಿರುತ್ತದೆ PATH
ಇಲ್ಲಿರುವಂತಹ ಕ್ರಾನ್ ಕಾರ್ಯಕ್ಕಾಗಿ:
* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram
ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಪರಸ್ಪರ ಕರೆಯುತ್ತಿವೆ
ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಪರಸ್ಪರ ಕರೆ ಮಾಡಲು ತಪ್ಪಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಿದಾಗ ಮತ್ತೊಂದು ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಯಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, /etc/profile
ಸೂಚಿಸುತ್ತದೆ ~/.bashrc
.
ಯಾರಾದರೂ ಕೆಲವು ದೋಷವನ್ನು ಸರಿಪಡಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ಮತ್ತು ಎಲ್ಲವೂ ಕೆಲಸ ಮಾಡುವಂತೆ ತೋರಿದಾಗ ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸಂಭವಿಸುತ್ತದೆ. ದುರದೃಷ್ಟವಶಾತ್, ನೀವು ಈ ವಿಭಿನ್ನ ರೀತಿಯ ಸೆಷನ್ಗಳನ್ನು ಬೇರ್ಪಡಿಸಬೇಕಾದಾಗ, ಹೊಸ ಸಮಸ್ಯೆಗಳು ಉದ್ಭವಿಸುತ್ತವೆ.
ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ ಮಾಡಿದ ಡಾಕರ್ ಚಿತ್ರ
ಶೆಲ್ ಅನ್ನು ಚಲಾಯಿಸುವುದನ್ನು ಪ್ರಯೋಗಿಸಲು, ನಾನು ಡಾಕರ್ ಚಿತ್ರವನ್ನು ರಚಿಸಿದ್ದೇನೆ ಅದನ್ನು ಸುರಕ್ಷಿತ ಪರಿಸರದಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಶೆಲ್ ಅನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಬಳಸಬಹುದಾಗಿದೆ.
ಲಾಂಚ್:
$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash
ಡಾಕರ್ಫೈಲ್ ಇದೆ
ಲಾಗಿನ್ ಅನ್ನು ಒತ್ತಾಯಿಸಲು ಮತ್ತು ಲಾಗಿನ್ ಶೆಲ್ ಅನ್ನು ಅನುಕರಿಸಲು:
$ bash --login
ಅಸ್ಥಿರಗಳ ಗುಂಪನ್ನು ಪರೀಕ್ಷಿಸಲು BASH_ENV
:
$ env | grep BASH_ENV
ಡೀಬಗ್ ಮಾಡುವುದಕ್ಕಾಗಿ crontab
ಪ್ರತಿ ನಿಮಿಷಕ್ಕೆ ಸರಳವಾದ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ (ಇನ್ /root/ascript
):
$ crontab -l
$ cat /var/log/script.log
ಮೂಲ: www.habr.com