میدونی؟ – وبلاگ مانگا میچ

میدونی؟ - وبلاگ مانگا میچ


اوه ، فکر کردم می توانم پوسته شوم – معلوم است: درست است
است.
چه اتفاقی افتاد؟

کار

"برای استقرار داشبورد گرافانا به صورت خودکار از طریق OpenShift ، شما باید
پرونده های داشبورد JSON را در یک ConfigMap قرار دهید. "
یا برای فانی معمولی: پرونده پوسته .json پرونده دارم
در پرونده .yaml با چهار خط قبل از هر خط درج شده است
فضاهای بسته بندی شده به طوری که تورفتگی درست باشد. چیزی شبیه به این:

  1. {
  2. echo "Line 1"
  3. echo "Line 2"
  4. ech "Line 19659005] } | در حالی که بخوانید -r LINE؛ انجام دهید
  5. echo " $ LINE "
  6. انجام
  1. خط 1
  2. خط 2
  3. خط 3

تا کنون ، خیلی خوب.

مشکل

در نهایت ، آنطور که انتظار می رفت کار نکرد.
اشتباه پس از یادداشت "آخرین براکت در سیستم وجود ندارد
JSON "از یک همکار و جواب من" که به طور ناگهانی نمی تواند
ناپدید شد ، "من آن را جستجو کردم و اینک و ببین: آخرین مورد
براکت در JSON مفقود شد.

اما چرا؟

علت

نتیجه می یابد: آخرین خط صادر شده از گرافانا
داشبورد JSON حاوی شکست خط نیست. و
حلقه پوسته استاندارد چمنزار جنگلی استاندارد هنگام خواندن ...؛ انجام ...؛ انجام
نمی تواند خط شکست خط را کنترل کند:

  1. {
  2. echo "Line 1"
  3. echo "Line 2"
  4. echo -n "Line 3"
  5. } | در حالی که -r LINE؛ انجام دهید
  6. echo " $ LINE "
  7. انجام
  1. خط 1
  2. خط 2 [خط19659022] است ، خط 3!

    راه حل

    با اضافه کردن علاوه بر مقدار بازده ، می توان کل را اصلاح کرد.
    از بخوانید هنوز هم به نظر می رسد ، اگر هنوز چیزی در $ LINE وارد نشده است
    است. اتفاقاً چند مورد دیگر برای خنده دار وجود دارد
    شخصیت های تصحیح شده در ورودی و مشکلات با echo :

    1. {
    2. echo "Line 1"
    3. echo "خط 2"
    4. echo -n "Line 3"
    5. } | در حالی که IFS = -r LINE || [ -n " $ LINE " ] ؛ انجام
    6. printf '٪ s n' " $ LINE "
    7. line
    1. line 1
    2. خط 2
    3. خط 3

    کار می کند!

    برای صدور …

    اما چرا چیزی بسیار پیش پا افتاده است؟ یک فایل متنی تشکیل شده است
    خطوط و یک خط متشکل از کاراکترهای (یا نه) است که به دنبال آن قرار دارند
    شکست خط. اگر در انتهای پرونده خط شکسته نشود
    مخفف است ، این یک فایل متنی درست نیست ، ergo باید را بخواند
    کار نکن 🙂

    … یا خاموش نشده ، …

    با استفاده از ابزار می توان از کل ظروف سرباز یا مسافر جلوگیری کرد
    انتهای خط فرقی نمی کند ، بعد به حلقه پوسته می آیید
    و را مطالعه کنید:

    1. {
    2. echo "Line 1"
    3. echo "Line" 19659005] echo -n "Line 3"
    4. } ] | sed s / ^ / / [
    1. خط 1
    2. خط 2
    3. خط 3

    "شروع خط را با چهار فاصله جایگزین کنید" برای خودش صحبت می کند
    واضح است که یک برنده!

    من کنجکاو هستم که ببینم این مشکل دفعه بعد روی پای من می آید یا نه
    و چقدر سریع راه حل را به خاطر می آورم.