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

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

2
ตัวแปรโลคัลใน zsh: อะไรคือสิ่งที่เทียบเท่ากับ bash ของ“ export -n” ใน zsh
ฉันพยายามที่จะ จำกัด ขอบเขตของตัวแปรให้กับเชลล์และไม่มีลูกให้ดูใน zsh ตัวอย่างเช่นฉันพิมพ์สิ่งนี้ใน. zshrc: GREP_OPTIONS=--color=always แต่ถ้าฉันรันเชลล์สคริปต์ด้วยสิ่งต่อไปนี้: #!/bin/bash echo $GREP_OPTIONS ผลลัพธ์คือ: --color=always ในขณะที่ฉันต้องการให้เป็นโมฆะ (เชลล์สคริปต์ด้านบนไม่ควรเห็นตัวแปร GREP_OPTIONS เลย) ในทุบตีใครจะพูดว่า: export -n GREP_OPTIONS=--color=alwaysซึ่งจะป้องกันไม่ให้เกิดเหตุการณ์ ฉันจะทำสิ่งนี้ให้สำเร็จใน zsh ได้อย่างไร?

2
เชลล์แบบโต้ตอบที่มีสภาพแวดล้อมเหมือนกับ cron
ฉันตระหนักถึงข้อผิดพลาดมากมายในโลกมหัศจรรย์ของ crontabs แต่บางครั้งมันจะช่วยแก้ไขปัญหาได้มากมายเมื่อคุณมีวิธีที่ชาญฉลาดในการป้อนเชลล์แบบโต้ตอบ (ทุบตี) ที่มีสภาพแวดล้อมที่เหมือนกันทุกประการเหมือนกับเมื่อเชลล์สคริปต์ทำงานจาก crontab ตอนนี้ฉันคิดว่าตัวเอง/bin/openvt -c8 -- /bin/bash --noprofile -lแต่ต้องใช้สิทธิ์รูทกำหนดตัวแปรมากเกินไปและsu myusernameตั้งค่าสภาพแวดล้อมพิเศษได้ง่าย มีใครรู้วิธีที่จะเริ่มเชลล์ bash แบบอินเตอร์แอคทีฟที่มีสภาพแวดล้อมเหมือนกันกับ cron และไม่ต้องการสิทธิ์รูทบน Kubuntu? โบนัสเมื่อใช้งานในเซสชัน ssh ใน GUI และในระบบปฏิบัติการต่อไปนี้อย่างน้อยหนึ่งอย่างเช่น HP-UX, Solaris และ AIX

1
คุณตั้งค่าสภาพแวดล้อมสำหรับ es อย่างไร
ฉันได้เล่นกับesในสองสามวันที่ผ่านมาและมัน (เช่น rc) มีการเล่นโวหาร / คุณลักษณะที่จะเรียกใช้สคริปต์เริ่มต้นเท่านั้น ( .esrc) เมื่อเข้าสู่ระบบ วิธีปกติในการเรียกใช้รหัสในแต่ละเซสชันแบบโต้ตอบคือการใส่รหัสนั้นลงใน%promptฟังก์ชัน แน่นอนว่าไม่มี%promptฟังก์ชั่นหากes -lไม่เคยทำงาน ดังนั้นคำถาม: คุณจะตั้งค่าสภาพแวดล้อมการเข้าสู่ระบบอย่างไรเมื่อคุณเข้ามาผ่านทาง gdm หรือคล้ายกันซึ่งแหล่งที่มาเฉพาะ. profile (หรือ. xprofile, .xsession ฯลฯ ) สิ่งที่ดีที่สุดที่ฉันคิดไว้คือ: if [ -f "$HOME/.esrc" ]; then eval "`es -l <<-x sh <<<'export -p' x`" fi ซึ่งดูเหมือน ... น่ากลัว มีวิธีใดที่ดีกว่านี้?

