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

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

4
จะเปลี่ยนตัวแปรสภาวะแวดล้อมของโลแคลได้อย่างไร?
ฉันสร้างไฟล์การแปลภาษาท้องถิ่นen_US.utf8 , et_EE.iso88591และru_RU.utf8แล้ว ตอนนี้ถ้าฉันพยายามเปลี่ยนตัวแปรโลแคลใด ๆ เป็นru_RU.utf8หรือen_US.utf8ดังนั้นนี่จะไม่มีผลใด ๆ : # locale -a C en_US.utf8 et_EE et_EE.iso88591 POSIX ru_RU.utf8 # LC_TIME=ru_RU.utf8 # locale | grep LC_TIME LC_TIME="et_EE.iso88591" # LC_TIME="ru_RU.utf8" # locale | grep LC_TIME LC_TIME="et_EE.iso88591" # อย่างไรก็ตามหากฉันเปลี่ยนตัวแปรLANG =ดังนั้นตัวแปรอื่นทั้งหมดยกเว้นLANGUAGE =และLC_ALL =รับค่าของตัวแปรLANG = มีวิธีการแก้ไขตัวแปรแต่ละภาษาแยกกันหรือไม่? นอกจากนี้ฉันแก้ไขให้ถูกต้องว่าตัวแปรโลแคลไม่ใช่ตัวแปรเชลล์ปกติ แต่ต้องการพารามิเตอร์สำหรับยูทิลิตี้ของโลแคลอีกหรือไม่

3
ความแตกต่างระหว่าง env, setenv, export และเวลาที่จะใช้คืออะไร?
เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นว่าเรามี 3 ตัวเลือกในการตั้งค่าตัวแปรสภาพแวดล้อม: export envVar1=1 setenv envVar2=2 env envVAr3=3 หากมีวิธีอื่นโปรดบอกเรา เมื่อใดที่ฉันควรเลือกหนึ่งรายการมากกว่ารายการอื่น กรุณาแนะนำแนวทาง ในเรื่องของความเข้ากันได้ของเชลล์ซึ่งครอบคลุมมากที่สุด (ครอบคลุมภาษาของเชลล์มากกว่า) ฉันสังเกตเห็นคำตอบนี้แล้วแต่ฉันต้องการขยายคำถามด้วยenvและแนวทางการตั้งค่าการใช้งาน

