คำถามติดแท็ก environment-variables

สำหรับคำถามที่เกี่ยวข้องกับตัวแปรสภาพแวดล้อมชุดของตัวแปรแบบไดนามิกที่สามารถส่งผลต่อพฤติกรรมการทำงานของกระบวนการและการเข้าถึงทรัพยากร ใช้แท็กนี้สำหรับคำถามเกี่ยวกับตัวแปรสภาพแวดล้อมหรือคำถามเกี่ยวกับปัญหาที่เกิดจากผลกระทบของการตั้งค่าหรือแก้ไขค่าตัวแปรในการทำงานของกระบวนการทำงานและการเข้าถึงทรัพยากร

4
ฉันจะได้รับสภาพแวดล้อมแบบใดด้วย sudo
เมื่อฉันเรียกใช้ sudo จะเกิดอะไรขึ้นกับสภาพแวดล้อมของฉัน เมื่อฉันวิ่งsudo commandมันดูเหมือนจะไม่เห็นสภาพแวดล้อมของฉันหรือรูท ตัวอย่างเช่นพา ธ ของฉันสำหรับทั้งสองรวมถึง/usr/local/binแต่ถ้าฉันพยายามเรียกใช้หนึ่งในโปรแกรมที่ไม่มีพา ธ เต็มเส้นทางจะล้มเหลว ฉันคิดว่า sudo วิ่งตามรูทและด้วยเหตุนี้จึงมีสภาพแวดล้อมของรูท มีวิธีอื่นที่ทุบตีดำเนินการภายใต้ sudo กว่าภายใต้ root หรือผู้ใช้ปกติของฉันได้อย่างไร แก้ไข: ฉันได้ใช้sudo -iเร็ว ๆ นี้ แต่เมื่อเร็ว ๆ /rootนี้จะได้รับการก่อให้เกิดปัญหาเพราะไดเรกทอรีที่ทำงานปัจจุบันของฉันได้รับการตั้งค่าให้ นี้เป็นตามที่คาดไว้ (sorta) แต่ผมก็ยังไม่เข้าใจว่าทำไม sudo ไม่ได้ตระหนักถึง executables /usr/local/binของฉันใน แก้ไข: ฉันกำลังใช้งาน Fedora 15

1
เหตุใดการขยายพารามิเตอร์ bash ไม่ทำงานในไฟล์เซอร์วิส systemd
ฉันกำลังพยายามที่จะใช้systemd's EnvironmentFileและเพิ่มตัวเลือกในการคำสั่งเมื่อมีการตั้งค่าในแฟ้ม ฉันมีต่อไปนี้ในไฟล์หน่วย: ExecStart=/usr/bin/bash -c "echo ${PORT:+port is $PORT}" ซึ่งไม่ได้สะท้อนอะไรเลยเมื่อฉันเริ่มให้บริการ งานต่อไปนี้เป็นไปตามที่คาดไว้: ExecStart=/usr/bin/bash -c "echo port is $PORT" ซึ่งหมายความว่าไฟล์อ่านอย่างถูกต้อง การทดแทนพารามิเตอร์ยังทำงานบนบรรทัดคำสั่ง: $ PORT=1234 bash -c 'echo ${PORT:+port is $PORT}' port is 1234 ฉันกำลังคิดถึงอะไร

3
เหตุใด $ SHELL จึงไม่เปลี่ยนแปลงเมื่อฉันเรียกใช้เชลล์ใหม่
$ echo $SHELL /bin/bash $ /bin/ksh93 $ echo $SHELL /bin/bash $ file /bin/ksh93 /bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped $ getent passwd test111 test111:x:1008:1008:,,,:/tmp:/bin/ksh93 $ ssh test@localhost test@localhost's password: $ echo $SHELL /bin/ksh93 $ bash $ echo $SHELL …