3
ฉันจะยกเลิกการส่งออกตัวแปรโดยไม่สูญเสียมูลค่าได้อย่างไร
สมมติว่าฉันส่งออกตัวแปร: foo=bar export foo ตอนนี้ฉันต้องการยกเลิกการส่งออก นั่นคือจะบอกว่าถ้าผมทำผมก็ไม่ควรจะได้รับsh -c 'echo "$foo"' ไม่ควรแสดงในสภาพแวดล้อมของเลย เป็นเพียงตัวอย่างวิธีง่ายๆในการแสดงการมีอยู่ของตัวแปร คำสั่งอาจเป็นอะไรก็ได้ - มันอาจเป็นสิ่งที่พฤติกรรมของมันได้รับผลกระทบเพียงแค่การปรากฏตัวของตัวแปรในสภาพแวดล้อมของมันbarfoosh -csh -c ฉันสามารถ: unset ตัวแปรและสูญเสียมัน ลบออกโดยใช้envสำหรับแต่ละคำสั่ง:env -u foo sh -c 'echo "$foo"' ทำไม่ได้ถ้าคุณต้องการใช้เชลล์ปัจจุบันต่อไปอีกซักพัก เป็นการดีที่ฉันต้องการเก็บค่าของตัวแปร แต่ไม่ให้ปรากฏขึ้นในกระบวนการลูกไม่ได้เป็นตัวแปรว่างเปล่า ฉันเดาว่าฉันสามารถทำได้: otherfoo="$foo"; unset foo; foo="$otherfoo"; unset otherfoo ความเสี่ยงนี้เกิดขึ้นotherfooหากมีอยู่แล้ว นั่นเป็นวิธีเดียวหรือไม่ มีวิธีมาตรฐานหรือไม่?

6
วิธีตั้งค่า Ruby GEM_HOME และ GEM_PATH
ฉันเป็นผู้ใช้ NOVICE ของ Linux และใช้ Linux mint 17.1 ฉันติดตั้ง Linux Mint 20 ครั้งใน 3 วันล่าสุดสำหรับปัญหานั้น แต่ไม่สามารถแก้ไขได้ ฉันพยายามติดตั้ง ruby ​​บนรางโดยใช้ rvm สิ่งที่เกิดขึ้นคือถ้าเริ่มการติดตั้ง Linux ใหม่และลองติดตั้ง gem และ ruby ​​และสิ่งต่าง ๆ ในเซสชันเทอร์มินัลหนึ่งติดตั้งสำเร็จแล้วทันทีที่ฉันปิดเซสชันเทอร์มินัล . ด้วยการติดตั้งใหม่มากกว่า 20 ครั้งในช่วง 3 วันที่ผ่านมาฉันได้ค้นหาบนเว็บด้วย ฉันได้รับคำสั่งให้ใส่ตัวแปรสภาพแวดล้อมใน/etc/environmentพา ธ echoed ในเซสชันนั้นและวาง/etc/environmentไฟล์นั้นไว้ในไฟล์ แม้ตอนนี้ฉันไม่ได้รับอัญมณีที่ติดตั้ง เมื่อฉันพิมพ์rvm -vฉันได้รับข้อผิดพลาดดังต่อไปนี้ Warning: PATH set to RVM ruby but GEM_HOME …

2
ล้างตัวแปรทั้งหมดโดยไม่ปิดเทอร์มินัล
ฉันต้องการทราบวิธีล้างตัวแปรทั้งหมดที่ฉันกำหนดไว้ใน command prompt โดยไม่ปิดเทอร์มินัล ตัวอย่างเช่นถ้าฉันตั้งค่าตัวแปรใน command prompt เป็น: $ a=1 ตอนนี้ฉันต้องการลบตัวแปร$a(และตัวแปรอื่น ๆ อีกมากมายที่กำหนดในลักษณะที่คล้ายกัน) โดยไม่ต้องปิดสถานี ฉันสามารถใช้unsetแต่มันจะวุ่นวายถ้าไม่มีขนาดใหญ่ ของตัวแปร

1
ฉันจะตั้งค่าตัวเลือก Java ทั่วโลกได้ที่ไหน
ฉันมีความน่ากลัวแบบอักษรที่ไม่ถูกต้องแสดงผลในโปรแกรม Java เช่นและjabref rubymineสิ่งนี้สามารถแก้ไขได้โดยการวิ่ง _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on' jabref ฉันเข้าใจว่าฉันสามารถส่งออกตัวเลือก Java เหล่านี้เป็นตัวแปรสภาพแวดล้อมและเปิดโปรแกรมจากบรรทัดคำสั่ง อย่างไรก็ตามมีวิธีการตั้งค่าตัวเลือกเหล่านี้ทั่วโลกเพื่อให้โปรแกรม Java ทั้งหมดรู้จักพวกเขาไม่ว่าพวกเขาจะเปิดตัว? ฉันยังรู้ว่าฉันสามารถแก้ไข*.desktopไฟล์ทั้งหมดสำหรับโปรแกรม Java ของฉัน แต่ฉันกำลังมองหาโซลูชันระดับโลก ฉันใช้java-7-openjdkกับ Arch Linux (FWIW สิ่งนี้เคยโอเคกับการติดตั้งjre7-openjdk-headless-infinality ที่เสียแล้ว)