2
Escape hash mark (#) ใน / etc / environment
ฉันกำลังเพิ่มตัวแปร env ไว้/etc/environmentแต่เนื่องจากค่าตัวแปรมี # sign สตริงจึงถูกสไทรพ์ MYSQL_PWD="something#no" ตอนนี้ถ้าฉันทำข้างต้นอัตราผลตอบแทนรหัสenv MYSQL_PWD=somethingฉันจะหนีแฮชได้อย่างไร ฉันลอง\ตัวละครแล้ว

6
รันสคริปต์ในเชลล์แบบไม่โต้ตอบหรือไม่
ฉันมีงาน cron ที่ใช้งานสคริปต์ เมื่อฉันรันสคริปต์ผ่านเชลล์แบบโต้ตอบ (ssh'ed to bash) มันใช้งานได้ดี เมื่อสคริปต์รันด้วยตัวเองผ่าน cron สคริปต์จะล้มเหลว ฉันเดาว่ามันใช้ตัวแปรสภาพแวดล้อมบางอย่างที่ตั้งค่าไว้ในเชลล์เชิงโต้ตอบ ฉันจะแก้ไขปัญหาสคริปต์และลบสิ่งเหล่านี้ หลังจากที่ฉันทำการเปลี่ยนแปลงฉันรู้ว่าฉันสามารถจัดคิวสคริปต์ใน cron เพื่อให้มันทำงานได้ตามปกติ แต่มีวิธีที่ฉันสามารถเรียกใช้สคริปต์จากบรรทัดคำสั่ง แต่บอกให้ทำงานตามที่ cron - เช่นในสภาพแวดล้อมที่ไม่โต้ตอบหรือไม่


2
วิธีตั้งค่าตัวแปรสภาวะแวดล้อมโกลบอลเมื่อบูตผ่านสคริปต์และให้พร้อมใช้งานสำหรับแอ็พพลิเคชันที่รันก่อนล็อกอิน?
ฉันมีบริการที่ทำงานตอนบู๊ตและในบริการนั้นจะเรียกสคริปต์ทุบตีในพื้นหลังที่ส่งออกตัวแปรสภาพแวดล้อมบางอย่าง ปัญหาที่ฉันมีคือตัวแปรสภาพแวดล้อมเหล่านั้นไม่ได้ถูกส่งไปยังพาเรนต์ของกระบวนการพื้นหลังดังนั้นทันทีที่สคริปต์ของฉันทำงานเสร็จพวกเขาก็หายไป นอกจากนี้หลังจากที่เรียกใช้สคริปต์แล้วบริการจะเรียกใช้สคริปต์อื่นที่เริ่มต้นแอปพลิเคชันที่ฉันมี แอปพลิเคชันนี้ต้องการการเข้าถึงตัวแปรสภาพแวดล้อมเหล่านั้น ระบบ RHEL ที่ฉันใช้งานนั้นมีไว้สำหรับผู้ใช้ที่ไม่เคยลงชื่อเข้าใช้ระบบจะบู๊ตและเริ่มแอปพลิเคชันเท่านั้น ฉันรู้ว่าตัวแปรสภาพแวดล้อมสำหรับกระบวนการผู้ปกครอง / เปลือกไม่สามารถจริงๆตั้งค่าได้โดยเปลือกกระบวนการพื้นหลังเด็กแม้ว่า ฉันต้องการวิธีการทำสิ่งนี้ผ่านสคริปต์ที่ถูกเรียกใช้โดยบริการของฉัน (ไม่จำเป็นต้องอยู่ในพื้นหลัง) ไม่ใช่โดยการเพิ่มเข้าไปในบริการของฉัน (ซึ่งไม่ได้ผลสำหรับฉัน) และไม่เก็บไว้ใน/etc/environmentหรือ.profileหรืออะไรเช่นนั้น ในบริการของฉันฉันพยายามเพิ่มตัวแปรสภาพแวดล้อม (ไม่ใช่สิ่งที่ฉันต้องการจะทำ): export TEST=192.168.1.1 ฉันลองสิ่งนี้ในบริการของฉันด้วย: TEST=192.168.1.1 export TEST=${TEST} ฉันพยายามเปลี่ยนวิธีการให้บริการของฉันเรียกสคริปต์ทุบตี: /bin/asdf/script & ฉันยังพยายามจัดหาสคริปต์เพื่อให้ทำงานในเชลล์เดียวกัน (ซึ่งฉันได้รับจากสิ่งนี้ ): . ./bin/asdf/script #I'm very confused why this didn't work ฉันพบสิ่งนี้ซึ่งดูน่าสนใจ แต่มันก็ไม่ได้แปลกในกรณีของฉัน

4
มุมมองที่สมบูรณ์ของตำแหน่งที่ตัวแปร PATH ถูกตั้งค่าเป็น bash
ฉันได้อ่านในสองสถานที่ที่PATHมีการตั้งค่า/etc/profileหรือ.profileไฟล์ที่อยู่ในบ้าน dir สถานที่เหล่านี้เป็นสถานที่เดียวที่ตั้งค่าเส้นทางหรือไม่ ฉันต้องการความเข้าใจที่ดีขึ้น ในไฟล์เช่นแสดงความคิดเห็นต่อไปนี้กล่าว/etc/profile "system-wide .profile file for the Bourne shell"นั่นหมายความว่าไฟล์โปรไฟล์เป็นไฟล์กำหนดค่าหลักสำหรับการทุบตี? ในไฟล์นั้นฉันไม่เห็นPATHการตั้งค่า var ทั้งหมด ใน.profileไฟล์ในโฮมไดเร็กทอรีมีบรรทัดนี้: PATH="$HOME/bin:$PATH" นั่นคือการรีเซ็ตPATHโดยรูปลักษณ์เพราะมันเชื่อมต่อ$PATHสตริงที่ตั้งค่าไว้เรียบร้อยแล้ว$HOME/bin:ใช่ไหม แต่ถ้าetc/profileและ~/.profileเป็นเฉพาะไฟล์การตั้งค่าPATHที่จะ$PATHมาจากในบรรทัดของรหัสที่หากยังไม่ได้กำหนดไว้ใน/etc/profile? ใครบางคนที่มีประสบการณ์สามารถโปรดอธิบายรายละเอียดเกี่ยวกับPATHตัวแปรได้อย่างละเอียดหรือไม่? ขอบคุณ!

4
ความแตกต่างในการใช้งานระหว่างตัวแปรเชลล์และตัวแปรสภาพแวดล้อมคืออะไร?
จริง ๆ แล้วฉันไม่รู้ว่ามีตัวแปรสองประเภทที่ฉันสามารถเข้าถึงได้จากบรรทัดคำสั่ง ทั้งหมดที่ฉันรู้คือว่าฉันสามารถประกาศตัวแปรเช่น: foo="my dear friends" bar[0]="one" bar[1]="two" bar[2]="three" หรือเข้าถึงพวกเขาด้วยเครื่องหมาย $ เช่น: echo $foo echo ${bar[1]} หรือใช้ตัวแปร inbuilt เช่น: echo $PWD PATH=$PATH:"/usr/bin/myProg" ตอนนี้ฉันได้ยินมาว่ามีตัวแปรสองประเภท (อย่างน้อย?) ตัวแปร: ตัวแปรเชลล์และตัวแปรสภาพแวดล้อม วัตถุประสงค์ของการมีสองประเภทที่แตกต่างกันคืออะไร? ฉันจะรู้ได้อย่างไรว่าตัวแปรประเภทใด ประเพณีทั่วไปสำหรับแต่ละคนมีอะไรบ้าง

3
ฉันจะตั้งค่า PATH หรือตัวแปรสภาพแวดล้อมอื่น ๆ เพื่อให้แอป X สามารถเข้าถึงได้อย่างไร
ฉันจะตั้งค่าตัวแปร env เพื่อให้ KDE จำแนกได้อย่างไร คุณจะตั้งค่าพา ธ ในระบบที่ไม่ใช่เชลล์ได้อย่างไร (KDE) ต่างจากคำถามสองข้อข้างต้นฉันต้องการทราบวิธีการทำสิ่งนี้กับ GNOME หรือดีกว่ายังมีวิธีการที่เป็นอิสระจากการจัดการหน้าต่าง สำหรับเปลือก / ~/.bashrcขั้วผมมักจะแก้ไข ฉันจะวางคำสั่งส่งออกได้ที่ใดเพื่อให้ตัวแปรสภาพแวดล้อมพร้อมใช้งานสำหรับแอปพลิเคชัน X ทั้งหมดไม่ว่าจะใช้ตัวจัดการหน้าต่างหรือไม่

6
การตรวจจับเซสชัน X ในสคริปต์ทุบตี (.bashrc ฯลฯ )
เมื่อเร็ว ๆ นี้ฉันใส่xset b off. bashrc ของฉัน ตอนนี้ฉันรำคาญกับข้อผิดพลาดที่ปรากฏขึ้นเมื่อฉันเข้าสู่ระบบผ่านทาง tty หรือผ่าน ssh คือนอกเซสชั่น X สิ่งแรกที่อยู่ในใจของฉันคือ[[ -z "$SOME_VAR" ]] && xset b off(เอาล่ะปรากฎว่าตัวแปรทดสอบที่ตั้งไว้และความว่างเปล่าเป็นคำถามที่แตกต่างกัน) แต่ SOME_VAR ใดที่ถูกต้อง ดังนั้นฉันจึงแยกsetเอาท์พุทของ tty และเอาต์พุตของ urxvt setเพื่อดูว่าตัวแปรใดถูกตั้งค่าเป็น X และหายไปใน tty ตามที่คาดไว้มีความแตกต่างค่อนข้างมาก (แสดงเฉพาะสิ่งที่ดูเหมือนเกี่ยวข้องกับฉัน): DESKTOP_SESSION DISPLAY GDMSESSION SESSION_MANAGER WINDOWID WINDOWPATH XAUTHORITY XDG_SESSION_COOKIE XDG_CONFIG_DIRS XDG_DATA_DIRS XDG_MENU_PREFIX ข้อใดที่ถูกต้องและเป็นสากลมากที่สุดในการทดสอบเพื่อตรวจสอบว่าฉันอยู่ในช่วง X หรือไม่? มีสิ่งใดบ้างที่สามารถใช้ข้ามแพลตฟอร์มและแพลตฟอร์มและสภาพแวดล้อมเดสก์ท็อปได้มากเท่าที่จะเป็นไปได้ หรือมีวิธีที่ดีกว่าการทดสอบตัวแปรสภาพแวดล้อม?

4
การเพิ่มเส้นทางไปยัง PATH โดยใช้ไวยากรณ์หลายบรรทัด
เท่าที่ฉันเข้าใจวิธีปกติในการเพิ่มพา ธ ไปยังPATHตัวแปรสภาพแวดล้อมคือการเชื่อมโยงพา ธ ที่คั่นด้วย:อักขระ ตัวอย่างเช่นถ้าผมต้องการที่จะเพิ่มอีกสามเส้นทางไป/my/path/1, /my/path/2และ/my/path/3ผมจะต้องทำดังนี้ PATH=$PATH:/my/path/1:/my/path/2:/my/path/3 ซึ่งอ่านไม่ง่าย มีวิธีการกำหนดหรือเพิ่มเส้นทางไปยังPATHตัวแปรโดยใช้ไวยากรณ์หลายบรรทัดหรือไม่? อาจจะใช้อาร์เรย์? ฉันกำลังมองหาสิ่งนี้: PATH = $PATH /my/path/1 /my/path/2 /my/path/3 ในกรณีที่มีวิธีแก้ปัญหาที่น่าสนใจที่เฉพาะเจาะจงของเชลล์ฉันกำลังมองหาวิธีแก้ปัญหาใน zsh

1
ฉันจะรันแอปพลิเคชัน GUI เป็นรูทโดยใช้ pkexec ได้อย่างไร
ฉันใช้Trisquel GNU / Linux-Libre ซึ่งมาพร้อมกับGnome3 Flashback Desktop Environment ฉันรู้ว่าฉันสามารถเรียกใช้แอปพลิเคชัน GUI เป็นรูทได้โดยsudo& gksudoแต่ฉันต้องการรู้ว่าฉันจะรันแอปพลิเคชัน GUI เป็นรูทด้วยความช่วยเหลือได้pkexecอย่างไร เมื่อฉันพยายามเรียกใช้gedit(หรือแอปพลิเคชันอื่นเช่น:) nautilusจากpkexec geditนั้นจะพร้อมท์ให้ใส่รหัสผ่านสำหรับการตรวจสอบสิทธิ์: - หลังจากป้อนรหัสผ่านแล้วจะออกโดยมีข้อผิดพลาด: - $ pkexec gedit error: XDG_RUNTIME_DIR not set in the environment. (gedit:6135): Gtk-WARNING **: cannot open display: ดังนั้นดูเหมือนว่ามีบางอย่างผิดปกติกับสภาพแวดล้อมการแสดงผล ฉันเคยลองด้วยDISPLAY=:0 pkexec geditแต่ไม่ได้ผล ข้อมูลต่อไปนี้ได้จากman pkexec: - สภาพแวดล้อมที่โปรแกรมจะเรียกใช้จะถูกตั้งค่าเป็นสภาพแวดล้อมที่ปลอดภัยและรู้จักน้อยที่สุดเพื่อหลีกเลี่ยงการฉีดรหัสผ่าน LD_LIBRARY_PATH หรือกลไกที่คล้ายกัน นอกจากนี้ตัวแปรสภาพแวดล้อม PKEXEC_UID ถูกตั้งค่าเป็น id …

1
เป็นเรื่องปกติที่ตัวแปร LD_LIBRARY_PATH หายไปจากสภาพแวดล้อมหรือไม่
ฉันพบโดยบังเอิญว่าใน Debian Jessie ของฉันไม่มีLD_LIBRARY_PATHตัวแปร (ที่แน่นอนprintenv | grep LDแสดงให้เห็นว่าไม่มีอะไรเกี่ยวข้องกับ linker และecho "$LD_LIBRARY_PATH"แสดงอะไรเลย) นี่เป็นกรณีในตัวจำลองเทอร์มินัล x ( ซึ่งอาจชัดเจนเนื่องจาก setgid ) และในเทอร์มินัลพื้นฐาน ( Ctrl+Alt+F1) ฉันรู้ว่าLD_LIBRARY_PATH อาจจะถือว่าไม่ดีดังนั้น Debian อาจปิดกั้นมันอย่างใด แต่ในมืออื่น ๆ มีไม่กี่ไฟล์ในที่มีบางไดเรกทอรีที่จะเพิ่ม/etc/ld.so.conf.d/ LD_LIBRARY_PATHไม่มีไฟล์ rc ของฉัน (ที่ฉันรู้) ยุ่งกับLD_LIBRARY_PATHอย่างใดอย่างหนึ่ง ทำไมฉันไม่เห็นLD_LIBRARY_PATHตัวแปร?

2
ฉันจะสร้างสภาวะแวดล้อม clean shell สำหรับการใช้งานชั่วคราวได้อย่างไร?
ฉันเป็นผู้ตอบคำถามบ่อยในเว็บไซต์ถาม - ตอบยอดนิยมของ Unix และในหลาย ๆ คำตอบของฉันฉันให้ตัวอย่างโดยใช้bashเชลล์ อย่างไรก็ตามในแต่ละครั้งที่ฉันทำสิ่งนี้ฉันจะต้องทำกระบวนการสร้างสภาพแวดล้อมที่สะอาดด้วยตนเองเพื่อให้แน่ใจว่าทุกขั้นตอนมีการบันทึกและจัดทำเอกสาร ฉันจะทำให้กระบวนการนี้ตรงไปตรงมามากขึ้นได้อย่างไร ฉันกำลังมองหาการพิมพ์คำสั่งเดียวและรับสภาพแวดล้อมที่สะอาดและลบร่องรอยทั้งหมดของสภาพแวดล้อมชั่วคราวหลังจากที่ฉันทำเสร็จแล้ว

2
การตั้งค่าสภาพแวดล้อมที่ถูกต้อง
ฉันใช้ zsh และ gdm เพื่อเรียกใช้ gnome เมื่อไม่นานมานี้ฉันค้นพบว่าตัวแปรไม่ได้ตั้งอย่างถูกต้อง ตัวอย่างเช่น LANG / LC_ALL ไม่ถูกต้อง ( ""แทนen_GB.UTF-8) ผมแยก.zshrcเข้าและ.zshrc .profileในหลังฉันตั้งค่าตัวแปรสภาพแวดล้อม แต่ฉันจะตั้งค่าตัวแปรได้อย่างไรก่อนเริ่มเซสชัน ฉันพยายามเลือกไม่กี่ข้อ ( .xinitrc, .xsessionrc) แต่ดูเหมือนไม่มีใครทำงาน แก้ไขชี้แจง - ผมใช้.profileและตนเอง.zshrcมาไว้ใน มันไม่เปลี่ยนคำถาม

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