2
ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับ gnome บน wayland และ bash บนเทอร์มินัลเสมือน (หรือ ssh)
Gnome 3.22 ใช้ Wayland เป็นค่าเริ่มต้น Gnome บน wayland ไม่ได้อ่าน~/.profile(หรือ~/.bash_profileหรือ/etc/profile) ดูhttps://bugzilla.gnome.org/show_bug.cgi?id=736660 ฉันมีไฟล์เริ่มต้นของฉันตั้งค่าดังต่อไปนี้: .bash_profileไม่ทำอะไรเลยนอกจากแหล่ง.profileและ.bashrc .profileตั้งค่าตัวแปรสภาพแวดล้อมเช่นPATHและเท่านั้นLC_MESSAGES .bashrcชุดการตั้งค่าบางทุบตีที่เฉพาะเจาะจงและชื่อแทนและตัวแปรสภาพแวดล้อมสำหรับการใช้งานเช่นการและlessgrep ผลกระทบ (ก่อน wayland) มีดังต่อไปนี้: เมื่อฉันเข้าสู่ระบบกราฟิก.profileถูกอ่านและตัวแปรสภาพแวดล้อมเช่นPATHและLC_MESSAGESถูกตั้งค่า เมื่อฉันเปิด bash ภายในเทอร์มินัลอีมูเลเตอร์แล้ว.bashrcอ่าน เมื่อฉันเข้าสู่ระบบภายใต้ terminal เสมือนแล้ว.bash_profileได้อ่านซึ่งในการเปิดอ่านและ.profile.bashrc เมื่อฉันเข้าสู่ระบบโดยใช้ ssh พฤติกรรมนั้นคล้ายกับเทอร์มินัลเสมือน ในทุกกรณี.profileและ.bashrcถูกอ่านและสภาพแวดล้อมของฉันถูกตั้งค่า ดังนั้นตอนนี้ gnome 3.22 ใช้ Wayland และ Wayland .profileไม่ได้อ่าน ฉันจะตั้งค่าไฟล์เริ่มต้นได้อย่างไรเพื่อให้ฉันมีลักษณะพิเศษตามที่อธิบายไว้ข้างต้นอีกครั้ง โปรดทราบว่าฉันไม่ได้ยืนยันว่าอ่านไฟล์บางไฟล์ (ชอบ.profile) สิ่งที่ฉันต้องการคือการตั้งค่าสภาพแวดล้อมของฉันอย่างเหมาะสม นั่นหมายความว่าฉันต้องการเก็บการตั้งค่าเฉพาะของ bash ไว้ในไฟล์กำหนดค่าเริ่มต้น bash และการตั้งค่าอื่น ๆ ไปยังไฟล์เริ่มต้นอื่น ๆ นอกจากนี้ฉันไม่ต้องการคัดลอกการตั้งค่าไปยังไฟล์อื่น …

5
แบ่งปันตัวแปรสภาพแวดล้อมระหว่างการทุบตีและปลา
สคริปต์ทุบตีและปลาเข้ากันไม่ได้ แต่ฉันต้องการไฟล์ที่กำหนดตัวแปรสภาพแวดล้อมบางอย่างที่จะเริ่มต้นได้โดยทั้งทุบตีและปลา โซลูชันที่เสนอของฉันกำลังกำหนด~/.envไฟล์ที่จะมีรายการตัวแปรสภาพแวดล้อมเช่น: PATH="$HOME/bin:$PATH" FOO="bar" จากนั้นฉันก็สามารถเขียนมันลงในทุบตีและสร้างสคริปต์ที่แปลงเป็นรูปแบบปลาและแหล่งที่มาในปลา ฉันคิดว่าอาจมีทางออกที่ดีกว่านี้ดังนั้นฉันจึงขอวิธีที่ดีกว่าในการแบ่งปันตัวแปรสภาพแวดล้อมระหว่างปลาทุบตี หมายเหตุ: ฉันใช้ OS X นี่คือ.envไฟล์ตัวอย่างที่ฉันต้องการให้ทั้งปลาและทุบตีจัดการโดยใช้ไวยากรณ์ของปลาที่น่าขัน (สมมติว่า ~ / bin และ ~ / bin2 เป็นไดเรกทอรีว่าง): setenv _PATH "$PATH" setenv PATH "$HOME/bin" setenv PATH "$PATH:$HOME/bin2" setenv PATH "$PATH:$_PATH"

1
ตัวแปรสภาวะแวดล้อม $ HOME ถูกตั้งค่าไว้บนระบบ Linux เสมอหรือไม่?
สมมติว่าเครื่องกำลังใช้เคอร์เนล Linux เซสชันใช้ประโยชน์จาก Bash shell และทุกอย่างใช้การกำหนดค่าเริ่มต้น (ไม่มีผู้ใช้ทำการเปลี่ยนแปลงใด ๆ กับไฟล์กำหนดค่า) เราสามารถสมมติว่า$HOMEตัวแปรสภาพแวดล้อมถูกตั้งค่าเสมอหรือไม่

