قم بتغيير الدليل الحالي من البرنامج النصي Bash

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

  •  22-08-2019
  •  | 
  •  

سؤال

هل من الممكن تغيير الدليل الحالي من البرنامج النصي؟

أريد إنشاء أداة مساعدة للتنقل في الدليل في Bash.لقد قمت بإنشاء برنامج نصي للاختبار يبدو كما يلي:

#!/bin/bash
cd /home/artemb

عندما أقوم بتنفيذ البرنامج النصي من Bash Shell، لا يتغير الدليل الحالي.هل من الممكن على الإطلاق تغيير دليل Shell الحالي من البرنامج النصي؟

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

المحلول

وتحتاج إلى تحويل السيناريو الخاص بك إلى وظيفة قذيفة:

#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
#   . ~/bin/myprog.sh
#

function myprog() {
  A=$1
  B=$2
  echo "aaa ${A} bbb ${B} ccc"
  cd /proc
}

والسبب هو أن كل عملية لديها الدليل الحالي الخاص به، وعند تنفيذ البرنامج من قذيفة يتم تشغيله في عملية جديدة. ومدمج على "سي دي" القياسية "أوامر pushd" و "popd" لقذيفة مترجم بحيث تؤثر على عملية قذيفة.

ومن خلال جعل البرنامج وظيفة قذيفة، الذي تضيفه بهم الأمر الخاص في عملية ومن ثم يحصل تنعكس أي تغيير الدليل في عملية قذيفة.

نصائح أخرى

وعند بدء تشغيل البرنامج النصي الخاص بك، يتم إنشاء عملية جديدة أن يرث فقط بيئتك. عندما تنتهي، وينتهي. البيئة الحالية يبقى كما هو.

وبدلا من ذلك، يمكنك البدء في السيناريو الخاص بك مثل هذا:

. myscript.sh

وو. وتقييم البرنامج النصي في البيئة الحالية، لذلك يمكن تغييره

في ضوء عدم قابلية القراءة والإفراط في تعقيد الإجابات، أعتقد أن هذا ما يجب على الطالب فعله

  1. أضف هذا البرنامج النصي إلى PATH
  2. تشغيل البرنامج النصي كما . scriptname

ال . (نقطة) سوف تتأكد من عدم تشغيل البرنامج النصي في قذيفة فرعية.

ووضع ما سبق معا، يمكنك جعل اسم مستعار

alias your_cmd=". your_cmd"

وإذا كنت لا تريد أن تكتب الرائدة "." كل مرة تريد مصدر السيناريو الخاص بك للبيئة قذيفة، أو إذا كنت ببساطة لا تريد أن تذكر أنه يجب أن يتم لالنصي للعمل بشكل صحيح.

إذا كنت تستخدم باش يمكنك محاولة الاسم المستعار:

وفي ملف .bashrc إضافة هذا السطر:

alias p='cd /home/serdar/my_new_folder/path/'

وعندما تكتب "ع" على سطر الأوامر، فإنه سيتم تغيير الدليل.

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

إذا الهدف هو تشغيل الأمر: goto.sh / الوطن / اختبار ثم العمل بشكل تفاعلي في / الوطن / اختبار طريقة واحدة هي لتشغيل المستوى الفرعي التفاعلية باش ضمن السيناريو الخاص بك:

#!/bin/bash
cd $1
exec bash

وهذه الطريقة سوف يكون في / الوطن / اختبار حتى الخروج (خروج أو Ctrl + C) من هذا قذيفة.

مع com.pushd يتم دفع الدليل الحالي إلى مكدس الدليل ويتم تغييره إلى الدليل المحدد، com.popd احصل على الدليل أعلى المكدس ثم قم بالتغييرات إليه.

pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null

وببساطة الذهاب الى

yourusername/.bashrc (or yourusername/.bash_profile on MAC) by an editor

وإضافة هذا الرمز بجانب السطر الأخير:

alias yourcommand="cd /the_path_you_wish"

ثم قم بإنهاء محرر.

واكتب ثم:

source ~/.bashrc or source ~/.bash_profile on MAC.

والآن يمكنك استخدام: <م> yourcommand في محطة

ولقد قدمت برنامج نصي لتغيير الدليل. نلقي نظرة: https://github.com/ygpark/dj

في الأساس نستخدم cd.. ليعود من كل دليل.فكرت في جعل الأمر أكثر سهولة من خلال تحديد عدد الأدلة التي تحتاج إلى العودة إليها في كل مرة.يمكنك تنفيذ ذلك باستخدام ملف نصي منفصل باستخدام أمر الاسم المستعار.على سبيل المثال:

code.sh

#!/bin/sh
 _backfunc(){
 if [ "$1" -eq 1 ]; then
  cd ..
 elif [ "$1" -eq 2 ]; then
  cd ../..
 elif [ "$1" -eq 3 ]; then
  cd ../../..
 elif [ "$1" -eq 4 ]; then
  cd ../../../..
 elif ["$1" -eq 10]; then
  cd /home/arun/Documents/work
 fi
 }
alias back='_backfunc'   

بعد الاستخدام source code.sh في الصدفة الحالية يمكنك استخدام:

$back 2 

للعودة خطوتين إلى الوراء من الدليل الحالي.شرحت بالتفصيل أكثر هنا.تم أيضًا شرح كيفية وضع الكود في ~/.bashrc بحيث يكون لكل غلاف جديد مفتوح تلقائيًا أمر الاسم المستعار الجديد هذا.يمكنك إضافة أمر جديد للانتقال إلى أدلة محددة عن طريق تعديل الكود بإضافة المزيد if conditions والحجج المختلفة.يمكنك أيضًا سحب الكود من git over هنا.

هذا النهج أسهل بالنسبة لي.

لنفترض أنك على جهاز iMac شخصي حيث تكون مسؤولاً، ضمن الدليل الافتراضي عند فتح نافذة الأوامر، /Users/jdoe، سيكون هذا هو الدليل الذي يجب الانتقال إليه:/Users/jdoe/Desktop/Mongo/db.3.2.1/bin.

هذه هي الخطوات التي يمكن أن تنجز المهمة:

  1. السادس mongobin، الذي دخلت فيه:cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin كالسطر الأول.
  2. chmod 755 mongobin
  3. source mongobin
  4. pwd

هاهو!

ولقد خلقت أيضا أداة تسمى الماعز التي يمكنك استخدامها لتسهيل التنقل.

ويمكنك عرض شفرة المصدر على جيثب .

v2.3.1 في نظرة عامة استخدام يبدو مثل هذا:

# Create a link (h4xdir) to a directory:
goat h4xdir ~/Documents/dev

# Follow a link to change a directory:
cd h4xdir

# Follow a link (and don't stop there!):
cd h4xdir/awesome-project

# Go up the filesystem tree with '...' (same as `cd ../../`):
cd ...

# List all your links:
goat list

# Delete a link (or more):
goat delete h4xdir lojban

# Delete all the links which point to directories with the given prefix:
goat deleteprefix $HOME/Documents

# Delete all saved links:
goat nuke

# Delete broken links:
goat fix

وأود أن تفعل الشيء نفسه لمشاريع مختلفة دون اشتعال قذيفة جديدة.

في قضيتك:

cd /home/artemb

حفظ the_script على النحو التالي:

echo cd /home/artemb

وبعد اطلاق النار عليه مع:

\`./the_script\`

وبعد ذلك تحصل على دليل باستخدام نفس قذيفة.

واضافة تحت خط cd في سكربت شل بك هذا:

exec $SHELL

أعلن طريقك:

PATH='/home/artemb'     
cd ${PATH}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top