פורסם: 09/04/2021 - 08:35
נושא ההודעה: שימוש ב FD ב BASH
|
לפי ההסבר של HERE-STRING
https://www.gnu.org/software/bash/manual/bash.html#Here-Strings
ניתן לבחור את ה FD שאליו אני מעונין לנתב. מדוע הפקודה הבאה לא מציגה את את foo על המסך (stdout):
אני יודע שאפשר להשתמש ב cat, אבל מעונין להבין מדוע זה לא עובד כמצופה (ניסיתי גם לעשות redirect מ &0 ל &1, גם לא עבד).
|
|
חזרה לתוכן הדיון |
פורסם: 09/04/2021 - 11:03
נושא ההודעה:
|
אולי מרכאות ?
איציק
|
|
חזרה לתוכן הדיון |
פורסם: 09/04/2021 - 16:15
נושא ההודעה:
|
זהו קלט לפקודה. כלומר, לדוגמה:
קוד: |
$ wc <<< whatever
1 1 9
|
|
|
חזרה לתוכן הדיון |
פורסם: 09/04/2021 - 16:40
נושא ההודעה:
|
אני מבין שזה קלט לפקודה, וגם יכול להשתמש בו כך:
או פשוט יותר
ואני רואה גם מה HERE-STRINGS עושה עם FD &0 באמצעות
קוד: | ls /proc/self/fd/ -l <<<foo |
אבל אני לא מצליח לקבל שום דבר מהקובץ הזמני אלא אם אני כותב אותו במפורש בפקודה, וכמובן שאני רוצה להמנע גם מזה.
המטרה - לבדוק האם ניתן לבצע כתיבה למסך או לקובץ באמצעות שימוש ב PIPE/FD בלבד (ללא בינארים, תוכניות ופקודות, רק BUILT-IN של BASH).
|
|
חזרה לתוכן הדיון |
פורסם: 11/04/2021 - 02:03
נושא ההודעה:
|
קוד: | echo hello >> /proc/$$/fd/1 |
|
|
חזרה לתוכן הדיון |
פורסם: 11/04/2021 - 09:25
נושא ההודעה:
|
הערה קטנה: $$ הוא מספר התהליך של ה־SHELL הראשי ולא של התהליך הנוכחי:
קוד: |
$ echo hi >/proc/$$/fd/1 | wc
hi
0 0 0
$ echo hi >/proc/self/fd/1 | wc
1 1 3
|
|
|
חזרה לתוכן הדיון |
פורסם: 11/04/2021 - 10:42
נושא ההודעה:
|
11111 : | קוד: | echo hello >> /proc/$$/fd/1 |
|
א. עדיף להשתמש ב /proc/self במקום
ב. ביקשתי ללא שימוש ב echo/cat/etc
ג. תודה
בינתיים הצלחתי עם שימוש ב cp, אבל זה לא מרשים אותי. המטרה היא ללא פקודות, רק שימוש ב PIPE/FD. בהצלחה
|
|
חזרה לתוכן הדיון |
פורסם: 11/04/2021 - 11:48
נושא ההודעה:
|
מה הבעיה שלך עם echo? ב־bash זוהי פקודה מובנית ולא הרצה של תהליך חיצוני. להבדיל, pipe מחייב יצירת תתי תהליכים.
בכל מקרה, לא ראיתי עדיין הסבר של מה שברצונך לעשות.
|
|
חזרה לתוכן הדיון |
פורסם: 11/04/2021 - 12:13
נושא ההודעה:
|
צפריר : | מה הבעיה שלך עם echo? ב־bash זוהי פקודה מובנית ולא הרצה של תהליך חיצוני. להבדיל, pipe מחייב יצירת תתי תהליכים.
בכל מקרה, לא ראיתי עדיין הסבר של מה שברצונך לעשות. |
לא בעיה - אתגר. אני מעונין לבדוק מצבי קצה של BASH בשימוש של FD/PIPE וזו המטרה שהצבתי במחקר. בינתיים אני לומד המון על התהליכים שמתבצעים מאחורי הקלעים של BASH, וזה לכשעצמו מספק, אך האתגר עומד בעינו, גם אם הכשלון מובטח
והערה: למרות ש echo הוא מובנה ב BASH, עדין קיים הבינארי. אבל זה לא קשור לאתגר.
קוד: |
$ ls -l `which echo`
-rwxr-xr-x 1 root root 39256 Sep 5 2019 /bin/echo
$ echo --version
--version
$ /bin/echo --version
echo (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Brian Fox and Chet Ramey.
$
|
|
|
חזרה לתוכן הדיון |
פורסם: 11/04/2021 - 22:33
נושא ההודעה:
|
הנה דוגמה לאתגר דומה (שמח שאני לא המוזר היחיד): https://oops.cmdchallenge.com/
|
|
חזרה לתוכן הדיון |
פורסם: 12/04/2021 - 08:54
נושא ההודעה:
|
קוד: |
while read i ; do echo $i; done <~/.gitconfig
|
|
|
חזרה לתוכן הדיון |
פורסם: 12/04/2021 - 09:01
נושא ההודעה:
|
תיקון קטן: אולי זה במקרה עובד ל־.gitconfig שלך, אבל במקרה הכללי:
קוד: |
$ (a="1 2"; echo $a; echo "$a")
1 2
1 2
|
|
|
חזרה לתוכן הדיון |
פורסם: 14/04/2021 - 13:51
נושא ההודעה:
|
מצאתי דרך, יפהפיה מרוב שהיא עקומה. שום פקודה או ASCII שומשו/נפגעו במהלך. מקווה לפרסם הכל בקרוב בבלוג פוסט.
תודה צפריר על ההערות ולכולם על העזרה.
|
|
חזרה לתוכן הדיון |
|