2
ไม่พบคำสั่ง bash setenv
เมื่อฉันใช้คำสั่งดังต่อไปนี้ setenv CLASSPATH /path/mysql-connector-java-ver-bin.jar:$CLASSPATH ข้อผิดพลาดคือ bash setenv command is not found เมื่อฉันค้นหาเส้นทางของ setenv โดยคำสั่งใดฉันพบเส้นทางดังต่อไปนี้ (/usr/kerberos/sbin:/usr/kerberos/bin:/home/ec2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/ec2/bin:/root/bin)

1
ทำไมฉันไม่สามารถพิมพ์ตัวแปรที่ฉันเห็นได้ในผลลัพธ์ของ env
ฉันสนใจที่จะตั้งค่าตัวแปรสภาพแวดล้อมของเชลล์อินสแตนซ์หนึ่งจากอีกอันหนึ่ง ฉันจึงตัดสินใจทำการวิจัย หลังจากอ่านคำถามจำนวนหนึ่งเกี่ยวกับเรื่องนี้ฉันตัดสินใจที่จะทดสอบ ผมสองกระบอกเปลือกหอย A และ B (PID 420) zshทั้งการทำงาน จาก AI เชลล์วิ่งต่อไปนี้ sudo gdb -p 420 (gdb) call setenv("FOO", "bar", 1) (gdb) detach จาก shell B เมื่อฉันรันenvฉันเห็นตัวแปร FOO ถูกตั้งค่าด้วยค่าบาร์ นี่ทำให้ฉันคิดว่า FOO ได้รับการเริ่มต้นได้สำเร็จในสภาพแวดล้อมของ shell B อย่างไรก็ตามถ้าฉันพยายามพิมพ์ FOO ฉันจะได้รับบรรทัดว่างซึ่งหมายความว่าไม่ได้ตั้งค่าไว้ สำหรับฉันมันรู้สึกเหมือนมีความขัดแย้งที่นี่ สิ่งนี้ได้รับการทดสอบทั้งในระบบ Arch GNU / Linux ของฉันและ Ubuntu VM ฉันยังทดสอบสิ่งนี้bashว่าตัวแปรไม่ได้แสดงใน env แม้ว่ามันจะน่าผิดหวังสำหรับฉัน …

1
Bash: มีเซสชันที่ซ้อนกันอยู่ลึกแค่ไหน?
สมมติว่าฉันเริ่มต้นbashเชลล์ ... จากนั้นbashเซสชั่นอื่นจากภายในเชลล์นั้น ... แล้วbashเซสชั่นอื่นจากภายในเซสชั่นนั้น ... จากนั้นbashเซสชั่นอื่นจากภายในเซสชั่นนั้น ... (คูณ N) เป็นต้น ในการออกจากเซสชัน N ทั้งหมดฉันต้องพิมพ์exitN ครั้ง ฉันจะรู้ได้อย่างไรว่าตัวฉันเองซ้อนอยู่ลึกแค่ไหนในเซสชั่น bash ใด นึกคิดฉันกำลังมองหาตัวแปรสภาพแวดล้อมบางอย่างที่คล้ายกับ$STYช่วงหน้าจอ

3
ส่งต่อฟังก์ชันและตัวแปรไปยัง sudo su - <user> << EOF
ฉันได้ประกาศฟังก์ชั่นและตัวแปรใน bash / ksh และฉันต้องการส่งต่อไปยังsudo su - {user} &lt;&lt; EOF: #!/bin/bash log_f() { echo "LOG line: $@" } extVAR="yourName" sudo su - &lt;user&gt; &lt;&lt; EOF intVAR=$(date) log_f ${intVAR} ${extVAR} EOF

1
ทำไมทุบตีถึงทำให้แจง / เรียกใช้เนื้อหาในตัวแปรสภาพแวดล้อม
ShellShockข้อผิดพลาดในการทำงานทุบตีโดยวิธีการของตัวแปรสภาพแวดล้อม สุจริตฉันประหลาดใจด้วยความจริงที่ว่ามีคุณสมบัติเช่น: "การส่งผ่านนิยามฟังก์ชันผ่าน env vars" ดังนั้นคำถามนี้ในขณะที่อาจไม่ได้กำหนดอย่างสมบูรณ์คือการขอตัวอย่างหรือกรณีที่จำเป็นต้องมีคุณสมบัตินี้? โบนัส. เชลล์อื่น ๆ zsh, dash ฯลฯ มีคุณสมบัตินี้ด้วยหรือไม่?

