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

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

1
Bash ไม่เปลี่ยนไดเรกทอรีอีกต่อไป
เปลือกทุบตีของฉันจะไม่เปลี่ยนไดเรกทอรีด้วย cd อีกต่อไป ฉันสังเกตเห็นก่อนหน้านี้เมื่อทำงานและพบว่ามีเชลล์ใหม่ที่ฉันเปิด (เทอร์มินัลหรือ xterm ฯลฯ ) จะติดอยู่ในโฮมไดเร็กตอรี่และไม่สามารถออกไปได้ (เทอร์มินัลที่เปิดอยู่ [~]$ pwd /home/sys/dave [~]$ cd / [~]$ cd Documents/ [~]$ pwd /home/sys/dave [~]$ type cd cd is a shell builtin [~]$ alias alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias vi='vim' alias which='alias | /usr/bin/which …
14 linux  bash 

2
ทำไมคำสั่ง xargs นี้ไม่ทำงาน
ฉันต้องการลบส่วนขยาย. sh ทั้งหมดเพื่อทำสิ่งนี้: ls *.sh | xargs -I {} mv {} `basename {} .sh` อย่างไรก็ตามมันไม่ทำงานมันจะทำงานเหมือนbasenameส่งคืนชื่อไฟล์ที่ไม่เปลี่ยนแปลง ทำไมมันเป็นเช่นนั้น ตัวอย่างเช่นงานนี้: ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`; แก้ไข : วิธีแก้ไข: อัญประกาศเดี่ยวป้องกัน`basename ...`การประเมินผลโดยเชลล์ก่อนที่คำสั่งจะรัน ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'

2
ไปป์ไลน์เพื่อ xargs
ฉันมีสคริปต์ที่ในบางสถานการณ์อาจไม่มีอะไรใน stdout ในตอนท้ายของสคริปต์ฉันผ่านบรรทัดที่ฉันมีไปยังคำสั่งอื่นโดยใช้ xargs ปัญหาของฉันคือเมื่อไม่มีอะไรใน stdout ฉันได้รับข้อความแสดงข้อผิดพลาด "การใช้งาน: โปรแกรม arg1 arg2" ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร
14 bash  xargs 

11
ฉันจะค้นหา RHEL รุ่นใดได้บ้าง
ฉันทำงานในสภาพแวดล้อมที่เราค่อยๆเปลี่ยนเครื่องจาก Red Hat Enterprise Linux 5 เป็น RHEL 6 ฉันต้องการสคริปต์บางส่วนของฉันเพื่อทำสิ่งที่แตกต่างอย่างละเอียดบนเครื่อง RHEL6 กับสิ่งที่กำลังทำอยู่บนเครื่อง RHEL5 วิธีแก้ปัญหาในทางปฏิบัติคือการตรวจสอบที่รันไทม์และเรียกใช้คำสั่งบางอย่างบน RHEL5, อื่น ๆ บน RHEL6 และบางคำสั่งทั้งสอง ตัวอย่างการใช้งานจริงของสิ่งนี้คือเรากำลังใช้โมดูลสภาพแวดล้อมและฉัน.bashrcมีmodule load gitบรรทัด แต่ในเครื่อง RHEL6 ข้อผิดพลาดของคำสั่งนี้: RHEL6 system, git should be installed - not loading module มองหา modulefile ฉันพบรหัสต่อไปนี้: set redhatrelease [eval exec "cat /etc/redhat-release"] if { [regexp -nocase {release …
14 bash  rhel 

1
ยูทิลิตีบรรทัดคำสั่งเพื่อดึงรหัสผ่านที่ไม่มีเสียงสะท้อนกลับ
คำสั่ง Bash builtin read ดูเหมือนจะไม่สนับสนุนตอนนี้ฉันต้องให้ผู้ใช้ป้อนรหัสผ่านในขณะที่ไม่ควรแสดงเสียงก้องฉันสามารถใช้เครื่องมืออะไรได้บ้าง
14 bash  input 

2
เปลี่ยนเส้นทาง stderr จากสคริปต์ที่รันอยู่แล้ว
ฉันใช้สคริปต์มาหลายวันแล้ว ฉันเปลี่ยนเส้นทาง stdout ไป$HOME/mylogแล้ว แต่ไม่เปลี่ยนเส้นทาง stderr เนื่องจากฉันคิดว่าจะไม่มีอะไรเกิดขึ้น ทันใดนั้นหลายพันบรรทัดก็เริ่มปรากฏบน stderr ดังนั้นฉันจึงหยุดงานชั่วคราว มีวิธีที่ฉันสามารถเปลี่ยนเส้นทาง stderr $HOME/myerrจากนี้ไปโดยไม่ต้องรีสตาร์ทสคริปต์หรือไม่ ฉันเข้าถึง sudo บนกล่องได้และเป็น OS X บางทีมีบางอย่างที่ใช้ dtools trapping? ฉันไม่สามารถทำงานที่สคริปต์ทำหายไปและเริ่มต้นใหม่ตั้งแต่ต้น มีวิธีการ "ถ่ายโอนข้อมูลวัตถุในหน่วยความจำ" บนดิสก์ตรึงโปรแกรมแก้ไขตัวแปร (เช่นตัวอธิบายไฟล์) และดำเนินการต่อด้วยบริบทใหม่หรือไม่

3
การพิมพ์ทศนิยมให้เป็นอักขระ ASCII คำสั่งของฉันจะไม่แสดงผลตามที่ต้องการ
ฉันต้องการที่จะส่งออกสตริงของตัวละคร ASCII ทั้งหมดด้วยคำสั่งดังต่อไปนี้ for i in `seq 32 127`; do printf "%c" $i; done ผลลัพธ์ของคำสั่งข้างต้นคือ: 33333334444444444555555555566666666667777777777.............. เป็นตัวเลขตัวแรก (จากซ้าย) ของแต่ละหมายเลข เมื่อมองผ่านเว็บไซต์นี้ฉันได้พบกับคำตอบสำหรับปัญหาของฉันวิธีพิมพ์ตัวอักษร ASCII ที่พิมพ์ได้ทั้งหมดใน CLI? อย่างไรก็ตามฉันยังไม่เข้าใจว่าเพราะเหตุใดข้อมูลโค้ดต้นฉบับของฉันจึงไม่ส่งออกอักขระ ASCII ตามที่ต้องการ

3
Bash: ฉันจะเลื่อนเคอร์เซอร์ไปทางซ้ายทีละคำได้อย่างไร
ใน OSX ฉันสามารถoptionกดปุ่มค้างไว้และกดปุ่มเคอร์เซอร์ซ้ายจนกว่าฉันจะไปถึงคำที่ฉันต้องการแก้ไข (หรือใน Vi ฉันสามารถกดbได้ แต่ฉันไม่สามารถหาวิธีการทำสิ่งนี้ได้ใน Terminal ยัง ...

2
เมื่อใดจึงควรใช้เซมิโคลอนระหว่างตัวแปรสภาวะแวดล้อมและคำสั่ง
ทุกคนสามารถอธิบายได้หรือไม่ว่าทำไมเซมิโคลอนจึงมีความจำเป็นเพื่อที่LANGจะเห็นการอัปเดตโดยการทุบตี? ใช้งานไม่ได้: > LANG=Ja_JP bash -c "echo $LANG" en_US ผลงาน: > LANG=Ja_JP ; bash -c "echo $LANG" Ja_JP ฉันทำงานกับทั้งทุบตี 4.1.10 ใน linux และรุ่นเดียวกันภายใต้ cygwin

4
คำสั่งที่เน้น regex ในข้อความหรือไม่
มีคำสั่งที่เน้นการแสดงออกในข้อความหรือไม่? ฉันกำลังมองหาบางอย่างเช่นฟังก์ชั่น 'ค้นหา' น้อยกว่า แต่มีเอาต์พุตข้อความปกติบน stdout แทนที่จะเป็นlessวิวเวอร์ ตัวอย่าง: $ cat test.txt | highlight "an" อนาคตสำหรับถอนนาโตเป็นระเบียบจาก Afgh ist รับความเดือดร้อนสองความพ่ายแพ้เป็นประธานาธิบดีฮามิดคาร์ไซ DEM ขีด จำกัด ded กองกำลังสหรัฐอเมริกางลิบเจรจาสันติภาพหยุด มันสามารถใช้สีหรือวิธีอื่นใดเพื่อเน้นการแสดงออกปกติที่ระบุ

4
ค้นหา -exec ในสคริปต์ทุบตีพร้อมส่วนขยายตัวแปร
ฉันพยายามเรียกใช้คำสั่งคล้ายกับคำสั่งด้านล่างในสคริปต์ทุบตี มันควรจะค้นหาผ่านโฟลเดอร์ย่อยทั้งหมดและคัดลอกไฟล์ทั้งหมดของบางประเภทให้อยู่ในระดับรากของ$sourcedir$targetdir #!/bin/bash # These are set as arguments to the script, not hard-coded sourcedir="/path/to/sourcedir" targetdir="/path/to/targetdir" find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2/`basename "$1"`"' "{}" "$targetdir" \; นี้ดูเหมือนว่าจะสวยใกล้เคียงยกเว้นว่า{}จะไม่ถูกส่งผ่านไปในขณะที่$2ไป-exec sh -c ... ฉันต้องการทำเช่นนี้ให้ใกล้เคียงกับ "ทางที่ถูกต้อง" ที่สุดเท่าที่จะทำได้ด้วยความอดทนสำหรับตัวละครพิเศษในชื่อไฟล์ แก้ไข:ฉันเห็นคนแนะนำให้ใช้xargsหรือการผูกมัดข้อโต้แย้ง ฉันอยู่ภายใต้การแสดงผลว่านี่เป็นเพียงข้อโต้แย้งที่ จำกัด ตัวอย่างเช่นถ้าฉันมีไฟล์. jpg หลายพันไฟล์ที่ฉันพยายามคัดลอกจากไดเรกทอรีแกลเลอรี่จำนวนมากไปยังไดเรกทอรีสไลด์โชว์ยักษ์โซลูชั่นการเชื่อมโยงจะยังคงใช้งานได้หรือไม่ แก้ไข 2:ปัญหาของฉันคือฉันหายไป_ก่อนที่ตัวเลือกแรกของฉันที่จะดวลจุดโทษใน-execคำสั่ง สำหรับทุกคนที่สงสัยเกี่ยวกับวิธีทำให้คำสั่ง find ทำงานได้เพิ่ม_และทุกอย่างจะดีขึ้น: …

1
ความคิดเห็นที่อ่านได้ในแต่ละบรรทัดในคำสั่ง bash แบบหลายบรรทัดพร้อมไพพ์ไลน์
เมื่อสร้างเชลล์สคริปต์โดยใช้ไพพ์ไลน์และการใช้แบ็กสแลชเพื่อดำเนินการต่อบรรทัดฉันต้องการแทรกความคิดเห็นบนบรรทัดแยกในแฟชั่นที่แข็งแกร่งอ่านได้และพกพาได้ ตัวอย่างเช่นให้ใช้คำสั่งหลายบรรทัดที่ไม่ใส่เครื่องหมาย (ถูกขโมยจาก @DigitalRoss เพื่อความชัดเจน): echo abc | tr a-z A-Z | sort | uniq ... ด้านล่างมีความสวยงามใกล้เคียงกับสิ่งที่ฉันต้องการให้สำเร็จ แต่ด้วยเหตุผลที่ชัดเจนไม่ทำงาน ... และใช่ฉันทราบดีว่านี่ไม่ใช่สิ่งที่ควรค่าแก่การแสดงความคิดเห็น: # Perform critical system task. # NOTE - An example of what does *not* work. echo abc | # Convert lowercase to uppercase. tr a-z A-Z | # Sort the …
14 bash  shell  pipe 

4
การกำหนดค่าโหมด Bash vi เป็นค่าเริ่มต้นไปที่โหมดคำสั่ง
เป็นไปได้หรือไม่ที่จะกำหนดค่าโหมด bash vi เพื่อให้เริ่มต้นในโหมดคำสั่งแทนโหมดแทรก ? ฉันพบว่าฉันต้องกดEscมากเกินไป ดูเหมือนว่ามีความเป็นไปได้ที่จะระบุสิ่งนี้ใน zsh แต่ฉันไม่พบวิธีการทำเช่นนี้ใน bash / readline
14 bash  vi 

7
เชลล์สคริปต์สำหรับการย้ายไฟล์ที่เก่าที่สุด?
ฉันจะเขียนสคริปต์เพื่อย้ายไฟล์ที่เก่าที่สุดเพียง 20 ไฟล์จากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์ได้อย่างไร มีวิธีที่จะคว้าไฟล์ที่เก่าแก่ที่สุดในโฟลเดอร์หรือไม่?

1
นามแฝงหนึ่งส่งผลกระทบต่อนามแฝงอื่นหรือไม่
ฉันยังไม่ได้ตั้งชื่อแทนจำนวนมากในไฟล์. bash_aliases ของฉัน ฉันเพิ่งค้นพบว่ามีประโยชน์เพียงใด ฉันเห็นว่าตัวเองค่อนข้างติดใจนามแฝงดังนั้นก่อนที่ไฟล์จะเทอะทะเกินไปฉันอยากจะอธิบายอะไรบางอย่างโดยถามคำถามง่าย ๆ นามแฝงหนึ่งส่งผลกระทบต่ออีกชื่อหนึ่งหรือนามแฝงกลับไปเป็นคำสั่งเดิมเสมอหรือไม่? ตัวอย่างอาจทำให้ชัดเจนมากขึ้น: ฉันได้นามแฝงls ls -lFสมมติว่าผมอยากจะยังนามแฝงdเพื่อls -l | grep -E "^d": ไม่dตอนนี้ใช้ls -lFในสถานที่ของls? ถ้าเป็นเช่นนั้นมันเป็นเรื่องของการสั่งซื้อในไฟล์การกำหนดค่า. bash_aliases หรือไม่? man alias ไม่ได้สอนฉัน
14 bash  alias 

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