คำถามติดแท็ก bash

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

4
ฉันจะเริ่มต้นเซสชันเชลล์ทั้งหมดในไดเรกทอรีอื่นที่ไม่ใช่ $ HOME ได้อย่างไร
เมื่อฉันเปิดเชลล์ที่ไม่ใช่การเข้าสู่ระบบใน Ubuntu ไดเรกทอรีการทำงานปัจจุบันของฉันคือ/home/user_name( $HOMEตัวแปรสภาพแวดล้อมของฉัน) แต่ฉันต้องการเปลี่ยนสิ่งนี้เมื่อฉันเริ่มเทอร์มินัลของฉันฉันอยู่ในไดเรกทอรีอื่น ฉันได้อ่านแล้วว่าเมื่อฉันเริ่มต้นเทอร์มินัลในอูบุนตูมี.bashrcไฟล์ที่มา ดังนั้นฉันเพิ่ม export HOME=/home/user_name/Documents ไปยัง.bashrcไฟล์ของฉัน ตอนนี้เมื่อฉันเปิดเครื่องฉันยังอยู่ใน/home/user_nameไดเรกทอรี ฉันจะเปลี่ยนสิ่งนี้ได้อย่างไร

3
ฉันจะบอกได้อย่างไรว่าฉันอยู่ในเซสชั่น tmux จากสคริปต์ทุบตี?
ฉันชอบที่จะเก็บไว้bash_profileในที่เก็บคอมไพล์และโคลนมันกับเครื่องที่ฉันเข้าถึงเชลล์ได้ เนื่องจากฉันtmuxใช้เวลาส่วนใหญ่ฉันมีuser@hostสตริงในบรรทัดสถานะแทนที่จะเป็นจุดดั้งเดิมในเชลล์พรอมต์ มีบางเว็บไซต์ที่ฉันใช้tmuxติดตั้งไว้หรือฉันอาจไม่ได้ใช้งาน ฉันต้องการตรวจสอบเมื่อฉันไม่ได้อยู่ในtmuxเซสชั่นและปรับพรอมต์ของฉันตาม จนถึงตอนนี้วิธีการแก้ปัญหาของฉันที่อบในตอนนี้.bash_profileดูเหมือนว่า _display_host_unless_in_tmux_session() { # ??? } export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}' (การตรวจสอบทุกครั้งอาจไม่ใช่วิธีที่ดีที่สุดดังนั้นฉันจึงเปิดรับข้อเสนอแนะสำหรับวิธีที่ดีกว่าในการทำเช่นนี้การสคริปต์ Bash ไม่ใช่มือขวาของฉัน)
53 bash  prompt  tmux 

6
ทำให้เปลือกเริ่มต้น zsh โดยไม่ต้องเข้าถึงราก
ฉันกำลังใช้เครื่องคอมพิวเตอร์โรงเรียนของฉันและต้องการที่จะใช้แทนzsh bashฉันต้องการที่จะทำให้มันเป็นเปลือกเริ่มต้น แต่ฉันไม่สามารถเรียกใช้คำสั่งเช่น$ chsh -s $(which zsh)เพราะฉันไม่มีสิทธิ์ของผู้ดูแลระบบ มีวิธีที่ฉันสามารถวางบางสิ่งบางอย่างในของฉัน.bashrcหรือสิ่งที่เรียกโดยอัตโนมัติzshเมื่อมันเปิดเป็นวิธีแก้ปัญหา? เพื่อชี้แจงzshมีการติดตั้งแล้ว
52 bash  zsh  login  profile 

5
วิธีหลีกเลี่ยงความต้องการในการออก“ y” หลายครั้งเมื่อลบไฟล์ที่มีการป้องกัน
ฉันกำลังมองหาโซลูชันที่จะใช้เป็นคำตอบของ "rm: ลบไฟล์ปกติที่ป้องกันการเขียน [x]?" ฉันคิดว่าจะออกตัวละครตามด้วยการคืนรถหลาย ๆ ครั้งใน bashrc เราจะทำอย่างนั้นได้อย่างไร?
52 bash  command-line  rm 

3
การใช้รูปแบบ OR ในสัญลักษณ์ตัวแทนเชลล์
เนื้อหาของ dir ของฉันคือ $ ls -lrt total 0 -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 noon.txt -rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt ฉันต้องการแสดงรายละเอียดของไฟล์ที่มีคำในชื่อไฟล์ตามที่ระบุ ตัวอย่าง: $ ls -lrt *day|night* ls: *day: No such file or directory bash: night.txt: …
52 bash  shell  zsh  ls  wildcards 

4
ตั้งค่าช่วงเครือข่ายในตัวแปรสภาพแวดล้อม no_proxy
ฉันอยู่ในเครือข่ายที่ใช้พรอกซี ฉันมีเครื่องที่ใช้สคริปต์จำนวนมากที่นี่และเข้าถึงกันผ่านทาง HTTP เครือข่ายคือ 10.0.0.0/8 พร็อกซีของฉันคือ 10.1.1.1:81 ดังนั้นฉันจึงตั้งค่าตามความเหมาะสม: export http_proxy=http://10.1.1.1:81/ ฉันต้องการยกเว้นช่วงของตัวเองเพื่อเข้าถึงด้วยพร็อกซี ฉันลองชุดค่าผสมที่มีอยู่ export no_proxy='10.*' export no_proxy='10.*.*.*' export no_proxy='10.0.0.0/8' ไม่มีการทำงานข้างต้น! ฉันกำลังทดสอบอยู่wgetและพยายามค้นหาพร็อกซีเสมอไม่ว่าจะใช้ที่อยู่ IP ใดก็ตามที่ฉันต้องการเชื่อมต่อ เนื่องจากสคริปต์จำนวนมากอยู่ทุกที่ในทุกระบบ--no-proxyตัวเลือกจึงไม่ใช่ตัวเลือก ฉันต้องการตั้งค่าระบบให้กว้าง
52 bash  wget  curl  http-proxy 

6
“ su” ที่มีข้อผิดพลาด“ การเชื่อมต่อ X11 ถูกปฏิเสธเนื่องจากการรับรองความถูกต้องผิดพลาด”
ในฐานะที่เป็น root ฉันกำลังเชื่อมต่อกับรีโมตโฮสต์เพื่อดำเนินการคำสั่ง เฉพาะ "standarduser" เท่านั้นที่มี id-file ที่ถูกต้องและถูกต้อง. ssh / config ดังนั้นฉันจะเปลี่ยนผู้ใช้ก่อน: su standarduser -c 'ssh -x remotehost ./remotecommand' คำสั่งทำงานได้ดี แต่ถึงแม้ว่าฉันจะใช้ "-x" (ปิดการใช้งานการส่งต่อ X11) และการปิดการใช้งาน X11Forward ใน/etc/ssh/ssh_configฉันยังคงได้รับข้อความแสดงข้อผิดพลาด: X11 connection rejected because of wrong authentication. ฉันไม่ได้รับข้อความแสดงข้อผิดพลาดเมื่อฉันเข้าสู่ระบบในฐานะ "ผู้ใช้มาตรฐาน" มันค่อนข้างน่ารำคาญเพราะฉันต้องการรวมคำสั่งในไฟล์งาน cron ฉันเข้าใจว่าข้อความแสดงข้อผิดพลาดอ้างถึงการตรวจสอบความถูกต้องที่ผิดพลาดของไฟล์. XAuth ของรูท แต่ฉันไม่ได้พยายามเชื่อมต่อผ่าน X11 ทำไม "ssh -x" ไม่ปิดการใช้งานการเชื่อมต่อ X11 และทิ้งข้อความข้อผิดพลาด? UPDATE …
52 bash  gnu-screen  su  xauth 

9
การยกเลิกการวนซ้ำไม่สิ้นสุด
ฉันมีคำสั่งที่ฉันต้องการให้ทำงานอีกครั้งโดยอัตโนมัติในแต่ละครั้งที่มันสิ้นสุดลงดังนั้นฉันจึงทำสิ่งนี้: while [ 1 ]; do COMMAND; done; แต่ถ้าฉันหยุดลูปไม่ได้Ctrl-cเพราะมันฆ่าCOMMANDแล้วไม่ใช่ลูปทั้งหมด ฉันจะทำสิ่งที่คล้ายกันได้อย่างไร แต่ฉันสามารถหยุดได้โดยไม่ต้องปิดเครื่อง
52 bash  signals 

5
เรียกใช้หลายคำสั่งและฆ่าพวกเขาเป็นหนึ่งในทุบตี
ฉันต้องการเรียกใช้หลายคำสั่ง (โปรเซส) ในเชลล์เดียว พวกเขาทั้งหมดมีผลผลิตต่อเนื่องของตัวเองและไม่หยุด เล่นกับพวกเขาในการแบ่งพื้นหลัง-Ctrl Cผมอยากจะเรียกพวกเขาเป็นกระบวนการเดียวที่จะสามารถที่จะหยุดทั้งหมดของพวกเขาด้วย (subshell อาจจะ?) -CtrlC โดยเฉพาะฉันต้องการเรียกใช้การทดสอบหน่วยด้วยmocha(โหมดดู) เรียกใช้เซิร์ฟเวอร์และเรียกใช้การประมวลผลไฟล์ล่วงหน้า (โหมดดู) และดูผลลัพธ์ของแต่ละรายการในหน้าต่างเทอร์มินัลเดียว โดยทั่วไปฉันต้องการหลีกเลี่ยงการใช้งานนักวิ่ง ฉันสามารถรับรู้ได้โดยเรียกใช้กระบวนการในพื้นหลัง ( &) แต่จากนั้นฉันต้องใส่พวกเขาลงในเบื้องหน้าเพื่อหยุดพวกเขา ฉันต้องการที่จะมีกระบวนการห่อหุ้มพวกเขาและเมื่อฉันหยุดกระบวนการมันจะหยุด 'ลูก' ของมัน

3
$ () subshell หรือไม่
ฉันเข้าใจไวยากรณ์ของ subshell (<commands...>)เป็น$()เพียง subshell ที่คุณสามารถดึงค่าตัวแปรได้หรือไม่ หมายเหตุ: สิ่งนี้ใช้กับทุบตี 4.4 ตามถ้อยคำต่าง ๆ ในเอกสารประกอบ
51 bash  subshell  syntax 

4
จะออกจากเชลล์สคริปต์ได้อย่างไรหากส่วนหนึ่งล้มเหลว?
ฉันจะเขียนเชลล์สคริปต์ที่ออกได้อย่างไรหากส่วนหนึ่งล้มเหลว? ตัวอย่างเช่นหากข้อมูลโค้ดต่อไปนี้ล้มเหลวสคริปต์ควรออก n=0 until [ $n -ge 5 ] do gksu *command* && break n=$[$n+1] sleep 3

3
ฉันจะเปิดเซสชัน bash ที่ไม่ระบุตัวตนได้อย่างไร
มันเป็นไปได้ที่จะเปิดเซสชั่นไม่ระบุตัวตนในbash? ตัวอย่างเช่นเมื่อเราต้องป้อนรหัสผ่านในคำสั่งและไม่ต้องการbashเพิ่มลงในประวัติ

5
ฉันจะสามารถ 'alias sudo !!' ได้อย่างไร?
ฉันกำลังพยายามตั้งชื่อแทนสำหรับsudo !!ใน Bash ฉันพยายามalias sbb='sudo !!'แต่มันตีความว่าเป็นตัวอักษร !!และภาพพิมพ์ sudo: !!: command not found ถ้าฉันใช้อัญประกาศคู่มันจะใช้แทนการทำซ้ำสองครั้งในสตริงของตัวเองดังนั้นจึงไม่ทำงาน มีวิธีการทำงานนี้หรือไม่? หรือชื่อแทนอื่น `

5
วิธีการส่งออกของคำสั่งหนึ่งเป็นอาร์กิวเมนต์บรรทัดคำสั่งไปยังอีก?
ดังนั้นฉันมีสคริปต์ที่เมื่อให้สองที่อยู่มันจะค้นหาลิงก์ HTML สองอัน: echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g' ฉันต้องการที่จะส่งข้อมูลนี้ให้แล้วบันทึกการส่งออกในไฟล์ที่เรียกว่าwget temp.htmlฉันลองสิ่งนี้ แต่มันไม่ทำงาน มีใครช่วยอธิบายสาเหตุและ / หรือให้ทางแก้ปัญหาแก่ฉันได้ไหม #!/bin/bash url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g' wget $url

3
วิธีการใช้คำสั่ง watch กับสายโซ่ของคำสั่ง / โปรแกรม
ฉันมักจะใช้watchยูทิลิตี้ linux เพื่อดูผลลัพธ์ของคำสั่งซ้ำ ๆ ทุก ๆ n วินาทีเช่นในwatch df -h /some_volume/ แต่ฉันดูเหมือนจะไม่สามารถใช้watchกับชุดคำสั่ง piped เช่น: $ watch ls -ltr|tail -n 1 ถ้าฉันทำอย่างนั้นwatchจริง ๆ กำลังดูls -ltrและกำลังส่งผ่านไปtail -n 1ซึ่งไม่แสดงผลอะไร ถ้าฉันลองทำสิ่งนี้: $ watch (ls -ltr|tail -n 1) ฉันเข้าใจ $ watch: syntax error near unexpected token `ls' และข้อใดข้อหนึ่งต่อไปนี้ล้มเหลวด้วยเหตุผลบางประการ: $ watch <(ls -ltr|tail -n 1) $ …
50 linux  bash  pipe  watch 

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