บันทึกไดเรกทอรีปัจจุบันในตัวแปรโดยใช้ Bash?


113

export PATH=$PATH:currentdir+somethingelseสิ่งที่ฉันพยายามทำคือการหาไดเรกทอรีการทำงานปัจจุบันและบันทึกลงในตัวแปรเพื่อที่ฉันสามารถเรียกใช้ ฉันไม่แน่ใจว่าพวกเขามีตัวแปรที่มี cwd เป็นค่าเริ่มต้นหรือไม่

ฉันจะบันทึกไดเร็กทอรีปัจจุบันในตัวแปรโดยใช้ Bash ได้อย่างไร


เพื่อบันทึกลงในตัวแปรฉันจะทำ mydir =. เหรอ?
Stupid.Fat.Cat

1
ใช่เพิ่งทดสอบกับ mydir =. แล้ว ls $ mydir - แต่มันสัมพันธ์กันดังนั้นมันจะเป็น pwd จากทุกที่ที่คุณเรียกใช้
mcalex

ขอบคุณ! หวังว่าสิ่งนี้จะใช้ได้กับฉัน
Stupid.Fat.Cat

โอ้ฉันมีช่องว่าง tt $ {PWD} น่าจะได้ผล ฮ่า ๆ . ...
อ๊ะ

คำตอบ:


192

สิ่งนี้บันทึกเส้นทางที่แน่นอนของไดเร็กทอรีการทำงานปัจจุบันไปยังตัวแปรcwd:

cwd=$(pwd)

ในกรณีของคุณคุณสามารถทำได้:

export PATH=$PATH:$(pwd)+somethingelse

1
ด้วยเหตุผลบางอย่างถ้าฉันเปลี่ยนเป็น dir อื่นสิ่งนี้จะอัปเดตcwdตัวแปรด้วย เช่นถ้ามันเรียกใช้pwdฟังก์ชันในแต่ละครั้ง ... dpaste.de/Kn7F ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร?
tutuca

1
$CWDอาจเป็นตัวแปรสภาพแวดล้อมพิเศษ (สงวนไว้) ในเชลล์ของคุณ ลองใช้ชื่ออื่นแทนเช่น$CWD_MY_VAR
sampson-chen

การใช้ backticks ก็เช่นเดียวกัน
tutuca

1
ทำไมไม่ใช้"$PWD"?
leetbacoon

28

ฉันมีสิ่งต่อไปนี้ใน. bash_profile ของฉัน:

function mark {
    export $1=`pwd`;
}

ดังนั้นตลอดเวลาที่ฉันต้องการที่จะจำไดเรกทอรีฉันเพียงแค่สามารถพิมพ์เช่นเครื่องหมายมี

จากนั้นเมื่อฉันต้องการกลับไปที่ตำแหน่งนั้นฉันก็แค่พิมพ์cd $ ตรงนั้น


ใช้งานได้ดี แต่สำหรับเส้นทางที่มีช่องว่างเช่น "Google ไดรฟ์" คุณต้องทำcd "$foo"เพื่อให้อ่านเส้นทางทั้งหมดได้
mercergeoinfo

3
เพื่อแก้ไขปัญหาเกี่ยวกับช่องว่างในเส้นทางexport $1=`pwd` ให้เปลี่ยนเป็น export $1="`pwd`" แล้วเมื่อเรียกเส้นทางดังกล่าวให้ใช้cd "$foo"แทน justcd $foo
mercergeoinfo

mercergeoinfo: พูดอย่างเคร่งครัดexport $1="`pwd`"ไม่จำเป็นต้องใช้เครื่องหมายคำพูดในเนื่องจากการแยกคำไม่ได้เกิดขึ้นที่ด้านขวามือของงานแม้ว่าการอ้างถึงการขยายจะเป็นสิ่งที่ดีที่จะใช้จนเป็นนิสัย
Larry

2
ดูcdable_varsเพื่อพิมพ์ justcd there
John Cummings


3

สำหรับคำตอบสัมพัทธ์ให้ใช้.

ทดสอบกับ:

$ myDir=.
$ ls $myDir
$ cd /
$ ls $myDir

รายการแรกlsจะแสดงทุกอย่างในไดเร็กทอรีปัจจุบันส่วนที่สองจะแสดงทุกอย่างในไดเรกทอรีราก ( /)




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