2
ตั้งค่า LC_ * แต่ไม่ใช่ LC_ALL
ฉันต้องการมีภาษาเยอรมัน (ออสเตรีย) (ขนาดกระดาษ A4 เวลา 24 ชั่วโมง yyyy-mm-dd) แต่ส่วนติดต่อผู้ใช้เป็นภาษาอังกฤษ (ฉันไม่ชอบการแปลที่ไม่ดี) ฉันคิดว่าวิธีที่ถูกต้องเพื่อให้บรรลุนี้คือการตั้งค่าLC_ตัวแปรดังต่อไปนี้ในของฉัน.bashrc(โปรดแก้ไขฉันหากฉันผิด): LC_MESSAGES=en_US.UTF-8 LC_$everythingelse=de_AT.UTF-8 มีวิธีหรูหรากว่าการตั้งค่า LC_ $ ทุกอย่างอื่นแทนที่จะตั้งค่าทุกค่าหรือไม่ การตั้งค่า LC_ALL ไม่ใช่ตัวเลือกเนื่องจากมีความสำคัญกว่า LC_MESSAGES: $ export LC_ALL=de_AT.UTF_8 $ export LC_MESSAGES=en_US.UTF_8 $ echo $LC_MESSAGES en_US.UTF_8 $ locale | grep LC_MESSAGES LC_MESSAGES="de_AT.UTF_8" PS: มันเป็นเครื่องที่ใช้ร่วมกันและฉันไม่ได้ sudoer ดังนั้นการเปลี่ยนการตั้งค่าทั้งระบบไม่ใช่ตัวเลือก

1
ค้นหาคำอธิบายใน man page สำหรับตัวแปรสภาวะแวดล้อมที่แสดงด้วยคำสั่ง env
ใน man pages ฉันจะหาคำอธิบายโดยละเอียดของตัวแปรสภาพแวดล้อมที่แสดงรายการเมื่อenvคำสั่งรันได้อย่างไร? ฉันลองแล้วman envแต่มันมีเพียงตัวอย่างเดียวสำหรับTZตัวแปรสภาพแวดล้อม

2
ตัวแปรสภาพแวดล้อมปรากฏแก่ผู้ใช้ที่ไม่มีสิทธิพิเศษบน Linux หรือไม่
ฉันพยายามที่จะตรวจสอบว่าใน Linux ตัวแปรสภาพแวดล้อมสำหรับกระบวนการสามารถสังเกตเห็นได้โดยผู้ใช้อื่น (ไม่ใช่รูท) กรณีการใช้งานทันทีคือการใส่ความลับลงในตัวแปรสภาพแวดล้อม สิ่งนี้ถูกกล่าวถึงในหลาย ๆ แห่งทั่วทั้งเว็บว่าไม่ปลอดภัย แต่ฉันไม่สามารถเป็นศูนย์ในจุดรับแสงที่แน่นอนใน Linux โปรดทราบว่าฉันไม่ได้พูดถึงการใส่ความลับที่ชัดเจนเข้าไปในไฟล์ โปรดทราบว่าฉันไม่ได้พูดถึงการเปิดรับบัญชีรูท (ฉันพยายามปกปิดความลับจากฝ่ายตรงข้ามที่มีรูทเป็น nonstarter) คำถามนี้ดูเหมือนจะตอบคำถามของฉันด้วยความคิดเห็นที่จำแนกตัวแปรสภาพแวดล้อมว่าสมบูรณ์โดยไม่มีการรักษาความปลอดภัยหรือเพียงแค่ถูกทำให้งงงวย แต่มีวิธีเข้าถึงพวกเขาอย่างไร ในการทดสอบของฉันผู้ใช้ที่ไม่มีสิทธิพิเศษไม่สามารถสังเกตเห็นตัวแปรสภาพแวดล้อมสำหรับผู้ใช้รายอื่นผ่านตารางกระบวนการ ('ps auxwwe') คำสั่งที่ตั้งค่าตัวแปรสภาพแวดล้อม (เช่นการส่งออก) คือเชลล์บิวด์อินซึ่งไม่ได้ทำไว้ในตารางกระบวนการและโดยส่วนขยายไม่อยู่ใน / proc / $ pid / cmdline / proc / $ pid / environ สามารถอ่านได้โดย UID ของเจ้าของกระบวนการเท่านั้น อาจเกิดความสับสนระหว่างระบบปฏิบัติการหรือรุ่นต่าง ๆ แหล่งที่มาต่าง ๆ (ล่าสุด) ทั่วทั้งเว็บบอกถึงความไม่มั่นคงของตัวแปรสภาพแวดล้อม แต่การตรวจสอบสปอตของรุ่นลินุกซ์ที่แตกต่างกันดูเหมือนจะบ่งบอกว่านี่เป็นไปไม่ได้ที่จะย้อนกลับไปอย่างน้อยปี 2007 มือที่จะทดสอบ) ใน Linux …

