जवाबों:
स्रोत कोड GNU सवानाls पर ऑनलाइन ब्राउज़िंग के लिए उपलब्ध है । ज्यादातर मामलों में, आवश्यक अधिकतम चौड़ाई की गणना की जाती है (उदाहरण के लिए, पाठ के लिए फ़ंक्शन का उपयोग करना ), और फिर क्लासिक सी फ़ंक्शन प्रारूप विनिर्देशक और कुछ मैनुअल पैडिंग का उपयोग करता है । उदाहरण के लिए, फ़ंक्शंस और देखें ।mbswidthprintfformat_user_or_group()gobble_file()
टी एल; DR: कोई "जादू" नहीं है, बस बहुत सारे ग्रंट कंपटीशन हैं।
यदि आप अपने स्वयं के आउटपुट के लिए ऐसी साफ-सुथरी मेज चाहते हैं, तो उपयोग करें column:
$ grep -vE '^#' /etc/fstab
UUID=cdff3742-9d03-4bc1-93e3-ae50708474f2 / ext4 errors=remount-ro 0 1
/dev/mapper/lvmg-homelvm /home btrfs defaults,compress=lzo,space_cache,relatime 0 2
UUID="bb76cd0d-ae1d-4490-85da-1560c32679cd" none swap sw 0 0
UUID="a264b1b1-cf82-40aa-ab9e-a810cfba169a" /home/muru/arch btrfs defaults,compress=lzo,space_cache,relatime 0 2
$ grep -vE '^#' /etc/fstab | column -t
UUID=cdff3742-9d03-4bc1-93e3-ae50708474f2 / ext4 errors=remount-ro 0 1
/dev/mapper/lvmg-homelvm /home btrfs defaults,compress=lzo,space_cache,relatime 0 2
UUID="bb76cd0d-ae1d-4490-85da-1560c32679cd" none swap sw 0 0
UUID="a264b1b1-cf82-40aa-ab9e-a810cfba169a" /home/muru/arch btrfs defaults,compress=lzo,space_cache,relatime 0 2
findmntपहले भी इस्तेमाल किया था, लेकिन मुझे कभी नहीं लगा कि यह ऐसा भी कर सकता है।
/bin/lsपैकेज (जीएनयू) का हिस्सा है coreutils। आप इसे चलाकर पा सकते हैं dpkg-query -S /bin/ls। एक बार जब आप पैकेज का नाम जान लेते हैं, तो आप कोई भी उबंटू पैकेज सटीक स्रोत कोड डाउनलोड कर सकते हैं जिसमें से बाइनरी बनाया गया है (यह महत्वपूर्ण है) का उपयोग करकेapt-get source <package_name>
@Muru के जवाब के अलावा , यहाँ स्रोत कोड का हिस्सा है जो widthआउटपुट के सही औचित्य के लिए गणना करता है। :
static void
format_user_or_group (char const *name, unsigned long int id, int width)
{
size_t len;
if (name)
{
int width_gap = width - mbswidth (name, 0);
int pad = MAX (0, width_gap);
fputs (name, stdout);
len = strlen (name) + pad;
do
putchar (' ');
while (pad--);
}
else
{
printf ("%*lu ", width, id);
len = width;
}
dired_pos += len + 1;
}
यह का उपयोग करता है, printf ("%*lu ", width, id);। नोट: चर क्षेत्र की चौड़ाई '*'
इस मामले में, यह अनुमान नहीं लगाया जा सकता है कि ls -lनिष्पादित होने पर हमें कितनी बड़ी फ़ील्ड चौड़ाई की आवश्यकता होगी , अर्थात, निर्देशिकाओं के नाम लंबाई में भिन्न हो सकते हैं। इसका तात्पर्य यह है कि क्षेत्र की चौड़ाई को स्वयं एक चर होना चाहिए , जिसके लिए कार्यक्रम एक मान की गणना करेगा ।
C क्षेत्र चौड़ाई की स्थिति में तारांकन चिह्न का उपयोग करता है जो प्रिंटफ को इंगित करता है कि यह वह चर पाएगा जिसमें एक अतिरिक्त पैरामीटर के रूप में फ़ील्ड चौड़ाई का मान है।
उदाहरण के लिए, मान लें कि चौड़ाई का वर्तमान मान 5. कथन है:
printf ("%*d%*d\n", width, 10, width, 11);
प्रिंट होगा: (रिक्ति पर ध्यान दें)
10 11
widthयहाँ है scontext_width, द्वारा गणना gooble_file, अन्य समारोह मैं उल्लेख किया है।
findmnt --fstab। उपयोग - लिनेक्स पैकेज यहां तक कि एक पुस्तकालय "libsmartcols" (पहले से libtt) के साथ आता है जो इसे एक संरेखित तालिका को प्रिंट करने के लिए findmnt, lsblk, आदि में उपयोग करता है।