تغيير دليل العمل الحالي لشركة استدعاء من برنامج نصي روبي

StackOverflow https://stackoverflow.com/questions/2429294

سؤال

أنا أكتب أداة مساعدة سطر أوامر Sandbox بسيطة لنسخ ودليل UNZIP من نظام ملفات عن بعد إلى دليل خدش محلي من أجل فك ضغطهم والسماح للمستخدمين بتحرير الملفات. أنا أستخدم dir.mktmpdir كدليل خدش افتراضي، والذي يعطي مسارا قبيحا حقا (على سبيل المثال: / var / مجلدات / zz / zzzivhrrrnamviue +++ 1ve +++ yo / -tmp- / d20100311-70034-ABZ5ZJ)

أرغب في الإجراء الأخير من البرنامج النصي للنسخ والكتفيد إلى القرص المضغوط SHELD CHEST في دليل الخدش الجديد حتى يتمكن الأشخاص من الوصول إليه بسهولة، لكن لا يمكنني معرفة كيفية تغيير PWD من شل المكالمات. أحد الاحتمالات هو الحصول على الأداة المساعدة طباعة المسار الجديد إلى Stdout ثم قم بتشغيل البرنامج النصي كجزء من Subshell (أي cd $(sandbox my_dir) )، لكنني أرغب في طباعة التقدم المحرز في النسخة والضغط لأنه يمكن أن يستغرق ما يصل إلى 10 دقائق، لذلك لن يعمل هذا. يجب أن أذهب فقط إلى دليل خدش محدد مسبقا، سهلة البحث؟ هل لدى أي شخص اقتراح أفضل؟ شكرا مقدما لمساعدتكم. -شركة

هل كانت مفيدة؟

المحلول

يمكنك أن تموت في قذيفة جديدة تجلس في دير الصفر الخاص بك، لكنني أواجه مشكلة في فهم نقطة كل هذا. إذا سيقوم المستخدمون بتحرير هذه الملفات، ففترض أنهم يريدون الاحتفاظ بهم أو تخطط للعمل مع الملفات المعدلة. في الحالة الأولى، ضع الملفات في موقع معقول ولن تقلق بشأن العثور على مستخدمي المستخدمين (دليل العمل الحالي). في الحالة الثانية، تفرخ فرقة صعبة للمستخدمين الذين يجلسون في Dir Dir وإرجاعهم لتحرير الملفات. عند خروجك Subshell، يمكنك الاستمرار في معالجة ملفاتك من نفس برنامج Ruby.

نصائح أخرى

لا يمكن لعملية تغيير بيئة العملية الأصلية، لذلك سيتعين عليك القيام ببعض الإجراءات في الوالد.

هل يمكن أن يكون لديك مستخدمي المستخدم الخاص بك نص SHELT، وهذا البرنامج النصي يستدعي برنامج Ruby CD في مكان ما. عند استخدام الأمر المصدر Shell الخاص بك (. أو source)، وهذا يؤثر على العملية الحالية.

كما، يلاحظ Glenn Jackman، عملية الطفل لا يمكن تغيير دليل العمل الحالي للوالدين (أو متغيرات البيئة، إلخ). ما لم تكن تحسب انتهاك العملية الأصل مع مصحح الأخطاء ...

يمكن تشغيل العملية كجزء من استبدال الأوامر بالكتابة إلى Stderr لتوفير الإخراج للمستخدم أثناء استلام إخراج Stdout بواسطة استبدال الأمر:

cd "$(sandbox whatever)"

أين ال رمل يرسل الأمر معظم إخراجه إلى Stderr، ومجرد "الدليل النهائي إلى Chdir إلى" Stdout. إذا رمل كان برنامج نصي شل، يمكنك القيام بذلك مثل هذا:

#!/bin/sh
newdir="$(mktemp -dt sandobox)"
{
# do whatever, in a sub-shell
# use a group command (or change the braces to parens to use a sub-shell) to
# capture all stdout and send it to stderr 
} 1>&2
echo "$newdir"

أنا متأكد من أن شيئا ما يعادله يمكن القيام به في روبي.

قم بإنشاء دليل Temp الخاص بك من البرنامج النصي Shell الخاص بك أولا ثم تمريره كوسيطة سطر الأوامر إلى البرنامج النصي Ruby الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top