แก้ไข bash_profile


1

ฉันพยายามที่จะเรียนรู้ทุบตี ฉันใช้อูบุนตู

ฉันต้องการเพิ่มฟังก์ชั่น ฉันไม่แน่ใจว่าสภาพอากาศที่ฉันต้องสร้าง.profileหรือ.bash_profileไฟล์ดังนั้นฉันสร้างทั้งใน~/ไดเรกทอรี

ฉันเพิ่มบางอย่างเช่นนี้ในแต่ละคน:

myfunc()
{
    echo "function ran"
}

ฉันออกจากระบบผู้ใช้ของฉันและเข้าสู่ระบบอีกครั้งฉันรันสิ่งนี้ในบรรทัดคำสั่ง:

ฉัน @ host: ~ $ myfunc

ซึ่งเพิ่งกลับมา:

ไม่พบคำสั่ง myfunc

ไม่แน่ใจว่าฉันทำอะไรผิด


คุณอยู่ในกล่องของคุณเองหรือกล่องระบบที่ได้รับการยกย่อง นอกจากนี้กล่องวานิลลาหรือปรับแต่ง? อาจช่วยในการวินิจฉัย
Roy Rico

3
ทันทีหลังจากสร้าง. profile ของคุณจะไม่สามารถใช้งานได้ทันที เริ่มต้นเชลล์ใหม่หรือพิมพ์source ~/.profile
Jarvin

@ ฉันเป็นผู้ดูแลฉันติดตั้งระบบปฏิบัติการและทุกอย่าง แต่ฉันเป็น n00b ทั้งหมดใน linux
JD Isaacks

@Dan: เขาบอกว่าเขาออกจากระบบและกลับเข้ามาอีกครั้ง
Dennis Williamson

คำตอบ:


4

~ / .profile หรือ ~ / .bash_profile ของคุณมาจากกระบวนการเข้าสู่ระบบ เชลล์ที่คุณเรียกใช้ในหน้าต่างเทอร์มินัลจะถูกเรียกใช้ในกระบวนการอื่นซึ่งเป็นลูกหลานของกระบวนการเข้าสู่ระบบ การตั้งค่าบางอย่างที่ทำโดยกระบวนการเข้าสู่ระบบจะถูกส่งออกไปยังกระบวนการลูก แต่นามแฝงและนิยามฟังก์ชันไม่ได้ นามแฝงและฟังก์ชั่นควรกำหนดแทนในไฟล์ rc ของเชลล์, ~ / .bashrc ในกรณีนี้ ไฟล์นั้นมีที่มาจากทุกกระบวนการทุบตีแบบโต้ตอบ

สำหรับว่าคุณควรตั้งค่าตัวแปรสภาพแวดล้อมและรหัสเริ่มต้นอื่น ๆ ใน ~ / .profile หรือ ~ / .bash_profile หรือไม่man man bashกล่าวว่าเปลือกล็อกอินนั้นค้นหา ~ / .bash_profile, ~ / .bash_login และ ~ / .profile ใน คำสั่งนั้นและอ่านอันแรกที่พบ ดังนั้นหากคุณมีทั้ง ~ / .bash_profile และ ~ / .profile เฉพาะจะมีการอ่าน ~ / .bash_profile และ ~ / .profile จะถูกละเว้น สิ่งที่คุณใช้นั้นขึ้นอยู่กับคุณ แต่หากคุณวางแผนที่จะใช้เชลล์อื่นที่ไม่ใช่ bash คุณอาจต้องการตั้งค่าของคุณใน ~ / .profile และลบ ~ / .bash_profile


ฟังก์ชั่นสามารถส่งออกได้ (แต่อย่างที่คุณบอกว่าไม่ได้เป็นค่าเริ่มต้น)
Dennis Williamson

2

บนบรรทัดคำสั่งเพียงพิมพ์:

function myfunc()

ENTER

{

ENTER

echo "function ran"

ENTER

}

ENTER

เรียกใช้ฟังก์ชันโดยพิมพ์ฟังก์ชันดังนี้:

$ myfunc

ลบฟังก์ชั่นโดยใช้:

unset -f myfunc

ดูข้อมูลเพิ่มเติมได้จาก:


สิ่งนี้ใช้ได้ผล ฉันสงสัยว่าทำไมการเพิ่มไฟล์ไม่
JD Isaacks

1
@john ใส่echo defining john's functions nowลงในไฟล์ของคุณเพื่อดูว่ามีการกำหนดไว้เมื่อใด คุณอาจต้องการให้พวกเขาในของคุณ~/.bashrc
ขยะ

@msw ฉันไม่แน่ใจว่าคุณหมายถึงอะไร โดยecho defining john's functions nowอาจอธิบายอย่างละเอียดในคำตอบของคุณเอง? แต่ฉันพยายามเพิ่มลงใน. bashrc และมันก็ไม่ได้ทำให้ฉันมีข้อผิดพลาด แต่ไม่มีผลลัพธ์เช่นกัน เพิ่งไปถึงบรรทัดถัดไปราวกับว่าฉันเพิ่งตีenter
JD Isaacks

@ จอห์นโปรดอ่าน จากประวัติย่อและความสำเร็จของคุณคำถามเหล่านี้ดูเหมือนจะอยู่ข้างใต้คุณ เห็นได้ชัดว่าคุณไม่ได้โง่และสามารถแก้ไขความไม่รู้ หากคุณสามารถเข้าใจ Illustrator การทุบตีควรจะง่ายกว่าเมื่อเปรียบเทียบ แต่ยังคงต้องทำการบ้านล่วงหน้า tldp.org/LDP/Bash-Beginners-Guide/htmlความสงบสุข
msw


1

หากต้องการดูว่าไฟล์ใดที่ดำเนินการตามลำดับคุณอาจต้องการวางคำสั่ง singel echo หรือ printf ลงในไฟล์เหล่านั้น จากนั้นคุณจะเห็นเมื่อพวกเขาถูกประหารชีวิต

# You could try this
echo "This will be printed"
printf "This will also be printed (%d)\n" 10

เมื่อต้องการดูว่า echo และงานพิมพ์คุณจะต้องใช้คำสั่ง man (1) และดูใน man page เพื่อหา bash (1) วงเล็บหลังคำสั่งจะบอกคุณว่าส่วนใดในคู่มือที่คุณค้นหาข้อมูล 1 หมายถึงคำสั่งทั่วไป คุณควรลองคำสั่งเหล่านี้:

man man
man -k manual
man bash

ในหน้าคู่มือสำหรับทุบตีค้นหาส่วน "คำสั่งเปลือกอาคาร" (ลอง / และเขียนสิ่งที่คุณค้นหาหรือใช้ปุ่มเว้นวรรค) มีข้อมูลเกี่ยวกับคำสั่งที่สร้างไว้ใน bash เช่น echo และ printf

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