2
ทำไมความสามารถในการกำหนดฟังก์ชั่นในตัวแปรด้านสิ่งแวดล้อมจึงไม่ใช่ความเสี่ยงด้านความปลอดภัยในตัวเอง?
ตามที่ฉันเข้าใจโดยทั่วไปถือว่าปลอดภัยที่จะให้ทุกคนให้ข้อมูลที่จะถูกเก็บไว้ในตัวแปรด้านสิ่งแวดล้อม ช่องโหว่ shellshock เป็นปัญหาที่นี่เพราะมันหมายความว่าโค้ดท้ายคำนิยามฟังก์ชั่นภายในตัวแปรสภาพแวดล้อมจะถูกดำเนินการเมื่ออินสแตนซ์ใหม่ของ bash เปิดตัวและคุณไม่ต้องการให้ใครเรียกใช้รหัสใด ๆ บนเซิร์ฟเวอร์ของคุณ . เห็นได้ชัดว่านิยามของฟังก์ชันเองนั้นไม่ใช่ความเสี่ยงด้านความปลอดภัยและได้รับอนุญาตเพราะจะต้องมีการเรียกใช้อย่างชัดเจนเพื่อให้โค้ดทำงาน คำถามของฉันคือทำไมผู้ใช้lsที่ไม่ประสงค์ดีไม่สามารถกำหนดฟังก์ชั่นโดยมีรหัสที่เป็นอันตรายเช่นเดียวกับคำสั่งทั่วไปแล้วหวังว่าสคริปต์ (หรือสิ่งที่กำลังเรียกใช้) จะใช้คำสั่งนี้ในบางจุด? ตัวอย่างของสิ่งที่ฉันมีอยู่ในใจ: $ export ls='() { echo "doing bad things..."; }' $ bash -c ls doing bad things...

1
เหตุใดตำแหน่งของตัวแปรสภาพแวดล้อมจึงแตกต่างกันมาก
อ่านหนังสือแฮ็ค: ศิลปะแห่งการเอารัดเอาเปรียบโดย Jon Erickson ฉันพยายามประมาณที่อยู่ของตัวแปรสภาพแวดล้อมSHELLCODEเพื่อใช้ประโยชน์จากโปรแกรม ทุกครั้งที่ฉันวิ่งgetenv("SHELLCODE");ไปหาที่ตั้งผลลัพธ์จะแตกต่างกันโดยสิ้นเชิง แยกจากเปลือกของฉัน: &gt; for i in $(seq 10); do ./a.out SHELLCODE; done SHELLCODE is at 0xff9ab3a3 SHELLCODE is at 0xffcdb3a3 SHELLCODE is at 0xffb9a3a3 SHELLCODE is at 0xffa743a3 SHELLCODE is at 0xffdb43a3 SHELLCODE is at 0xfff683a3 SHELLCODE is at 0xffef03a3 SHELLCODE is at 0xffc1c3a3 SHELLCODE …

2
รับค่าตัวแปรสภาพแวดล้อมใน systemd Docker container
ฉันมีหางภาชนะทำงาน systemd ฉันต้องการส่งผ่านตัวแปรสภาพแวดล้อมไปยังแอปพลิเคชันภายใต้ เมื่อฉันเริ่มต้นจากภายใน systemd หาง ( /sbin/initเป็นบรรทัดคำสั่ง), หาง exposes ตัวแปรเพื่อ systemd แต่ไม่ได้สัมผัสกับบริการรับเลี้ยงเด็ก ถ้าฉันเพิ่มsystemd.setenv=...ใน cmdline ตัวแปรจะถูกส่งผ่าน ฉันกำลังมองหาทางออกที่สะอาดกว่า ฉันจะเปิดเผยตัวแปรสภาพแวดล้อมที่ส่งผ่านไป/sbin/initยังแอปพลิเคชันที่เริ่มต้นได้อย่างไร % docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged -ti \ -e VAR1=1 motiejus/systemd_fedora20 \ init systemd.setenv=VAR2=2 ... Welcome to Fedora 20 (Heisenbug)! ... [ OK ] Reached target Multi-User System. [root@740690365eb0 ~]# env | …

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