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

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

2
เหตุใดฉันจึงไม่สามารถใช้ตัวแปรเป็นคำนำหน้าให้กับคำสั่งเพื่อตั้งค่าตัวแปรสภาพแวดล้อมได้
โดยปกติแล้วมันเป็นไปได้ที่จะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งโดยนำหน้ามันเช่น: hello=hi bash -c 'echo $hello' ฉันรู้ด้วยว่าเราสามารถใช้ตัวแปรเพื่อทดแทนส่วนใดส่วนหนึ่งของการเรียกใช้คำสั่งดังนี้: $ cmd=bash $ $cmd -c "echo hi" # equivalent to bash -c "echo hi" ฉันประหลาดใจมากที่พบว่าคุณไม่สามารถใช้ตัวแปรเพื่อนำหน้าคำสั่งเพื่อตั้งค่าตัวแปรสภาพแวดล้อม กรณีทดสอบ: $ prefix=hello=hi $ echo $prefix # prints hello=hi $ $prefix bash -c 'echo $hello' hello=hi: command not found เหตุใดฉันจึงไม่สามารถตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้ตัวแปรได้ ส่วนนำหน้าเป็นส่วนพิเศษหรือไม่? ฉันสามารถทำให้มันทำงานได้โดยใช้ eval ข้างหน้า แต่ฉันก็ยังไม่เข้าใจว่าทำไม ฉันใช้ทุบตี 4.4

2
%% หมายถึงอะไรในชื่อฟังก์ชัน
เมื่อดูที่ผลลัพธ์ของenvฉันพบว่ามีฟังก์ชั่นต่อไปนี้ BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh } เนื้อหาของไฟล์ /usr/share/mc/mc-wrapper.sh มีดังต่อไปนี้ MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE สิ่งที่ทำ%%อักขระหมายถึงในชื่อฟังก์ชัน? พวกเขาทำให้มันเป็นฟังก์ชั่นที่เรียกใช้ในกรณีที่เฉพาะเจาะจงหรือพวกเขาอนุญาตให้ฉันเรียกมันแตกต่างจากฟังก์ชั่นอื่น ๆ ? ฉันใช้ …

3
ค่าชั่วคราวของสคริปต์ bash ในคำสั่ง
ชอบคำสั่งด้านล่าง if true; then IFS=":" read a b c d e f <<< "$test" หนังสือบอกว่าเมื่อใช้คำสั่งการกำหนดค่า ( IFS ":") ก่อนคำสั่งหลัก ( read a b c d e f <<< "$value") ค่าของมันจะมีผลกับคำสั่งหลักชั่วคราว ดังนั้นการใช้คำสั่งคั่นread: แต่เช่นเดียวกับคำสั่งนี้ if true; then HOME="hello" echo "$HOME" ข้อความสะท้อนไม่ได้เป็นสวัสดี ความหมายที่แท้จริงของคำสั่งข้างต้นคืออะไร?

2
ตั้งค่าภาษาสำหรับการใช้งานโปรแกรมเดียว
ทำตัวอย่าง C ++ i18n gettext ()“ hello world” ตั้งค่าตัวแปรสภาพแวดล้อม LANG โดยใช้การส่งออกก่อนดำเนินการโปรแกรม (Linux): export LANG=es_MX.utf8 ./hellogt มีวิธีการตั้งค่าภาษาในขณะดำเนินการ hellogt เช่นอาร์กิวเมนต์บรรทัดคำสั่งหรือไม่ สิ่งนี้จะเป็นประโยชน์สำหรับโปรแกรมทดสอบ

2
เชลล์ posix: รายการพิมพ์ของชื่อตัวแปรสภาพแวดล้อม (ไม่มีค่า)
ในวิธีที่เข้ากันได้กับ posix ที่ทำงานกับการใช้งานหลายอย่างฉันจะพิมพ์รายการตัวแปรสภาพแวดล้อมที่กำหนดไว้ในปัจจุบันโดยไม่มีค่าได้อย่างไร ในการใช้งานบางอย่าง (mksh, freebsd / bin / sh) เพียงแค่ใช้exportด้วยตัวเองจะพอดีกับการเรียกเก็บเงิน: $ export FOO2 FOO แต่สำหรับการปรับใช้อื่น ๆ (bash, zsh, dash) exportก็แสดงค่าเช่นกัน ด้วย bash ตัวอย่างเช่น: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ …

3
มี Unix เทียบเท่ากับตัวแปรสภาพแวดล้อม Windows PATHEXT
ฉันสงสัยว่ามี Unix เทียบเท่ากับตัวแปรสภาพแวดล้อมของ Windows PATHEXTหรือไม่ สำหรับผู้ที่ไม่มีพื้นหลัง Windows: การเพิ่มคำต่อท้ายไฟล์เพื่อPATHEXTให้ฉันสามารถเรียกใช้สคริปต์โดยไม่ต้องพิมพ์คำต่อท้ายใน cmd.exe ตัวอย่างเช่นบนคอมพิวเตอร์ Windows ของฉัน PATHEXT มีคำต่อท้าย.plและเมื่อฉันต้องการรันสคริปต์ Perl ใน cmd.exe ฉันสามารถพิมพ์my-scriptและเรียกใช้งานได้ แต่ในการที่จะรันสคริปต์เดียวกันด้วยการทุบตีฉันต้องเขียนชื่อเต็ม: my-script.pl. ตั้งแต่ฉันทำงานทั้ง Windows และ Unix ในปัจจุบันฉันเกือบจะตกหลุมพรางของการลืมพิมพ์คำต่อท้ายเมื่อไปที่กล่อง Unix อีกครั้ง

3
การมอบหมายแบบมีเงื่อนไขขึ้นอยู่กับตัวแปรสภาพแวดล้อม
ในสคริปต์ทุบตีฉันกำลังกำหนดตัวแปรโลคัลเพื่อให้ค่าขึ้นอยู่กับตัวแปรสภาพแวดล้อมโกลบอล ( $MYAPP_ENV) if [ "$MYAPP_ENV" == "PROD" ] then SERVER_LOGIN=foobar123@prod.example.com else SERVER_LOGIN=foobar987@test.example.com fi มีวิธีที่สั้นกว่า (ยังสะอาด) ในการเขียนการบ้านข้างต้นหรือไม่? (สมมุติว่าใช้ตัวดำเนินการตามเงื่อนไข / แบบอินไลน์บางอย่างถ้า)

2
คุณจะสร้าง RPROMPT ใน zsh ได้อย่างไรเมื่ออัพเดททุกครั้ง
ฉันRPROMPTถูกตั้งค่าให้แสดงข้อมูล SVN vcs_infoใช้ RPROMPT=${vcs_info_msg_0_}มันอ่าน เรียกว่าใช้vcs_info precmd()อย่างไรก็ตาม RPROMPT จะไม่อัปเดตเมื่อฉันเปลี่ยนไดเรกทอรี มันทำงานได้ก็ต่อเมื่อฉันเรียกใช้พรอมต์อีกครั้ง (โดยแหล่งที่มา ~ / .zshrc หรือพรอมต์) และจะไม่เปลี่ยนแปลงตาม chdir เว้นแต่ว่าฉันจะเรียกใช้พรอมต์อีกครั้ง มีวิธีใดบ้างที่จะเปลี่ยนพฤติกรรมนี้

2
ทำไม #! / usr / bin / env ทุบตีไม่ทำงานในระบบของฉัน
bad interpreterฉันวิ่งเข้าไปในบางประเด็นที่เมื่อทำงานสคริปต์การติดตั้งบางอย่างที่พวกเขาบ่น ดังนั้นฉันจึงทำตัวอย่างเล็กน้อย แต่ไม่สามารถเข้าใจได้ว่าปัญหาคืออะไรดูด้านล่าง #!/usr/bin/env bash echo "hello" การเรียกใช้สคริปต์ข้างต้นส่งผลให้เกิดข้อผิดพลาดดังต่อไปนี้ [root@ech-10-24-130-154 dc-user]# ./junk.sh bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory /usr/bin/envไฟล์ที่มีอยู่ดูด้านล่าง: [root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env [root@ech-10-24-130-154 dc-user]# ls -l /bin/env -rwxr-xr-x 1 root root 23832 Jul …

3
เนื้อหาของไฟล์. bash_history ใช้เวลานานเท่าใด
ฉันจะแก้ไขเนื้อหาของbash_historyไฟล์ของฉันได้อย่างไร? ค่าหรือตัวแปรใดที่ควบคุมว่าประวัติศาสตร์จะอยู่ได้นานแค่ไหน มีสิ่งอื่นใดอีกบ้างที่ฉันสามารถเปลี่ยนเพื่อให้การควบคุมประวัติ BASH ของฉันดีขึ้นหรือไม่?

4
ฉันจะทำให้เชลล์นามแฝงพร้อมใช้งานได้อย่างไรเมื่อ shelling จาก Vim
ในตัวฉัน.zshrcฉันประกาศนามแฝงบางอย่าง เช่นwhich dbstartแสดงเนื้อหาของนามแฝงนั้น ถ้าฉันเปิดเป็นกลุ่มจากเชลล์นั้นมันเป็นกระบวนการลูก :! some_commandในกลุ่มผมสามารถเรียกใช้คำสั่งเปลือก ถ้าฉันทำ:! echo $0เพื่อดูว่าเชลล์ Vim ใช้อะไรอยู่มันจะส่งเอาต์พุต '/ bin / zsh' อย่างไรก็ตามชื่อแทนของฉันไม่สามารถใช้งานได้ที่นั่น ฉันจะทำให้เชลล์ปกติของฉันพร้อมใช้งานได้อย่างไรเมื่อฉัน shell ออกจาก Vim สองความคิด: อย่างใดEXPORTนามแฝงจากเปลือกเดิมเพื่อกระบวนการของเด็กvimและอีกครั้งเพื่อดำเนินการเปลือกเด็ก กำหนดค่า Vim ให้อ่านของฉัน.zshrcเมื่อสร้าง subshells

