วิธีการตั้งค่านามแฝงในแต่ละไดเรกทอรี?


18

สมมติว่าคุณมีนามแฝงgoแต่ต้องการให้ทำสิ่งต่าง ๆ ในไดเรกทอรีที่ต่างกันหรือไม่

ในไดเรกทอรีหนึ่งควรรันcmd1แต่ในอีกไดเรกทอรีหนึ่งควรรันcmd2

อย่างไรก็ตามฉันมีชื่อแทนสำหรับการเปลี่ยนไปยังไดเรกทอรีด้านบนแล้วดังนั้นจึงเป็นไปได้ที่จะผนวกการgoมอบหมายนามแฝงเข้ากับfooนามแฝง

alias "foo=cd /path/to/foo"

ทำงานใน bash (?) บน OSX


1
นี่คือสิ่งที่ makefiles ใช้สำหรับ
itsbruce

คำตอบ:


16

ไม่แน่ใจว่าสิ่งที่คุณขออย่างสมบูรณ์ แต่นามแฝงเพียงขยายไปยังสิ่งที่อยู่ในนามแฝง หากคุณมีนามแฝงสองตัวคุณสามารถต่อท้ายคำสั่งต่าง ๆ ได้แม้กระทั่งนามแฝง

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

ในสถานการณ์อื่น ๆ คุณสามารถระบุฟังก์ชั่นในของคุณ .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

ในกรณีที่คุณมีตัวเลือกเพิ่มเติมคุณควรใช้โครงสร้างเคส


4

ฉันรู้สึกว่าคุณเป็น "ไดเรกทอรีที่มุ่งเน้น" และในกรณีนี้สิ่งนี้อาจทำให้ความคิดของคุณดีขึ้น

(แต่ถ้าพูดตามตรงฉันคิดว่านี่เป็นความคิดที่ไม่ดีโดยสิ้นเชิง

ใน.bashrcใส่alias go="./.cmd"(แล้วsource ~/.bashrc)

จากนั้นในแต่ละไดเรกทอรีให้วางสคริปต์ที่เรียกว่า.cmdจากchmod +x .cmdนั้นgoทำสิ่งที่คุณต้องการ


2
นั่นเป็นงานจำนวนมาก ... นี่คือกรณีการใช้งาน: เมื่อทำการทดสอบฉันต้องการนามแฝง rspec-all เพื่อทำการทดสอบบางอย่าง แต่การทดสอบใดขึ้นอยู่กับโครงการ และจะถูกกำหนดโดยไดเรกทอรี
B เซเว่น

2
สิ่งที่ฉันเห็นคุณมีสองตัวเลือกใช้ฟังก์ชั่นเดียว (เช่น @Bernhard อธิบายไว้ข้างต้น) และแยกสาขาขึ้นอยู่กับไดเรกทอรี (เหมือนที่เขาพูด) หรือคุณสามารถใส่พารามิเตอร์ในไดเรกทอรี ลองคิดดูสิมันไม่จำเป็นต้องเป็นสคริปต์คุณสามารถใส่ไฟล์ ( touch .TESTNO; echo 2 > .TESTNO) ในแต่ละไดเรกทอรีจากนั้นในฟังก์ชั่นของคุณค้นหาไฟล์นั้นและแยกสาขาตามหมายเลขทดสอบไฟล์. TESTNO มี แม้ว่าจะไม่ยาก แต่คุณอาจไม่สามารถใช้ชื่อแทนได้ คุณต้องใช้ฟังก์ชั่น
Emanuel Berg

2

ฉันกำลังทำงานในโครงการที่ประสบความสำเร็จ ตรวจสอบว่า: localalias

นี่คือตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่

ตลกดีจริง ๆ ฉันใช้goเป็นตัวอย่างในการสาธิต ฉันไม่ได้แสดงไดเรกทอรีการสลับ (สิ่งที่ฉันควรเปลี่ยนเกี่ยวกับการสาธิต) แต่ฟังก์ชั่นที่มีlaคำสั่งนั้นแน่นอนอยู่ในไดเรกทอรีที่พวกเขากำหนดไว้


1
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

สิ่งที่คล้ายกัน แต่สมมติว่า "go" เป็นคำสั่งที่คุณต้องการฟังก์ชั่นที่แตกต่างจากในไดเรกทอรีเฉพาะ


1

หากคุณเพิ่มฟังก์ชั่นต่อไปนี้ใน. bashrcของคุณ

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

ทุกครั้งที่คุณ cd ไปยังไดเรกทอรีที่มีไฟล์. aliases จะได้รับที่มา

ระวังความปลอดภัยหากผู้อื่นสามารถสร้างไฟล์ในเครื่องของคุณ

ด้วยนามแฝงเคล็ดลับนี้จะไม่ถูกลบ แต่คุณสามารถเขียนโค้ดได้มากเท่าที่คุณต้องการในฟังก์ชั่น

ondirใช้เคล็ดลับนี้และมีระฆังและนกหวีดมากมาย

http://swapoff.org/ondir.html#download


.bashrcในขณะที่ฉันคิดว่านี่เป็นคนฉลาดดูเหมือนว่ามันเป็นอันตรายเพราะมันอาศัยอยู่ (สิ่งนี้จะไม่ทำงานcronเช่น)
ctbrown

ฉันไม่แน่ใจว่ามีอะไรที่อันตรายเกี่ยวกับ bashrc ฉันเชื่อว่านี่เป็นสถานที่มาตรฐาน / ที่ถูกต้องสำหรับนามแฝง มันอยู่ในธรรมชาติของสภาพแวดล้อมที่แตกต่างกัน ให้คำถามกับสภาพแวดล้อมที่แตกต่างกันเป็นสิ่งที่จำเป็น ไม่มีอะไรจะหยุดคุณหาผู้ใช้. bashrc ใน cron ถ้าคุณต้องการ cron มีสภาพแวดล้อมที่คล้ายกัน NB cron ควรถูกคาดหวังให้ทำงานแตกต่างจากเชลล์แบบโต้ตอบเนื่องจากการใช้ isatty และ chums
teknopaul

จริงไม่มีอะไรอันตรายเกี่ยวกับ bashrc ตัวเอง ปัญหาคือคุณไม่มีทางที่จะมั่นใจได้ว่ากระบวนการที่เปลี่ยนไปเป็นไดเรกทอรีนั้นจะเป็นแหล่งข้อมูล bashrc มันเป็นสิ่งหนึ่งถ้ามันเป็นเซสชั่นการโต้ตอบของคุณ มันค่อนข้างอื่นถ้าไดเรกทอรีที่ใช้ร่วมกันระหว่างผู้ใช้และกระบวนการที่อาจหรือไม่อาจใช้เปลือก bash .bash_aliases เป็นตำแหน่งที่ต้องการสำหรับนามแฝงทุบตีในบางระบบ
ctbrown
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.