وباش واحد بطانة لتغيير في الدليل حيث يوجد بعض الملفات

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

  •  21-08-2019
  •  | 
  •  

سؤال

وكثيرا ما كنت تريد تغيير إلى الدليل الذي يقع للتنفيذ معين. لذلك أود شيء من هذا القبيل

cd `which python` 

لتغيير إلى الدليل حيث تم تثبيت الأمر الثعبان. ومع ذلك، من الواضح أن هذا غير قانوني، منذ مؤتمر نزع السلاح يأخذ الدليل، وليس ملف. هناك بالطبع بعض التعبير العادي-فو ما يمكن القيام به لتجريدها من اسم الملف، ولكن من شأنه أن يبطل وجهة كونها سهلة أونيلينير.

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

المحلول

وهنا:

cd $(dirname `which python`)

وتحرير:

وحتى أسهل (اختبار فعلا هذه المرة):

function cdfoo() { cd $(dirname `which $@`); }

وبعد ذلك "الثعبان cdfoo".

نصائح أخرى

لتجنب كل هذه البرامج الخارجية ( 'dirname "وأسوأ بكثير، وعديمة الفائدة ولكن شعبية' الذي ') ربما قليلا إعادة كتابة:

cdfoo() {
  tgtbin=$(type -P "$1")
  [[ $? != 0 ]] && {
    echo "Error: '$1' not found in PATH" >&2
    return 1
  }
  cd "${tgtbin%/*}"
}

وهذا يحدد أيضا 'وظيفة' الكلمة شائعة من فوق ويضيف (بسيط جدا) التعامل مع الخطأ.

قد يكون بداية للتوصل إلى حل أكثر sphisticated.

وعلى سبيل المقارنة:

zsh:~% cd =vi(:h)
zsh:/usr/bin%

و= كمد يوسع إلى صراط كمد وقال (: ح) هو معدل غلوب لاتخاذ رئيس

وzsh غير الكتابة فقط ولكنها قوية.

وشيء من هذا القبيل يجب أن تفعل خدعة:

cd `dirname $(which python)`

وميزة واحدة لقد استعملت تخصيص لأوامر pushd / popd. هذه حفاظ على كومة الدليل بحيث لم يكن لديك في محاولة للحفاظ على تاريخ المكان الذي كنت فيه إذا كنت ترغب في العودة إلى دليل العمل الحالي قبل تغيير الدلائل.

وعلى سبيل المثال:

pushd $(dirname `which $@`)
...
popd

هل يمكن استخدام شيء من هذا القبيل:

cd `which <file> | xargs dirname`

وأضفت قليلا من معالجة الخطأ بسيط هو أن يجعل سلوك cdfoo () يتبع ذلك من dirname عن الحجج غير موجود / nonpath

function cdfoo() { cd $(dirname $(which $1 || ( echo . && echo "Error: '$1' not found" >&2 ) ));}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top