2
วิธีส่งออก LD_LIBRARY_PATH ไปยังผู้ใช้และบริการระบบทั้งหมด
ฉันต้องการส่งออกLD_LIBRARY_PATHไปยังบริการระบบและผู้ใช้ทั้งหมด บริการของระบบจะทำงานก่อนเข้าสู่ระบบดังนั้นจึง.bashrcไม่สามารถใช้งานได้ ทำอย่างไรจึงจะได้สิ่งนี้?

2
ใน `ขณะที่ IFS = อ่าน .. 'ทำไม IFS ถึงไม่มีผลกระทบ?
ฉันอาจมีบางอย่างผิดปกติ แต่ดูเหมือนว่าฉันเชื่อว่าการตั้งค่า IFS เป็นหนึ่งในคำสั่งในรายการที่ต้องทำ / เสร็จไม่มีผลอย่างแน่นอน IFS ภายนอก (ภายนอกwhileโครงสร้าง) จะมีชัยในตัวอย่างทั้งหมดที่แสดงในสคริปต์ด้านล่าง .. เกิดอะไรขึ้นที่นี่? ฉันเข้าใจผิดว่า IFS ทำอะไรในสถานการณ์นี้หรือไม่? ฉันคาดว่าผลลัพธ์การแบ่งอาร์เรย์จะเป็นไปตามที่แสดงในคอลัมน์ "คาดหวัง" #!/bin/bash xifs() { echo -n "$(echo -n "$IFS" | xxd -p)"; } # allow for null $IFS show() { x=($1) echo -ne " (${#x[@]})\t |" for ((j=0;j<${#x[@]};j++)); do echo -n "${x[j]}|" done echo …

2
การใช้คำสั่ง“ ส่งออก” คืออะไร?
ฉันสร้างตัวแปรสภาพแวดล้อมในหน้าต่างเทอร์มินัลหนึ่งและพยายามที่จะสะท้อนในหน้าต่างเทอร์มินัลอื่น ที่แสดงอะไร $TEST=hello หลังจากนั้นฉันส่งออกและลองอีกครั้งechoในหน้าต่างเทอร์มินัลอื่น ผลลัพธ์เหมือนเดิม export TEST แต่ถ้าฉันรันรหัสเดียวกันที่~/.profileตัวแปรล็อกอิน (ต่อท้ายรหัสไปยังไฟล์) สามารถใช้หน้าต่างเทอร์มินัลใดก็ได้ เกิดอะไรขึ้นที่นี่ อะไรคือความแตกต่างระหว่างการเรียกใช้งานโค้ดในเครื่องเทอร์มินัลและการเรียกใช้งานเหมือนกันเมื่อทำการล็อกอิน

1
การใช้ตัวแปรสภาวะแวดล้อมในไฟล์ tmux.conf
เป็นไปได้ที่จะใช้ตัวแปรสภาพแวดล้อมในไฟล์ tmux.conf หรือไม่? ฉันพยายามตั้งค่าเส้นทางเริ่มต้นเป็นตัวแปรสภาพแวดล้อม ขณะนี้สิ่งที่ฉันพยายามคือ: set -g default-path $MYVAR ต่อไปฉันต้องการตรวจสอบว่ามีการตั้งค่า $ MYVAR ไว้แล้วหรือไม่ดังนั้นฉันสามารถทำได้: if($MYVAR == "") set-environment -g MYVAR /somepath/ ความคิดใด ๆ


2
ไฟล์ dot ไม่ได้รับมาเมื่อรันคำสั่งผ่าน ssh
เมื่อฉันเรียกใช้โปรแกรมแบบโต้ตอบมันทำงานได้ดี: ssh somehost $ ~/some/path/somescript.py เมื่อฉันรันโปรแกรมผ่าน ssh โดยตรงมันไม่ทำงาน PYTHONPATHไม่ได้ตั้งค่าตัวแปรเนื่องจาก.bashrcไม่ได้มีการจัดหา ssh somehost ~/some/path/somescript.py ถ้าฉันวิ่งssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'ก็ใช้งานได้ดี แต่หลังจะไม่ทำงานสำหรับคนอื่น ๆ เช่นใช้ tcsh และไม่มี~/.bashrcเลย) คืออะไรคำสั่งเพื่อเรียกใช้สิ่งที่ผ่าน SSH บนโฮสต์ที่ทำงานสำหรับเปลือกหอยทั้งหมดอื่นได้หรือไม่

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