3
`_` ตัวแปรสภาพแวดล้อมของ bash shell เมื่อใด
Bash Manual พูดว่า (manpage, การเน้นของฉัน): เมื่อ Bash เรียกใช้คำสั่งภายนอกตัวแปร$_จะถูกตั้งค่าเป็นชื่อพา ธ เต็มของคำสั่งและส่งไปยังคำสั่งนั้นในสภาพแวดล้อมของมัน และ ( พารามิเตอร์พิเศษ ): _ ( $_ขีดล่าง.) ที่การเริ่มต้นเชลล์ตั้งค่าชื่อพา ธ สัมบูรณ์ที่ใช้เพื่อเรียกใช้เชลล์หรือสคริปต์เชลล์ที่จะดำเนินการตามที่ส่งผ่านในสภาพแวดล้อมหรือรายการอาร์กิวเมนต์ ต่อจากนั้นขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้าหลังจากการขยาย นอกจากนี้ยังตั้งเป็นชื่อพา ธ แบบเต็มที่ใช้เพื่อเรียกใช้คำสั่งแต่ละคำสั่งที่ดำเนินการและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น เมื่อตรวจสอบเมลพารามิเตอร์นี้เก็บชื่อของไฟล์เมล ใน bash shell ฉันรัน: $ bash $ export | grep '_=' ตามคู่มือ_ควรเป็นตัวแปรสภาพแวดล้อมของ bash shell ใหม่ exportควรจะส่งออกทั้งหมดตัวแปรสภาพแวดล้อมของเปลือกทุบตีใหม่ _แต่มันไม่ออก ดังนั้นฉันสงสัยว่า_ตัวแปรสภาพแวดล้อมของ bash shell ใหม่เป็นอย่างไร ที่จริงแล้วใน bash shell ใด …

3
ตัวแปรเชลล์กับตัวแปรสภาพแวดล้อมใดที่ต้องการถ้าทั้งคู่มีชื่อเหมือนกัน?
พิมพ์ข้อความต่อไปนี้ใน Bash: env | grep USER และ set | grep USER ให้ชื่อผู้ใช้เดียวกันทั้งสองครั้ง ฉันจะรู้ได้อย่างไรเช่นเมื่อพิมพ์echo $USERถ้าเชลล์หรือตัวแปรสภาพแวดล้อมถูกแสดง?

3
ตัวแปรสภาพแวดล้อมไม่ได้ถูกตั้งค่าเมื่อฟังก์ชั่นของฉันถูกเรียกในไปป์ไลน์
ฉันมีฟังก์ชันแบบเรียกซ้ำต่อไปนี้เพื่อตั้งค่าตัวแปรสภาพแวดล้อม: function par_set { PAR=$1 VAL=$2 if [ "" != "$1" ] then export ${PAR}=${VAL} echo ${PAR}=${VAL} shift shift par_set $* fi } ถ้าฉันเรียกมันด้วยตัวมันเองมันจะตั้งค่าตัวแปรและ echoes เป็น stdout: $ par_set FN WORKS FN=WORKS $ echo "FN = "$FN FN = WORKS การเปลี่ยนเส้นทาง stdout ไปยังไฟล์ยังใช้งานได้: $ par_set REDIR WORKS > out cat …

2
การใช้ตัวแปรสภาวะแวดล้อมในคำสั่งเชลล์แถบสถานะของ Tmux
ฉันกำลังพยายามที่จะสร้าง tmux US Eastern Time :: UTC :: Central European Timeแถบสถานะซึ่งแสดงให้เห็นว่าสามเขตเวลา: การใช้TZตัวแปรสภาพแวดล้อมทำให้dateคำสั่งแสดงเวลาในเขตเวลาที่กำหนด ฉันพยายามทำด้วยการตั้งค่า tmux.conf นี้: set -g status-right "#[fg=white]#S #I:#P #[fg=yellow]:: %d %b %Y #[fg=green]:: #(TZ=America/New_York date +%H:%M) :: #(date -u +%H:%M) UTC :: #(TZ=Europe/Belgrade date +%H:%M)" แต่ผ่านไม่ทำงานภายในของTZ=foo #(…)(ฉันได้รับเซิร์ฟเวอร์dateแทนสิ่งที่ฉันคาดไว้) ข้อเสนอแนะใด ๆ

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