ক্ষেত্রে csh
এবং tcsh
, এটা মান রেকর্ড $HOME
সময় শেল শুরু হয়েছিল (এ পরিবর্তনশীল তার মধ্যে $home
পরিবর্তনশীল যেমন @JdeBP দ্বারা লক্ষনীয় )।
আপনি যদি এটি শুরু করার আগে এটি সেট না করে রাখেন তবে আপনি csh
এমন কিছু দেখতে পাবেন:
$ (unset HOME; csh -c cd)
cd: No home directory.
জন্য bash
(এবং অন্যান্য অধিকাংশ বোর্ন মত শাঁস), আমি তোমার চেয়ে ভিন্ন আচরণ দেখুন।
bash-4.4$ unset HOME; cd
bash: cd: HOME not set
$HOME
ভেরিয়েবলের সামগ্রীটি আপনার ব্যবহারকারীর নামের বিপরীতে ব্যবহারকারীর ডাটাবেসে সঞ্চিত তথ্যের ভিত্তিতে লগইন প্রক্রিয়া দ্বারা শুরু করা হয় ।
ব্যবহারকারীর নাম সম্পর্কে তথ্য সবসময় পাওয়া যায় না। সমস্ত শেল নিশ্চিতভাবে জানতে পারে যে এটি কার্যকর করছে এমন প্রক্রিয়াটির ইউজারিড এবং বিভিন্ন ব্যবহারকারী (বিভিন্ন হোম ডিরেক্টরি সহ) একই ইউজারিডটি ভাগ করতে পারেন।
সুতরাং, একবার $HOME
চলে গেলে এটি ফিরে পাওয়ার কোনও নির্ভরযোগ্য উপায় নেই।
প্রথম ব্যবহারকারীর ডাটাবেসটি ( getpwxxx()
স্ট্যান্ডার্ড এপিআই সহ) প্রথম ব্যবহারকারীর হোম ডিরেক্টরিতে শেল চালানো একই ইউড থাকা কেবলমাত্র একটি আনুমানিকই হবে (ব্যবহারকারীর ডাটাবেসটি পরিবর্তিত হতে পারে (বা হোম ডিরেক্টরিটি এক সময়ের মান হিসাবে সংজ্ঞায়িত হচ্ছে) লগইন সেশন শুরু হওয়ার পরে)।
zsh
আমি জানি যে একমাত্র শেলটি এটি করে:
$ env -u HOME ltrace -e getpw\* zsh -c 'cd && pwd'
zsh->getpwuid(1000, 0x496feb, 114, 0x7f9599004697) = 0x7f95992fddc0
/home/chazelas
+++ exited (status 0) +++
অন্য যে সমস্ত শেলগুলি আমি চেষ্টা করেছি তা সেই অস্থির হোম সম্পর্কে অভিযোগ করুন বা /
একটি ডিফল্ট হোম মান হিসাবে ব্যবহার করুন ।
তবুও একটি ভিন্ন আচরণ হ'ল এটি fish
মনে হয় যে ব্যবহারকারীর নামের জন্য ডাটাবেসটিকে কোয়েরিতে রাখা আছে যা $USER
যদি জমা থাকে বা না করে getpwuid()
থাকে তবে:
$ env -u HOME USER=bin ltrace -e getpw\* fish -c 'cd;pwd'
fish->getpwnam("bin") = 0x7fd2beba3d80
fish: Unable to create a configuration directory for fish. Your personal settings will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory
where the current user has write access.
fish: Unable to create a configuration directory for fish. Your personal settings will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory
where the current user has write access.
--- SIGCHLD (Child exited) ---
/bin
+++ exited (status 0) +++
$ env -u HOME -u USER ltrace -e getpw\* fish -c 'cd;pwd'
fish->getpwuid(1000, 0x7f529eb4fb28, 0x12d8790, 0x7f529e858697) = 0x7f529eb51dc0
fish->getpwnam("chazelas") = 0x7f529eb51d80
--- SIGCHLD (Child exited) ---
--- SIGCHLD (Child exited) ---
/home/chazelas
+++ exited (status 0) +++
SEGV যখন ব্যবহারকারীর অস্তিত্ব থাকে না ( https://github.com/fish-shell/fish-shell/issues/3599 ):
$ env -u HOME USER=foo fish -c ''
zsh: segmentation fault env -u HOME USER=foo fish -c ''