การแก้ไขการตั้งค่าพา ธ ในไฟล์ ~ / .profile


11

มีบรรทัด~/.profileที่เป็น

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

iผมไม่แน่ใจว่าเกี่ยวกับที่ผ่านมา

  • ฉันควรลบไหม
  • มันเป็นข้อผิดพลาดทางไวยากรณ์หรือไม่?


4
@dessert ฉันไม่แน่ใจว่ามันซ้ำกัน ฉันเห็นด้วยทั้งสองอย่างเกี่ยวกับ$PATHตัวแปรสภาพแวดล้อม แต่ก็ไม่ซ้ำกันเลย อย่างมากพวกเขาเกี่ยวข้องกัน คำถามนี้เป็นปัญหา~/.profileที่เพิ่งเกิดขึ้นเป็นอักขระพิเศษในบรรทัดที่กำหนด$PATHสภาพแวดล้อม
Dan

@Dan คำตอบที่ได้รับการโหวตสูงสุด (!) ในคำถามซ้ำกันจะอธิบายว่าPATH=บรรทัดใน~/.profileนั้นควรดูเหมือนว่าถูกต้อง - ซึ่งเป็นคำถามจริงที่นี่
ของหวาน

1
@dessert สิ่งที่ OP มีที่นี่ใช้ได้อย่างสมบูรณ์ แต่ปัญหาของรูปแบบไม่ถูกต้อง ใช้งานได้ แต่มันไม่ได้ทำอะไรที่มีประโยชน์
terdon

2
ใช่ฉันใช้เครื่องมือแก้ไข vi อาจเป็นไปได้ว่าฉันใส่ 'i' ลงในไฟล์เหมือนของหวาน แต่ฉันต้อง: wq เพื่อให้มีประสิทธิภาพ ฉันคิดว่าฉันไม่ได้ทำ แต่เมื่อพิจารณาระดับของฉันฉันอาจทำสิ่งที่โง่
ยิ้ม

คำตอบ:


13

ไม่ไม่ใช่ข้อผิดพลาดทางไวยากรณ์ มันเป็นแค่ตัวอักษรซึ่งต่อท้ายหลังจากการขยาย$PATHเพราะเชลล์ลบเครื่องหมายคำพูด ...

$ PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
$ echo $PATH
/home/zanna/bin:/home/zanna/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bini

ดังนั้นเช่นเดียวกับ prepending ไดเรกทอรีท้องถิ่นจะได้ลบออกได้อย่างมีประสิทธิภาพที่มีอยู่จากเส้นทางของฉันและเพิ่มที่ไม่มีอยู่จริง/snap/bin/snap/bini

คุณสามารถลบiเพื่อซ่อมแซม PATH ของคุณ

หากต้องการดูการเปลี่ยนแปลงคุณจะต้องออกจากระบบและกลับเข้ามาใหม่หรือรันsource ~/.profileในเชลล์ใด ๆ ที่คุณใช้ (หรือเรียกใช้เชลล์ด้วยbash -l) เนื่องจาก.profileถูกอ่านโดยล็อกอินเชลล์เท่านั้น

หากคุณไม่ได้ทำการเปลี่ยนแปลงนี้.profileด้วยตัวคุณเองคุณอาจต้องการกู้คืนไฟล์เริ่มต้นด้วยการเรียกใช้

mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile

นี้จะเปลี่ยนชื่อเก่า.profile .profile.old(คุณยังสามารถลบไฟล์ถ้าคุณต้องการ) /etc/skelและแทนที่ด้วยรุ่นเริ่มต้นสำหรับระบบของคุณจาก


5

ฉันคิดว่าที่นี่ไม่ชัดเจนว่าการแสดงออกต่อไปนี้หมายถึงอะไร:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

ส่วนแรกหมายความว่าเรากำหนดค่าใหม่ให้กับตัวแปรPATH= (สภาพแวดล้อม)$PATH

ส่วนที่สองคือค่าใหม่ของตัวแปรนั้น ในกรณีที่ปัจจุบันตัวแปรจะขยายที่มีมูลค่าปัจจุบันและค่าที่จะถูกผนวกสตริง$HOME เดียวกันจะไปสำหรับส่วนถัดไปของสตริง/bin: $HOME/.local/bin:ในที่สุดค่าปัจจุบัน (ก่อนหน้า) ของ$PATHตัวแปรจะถูกขยายและผนวกเข้า ลำไส้ใหญ่:มีบทบาทของตัวคั่นในPATHนิพจน์

ท้ายที่สุดแล้วเป้าหมายคือการเขียน: PATH=<some additional paths>+<the the current value of $PATH>. เราวางเส้นทางเพิ่มเติมเหล่านี้ไว้ข้างหน้าสตริงเนื่องจากเราต้องการให้เชลล์ค้นหาไฟล์ที่เรียกใช้งานได้เป็นอันดับแรกในตำแหน่งเหล่านี้

ตัวละครiไม่จำเป็น มันจะถูกผนวกเข้ากับค่าใหม่ของ$PATHและจะทำให้เป็นระเบียบเป็น @Zanna อธิบายในตัวเธอคำตอบ


5

ใช่มันเป็นข้อผิดพลาดทางไวยากรณ์ที่เกิดขึ้นจริง.profileควรมีลักษณะเช่นนี้เว้นแต่คุณจะเปลี่ยนแปลงสิ่งต่าง ๆ (นี่คือรุ่น 17.10 ดูหมายเหตุด้านล่าง):

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

นี้อาจมีลักษณะแตกต่างกันในรุ่นเก่าของอูบุนตูที่ตรวจสอบในกรณีที่ผู้ใช้ไดเรกทอรีปัจจุบันไม่ได้ถูกรวมเข้าไปในbin .profileวิธี Eaisiest /etc/skel/.profileเพื่อตรวจสอบว่ามันควรจะมีลักษณะเหมือนคือการดูที่

เพื่อเพิ่มตามที่คุณถามในความคิดเห็นของคุณเพียงแค่วางไว้ที่ท้ายไฟล์โปรไฟล์ของคุณ:

# Manual addition for swift development snapshot
export PATH="$PATH:/home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin"

หากคุณทำให้โปรไฟล์ของคุณยุ่งเหยิงไปหมดมีสำเนาที่คุณสามารถรับโปรไฟล์ใหม่/etc/skel/ได้


1
ฉันมีหนึ่งบรรทัดพิเศษ "เส้นทางการส่งออก = $ เส้นทาง: /home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin" เพราะฉันติดตั้ง มันโอเคมั้ย
ยิ้ม

3
บรรทัดนี้ใช้ได้ฉันรวมไว้ในตัวอย่างเพื่อแสดงตำแหน่งที่จะวาง
Videonauth

1
โปรดทราบว่า/etc/skel/.profileใน 16.04 มีลักษณะที่แตกต่างกันโดยไม่มีการทดสอบว่า"$HOME/bin"มีอยู่ แม้ว่าจะเป็นตัวแปรที่ดีกว่า (IMO) ดูเหมือนว่าจะถูกเปลี่ยนกลับใน 17.10 - ด้วยเหตุผลหรือโดยไม่ได้ตั้งใจ
Gunnar Hjalmarsson

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