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

Bash เป็นเชลล์ฟรีสำหรับระบบปฏิบัติการยูนิกซ์จากโครงการ GNU

3
วิธีที่จะทำให้เพจเจอร์น้อยตอบสนองต่อล้อเลื่อนและไม่ล้างหน้าจอ
ฉันรู้เกี่ยวกับคำตอบเช่นHow-to-make-mouse-wheel-scroll-the-less-เพจเจอร์โดยใช้ bash-and-gnome-terminalซึ่งเป็นการลบ-Xค่าสถานะออกจากตัวแปรสภาพแวดล้อม $ LESS แต่ฉันต้องการจะทำทั้งสองอย่างนี้: ใช้ล้อเมาส์เพื่อเลื่อนเพจเจอร์ (เมื่อเทียบกับการเลื่อนแถบเลื่อนหน้าต่าง terminal ของ) (ซึ่งคุณได้รับโดยการลบ -Xจาก$LESS) มีเนื้อหาจากเพจเจอร์ยังคงอยู่บนหน้าจอหลังจากเลิก (ซึ่งสามารถทำได้ตามปกติโดยการเพิ่ม -Xการ$LESS) มีวิธีใดบ้างที่ฉันจะมีเค้กและกินได้เช่นกัน?

4
ล้างเอาต์พุตเทอร์มินัลของคำสั่งสุดท้ายเท่านั้น
แทนที่จะเลื่อนผ่านเอาต์พุตหลายร้อยบรรทัดเพื่อดูประวัติคำสั่งก่อนหน้าเอาต์พุตของคำสั่งสุดท้ายสามารถถูกล้างออกได้หรือไม่? เช่นหลังจากดำเนินการlsล้างผลลัพธ์เพราะคุณไม่ต้องการมันอีกต่อไป แก้ไข: นี้ไม่ได้เป็นตามปกติของคุณclearหรือctrl+Lการดำเนินงาน แนวคิดคือการเลื่อนย้อนกลับแม้ว่าประวัติจะมองหาเอาต์พุตของคำสั่งก่อนหน้า แต่ไม่จำเป็นต้องเลื่อนผ่านการโหลดlsหรือcatหรือsudo apt-get installเอาต์พุตจนกว่าฉันต้องการ อาจมีลักษณะเช่นนี้: cat fileIWantToRemember ls directoryIWantToForget # some command that wipes the output of ls # scroll back to see the output of cat immediately
13 linux  ubuntu  bash  terminal 

4
ssh ได้รับอนุญาตถูกปฏิเสธเฉพาะในงาน cron
มีปัญหาแปลก ๆ ฉันได้สร้างสคริปต์ทุบตีเล็ก ๆ ซึ่งเรียกใช้คำสั่งบนโฮสต์ระยะไกลผ่าน ssh (โดยใช้การตรวจสอบกุญแจสาธารณะ) เมื่อฉันเรียกใช้สคริปต์นี้ด้วยตนเองจากบรรทัดคำสั่งมันทำงานได้ดี แต่เมื่ออยู่ใน /etc/cron.hourly มันล้มเหลวด้วยPermission denied, please try again.ข้อผิดพลาด ฉันอย่างชัดเจนตั้งสำคัญในสคริปต์ที่ใช้ssh -i /root/.ssh/id_rsa user@remote "command"; สคริปต์กำลังทำงานในฐานะรูท (ฉันได้เพิ่มการecho `id` > /tmp/whoami.logตรวจสอบอีกครั้ง); และ รหัส ssh ไม่ได้รับการป้องกันด้วยรหัสผ่าน ... ระบบคือเซิร์ฟเวอร์ Ubuntu 12.04 ฉันไม่สามารถเข้าถึงทางไกลเพื่อแก้ไขปัญหาได้ แต่อย่างที่ฉันบอกว่าใช้ ssh ด้วยตนเองหรือสคริปต์ทุบตีเดียวกันจากบรรทัดคำสั่งทำงาน มีความคิดว่าทำไมสิ่งนี้ถึงเกิดขึ้นหรือจะแก้ไขได้อย่างไร? ปรับปรุง ปรากฎว่าฉันเข้าใจผิดและรหัส ssh ได้รับการป้องกันด้วยรหัสผ่าน (ด้วยการโหลดพวงกุญแจ ssh-agent) ดังนั้นทำไมมันล้มเหลวจากสคริปต์ แต่ไม่เมื่อทำงานจากเซสชันทุบตี การเพิ่ม. ~/.keychain/$HOSTNAME-shสคริปต์ของฉันแก้ไขปัญหาได้ (ด้วย @grawity …
13 bash  ssh  cron 


4
การใช้ Wget เพื่อทำการตระเวนไซต์ซ้ำและดาวน์โหลดภาพซ้ำ
คุณจะแนะนำให้คุณทำการตระเวนเว็บไซต์ซ้ำ ๆ และดาวน์โหลดเฉพาะภาพบางประเภทได้อย่างไร ฉันพยายามใช้สิ่งนี้เพื่อตระเวนเว็บไซต์และดาวน์โหลดเฉพาะภาพ Jpeg: wget --no-parent --wait=10 --limit-rate=100K --recursive --accept=jpg,jpeg --no-directories http://somedomain/images/page1.html อย่างไรก็ตามถึงแม้ว่า page1.html จะมีลิงค์ไปยังหน้าย่อยหลายร้อยหน้าซึ่งตัวมันเองมีลิงค์โดยตรงไปยังรูปภาพ แต่ wget รายงานสิ่งต่าง ๆ เช่น "การลบ subpage13.html เนื่องจากมันควรถูกปฏิเสธ" และไม่ดาวน์โหลดภาพใด ๆ เนื่องจากไม่มีการเชื่อมโยงโดยตรงกับ จากหน้าเริ่มต้น ฉันสมมติว่านี่เป็นเพราะ - ยอมรับฉันกำลังใช้ทั้งโดยตรงในการรวบรวมข้อมูลและกรองเนื้อหาที่จะดาวน์โหลดในขณะที่ฉันต้องการให้มันใช้เพื่อควบคุมการดาวน์โหลดเนื้อหาเท่านั้น ฉันจะรวบรวมข้อมูลลิงก์ทั้งหมดได้อย่างไร แต่ดาวน์โหลดเฉพาะไฟล์ที่มีนามสกุลเช่น * .jpeg เท่านั้น แก้ไข: นอกจากนี้บางหน้าเป็นแบบไดนามิกและสร้างขึ้นผ่านสคริปต์ CGI (เช่น img.cgi? fo9s0f989wefw90e) แม้ว่าฉันจะเพิ่ม cgi ลงในรายการที่ฉันยอมรับ (เช่น --accept = jpg, jpeg, …

6
ใช้กระบวนการทุบตีพื้นหลังใน Windows 10 โดยไม่ต้องเปิดเทอร์มินัล
ผมมักจะใช้ระบบย่อยลินุกซ์เมื่อฉันเขียนโปรแกรมอะไรบน Windows 10 ~เพื่อให้เส้นทางของฉันทั้งหมดเป็นญาติกับ ฉันมีสคริปต์ไพ ธ อนที่ทำงานตลอดไปในพื้นหลังจนกว่าฉันจะฆ่ากระบวนการ ฉันจะทำเช่นนั้นใน Windows 10 bash ที่ไม่มีเทอร์มินัลเปิดได้อย่างไร สิ่งที่ฉันได้ลอง: bash -c "python3 script.py จาก Run nohup python3 -u script.py จากนั้นปิดเครื่อง setsid python3 script.py จากนั้นปิดเครื่อง สิ่งเหล่านี้ไม่ได้ผล มีวิธีทำเช่นนี้หรือไม่? อีกวิธีหนึ่งคือมีวิธีการเปลี่ยนเส้นทางเพื่อให้พวกเขาทำงานถ้าฉันเรียกใช้สคริปต์จาก W10 และทุบตีโดยไม่ต้องเปลี่ยนพวกเขาทุกครั้งหรือไม่

5
ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวหลังจากพิมพ์ $ PATH ในเทอร์มินัล
เมื่อฉันเขียนใน terminal echo $PATH ผลลัพธ์ของฉันคือ :/home/bo/bin:/usr/local/bin:/usr/sbin:/usr/local/sbin:/usr/bin:/sbin:/bin แต่เมื่อฉันเขียนเพียง: $PATH ผลลัพธ์นี้ฉันไม่เข้าใจถูกต้องผลลัพธ์คือ: bash: :/home/bo/bin:/usr/local/bin:/usr/sbin:/usr/local/sbin:/usr/bin:/sbin:/bin: No such file or directory และคำถามของฉันคือทำไมมันเขียน "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" มีทุกไดเรกทอรีจากตัวแปร PATH อยู่
13 linux  bash  path 

1
ตัวเลือก `-n 'ใน sed ทำอะไร
นี่คือรายการหน้าคนสำหรับ-n: -n ปราบปรามการพิมพ์พื้นที่รูปแบบอัตโนมัติ ฉันสังเกตเห็นว่าเมื่อไม่ได้ใช้-nสำหรับการทำงานบางอย่างแต่ละบรรทัดจะถูกพิมพ์ไปยัง stdout (และบรรทัดที่ร้องขอจะถูกพิมพ์สองครั้ง): $ cat test.txt first second third fourth fifth $ sed -n '2,3p' test.txt second third $ sed '2,3p' test.txt first second second third third fourth fifth อย่างไรก็ตามกฎหมายนี้ไม่ได้มีไว้สำหรับคำสั่งอื่น ๆ : $ sed -n 's/t/T/' test.txt $ sed 's/t/T/' test.txt firsT second Third fourTh fifTh แล้วจะ-nทำอะไรกันแน่?

2
รับเวลาแก้ไขไฟล์ระยะไกลผ่าน HTTP ใน Bash script
ฉันกำลังสร้างสคริปต์ Bash แบบง่าย ๆ เพื่อแยกเวลา / วันที่แก้ไขไฟล์ของไฟล์ระยะไกลผ่าน HTTP ไฟล์ตัวอย่าง: http://example.com/bar/example.pdf สามารถทำได้โดยไม่ต้องดาวน์โหลดไฟล์จริงหรือไม่? ถ้าไม่เป็นทางเลือกที่ดีที่สุดคืออะไร
13 bash  http 

7
วิธีการส่งผ่านอาร์กิวเมนต์สคริปต์ทุบตีไปยัง subshell
ฉันมีสคริปต์ตัวตัดคำที่ทำงานบางอย่างแล้วส่งพารามิเตอร์ดั้งเดิมไปยังเครื่องมืออื่น: #!/bin/bash # ... other_tool -a -b "$@" สิ่งนี้ทำงานได้ดีเว้นแต่ "เครื่องมืออื่น ๆ " จะทำงานใน subshell: #!/bin/bash # ... bash -c "other_tool -a -b $@" ถ้าฉันเรียกสคริปต์ wrapper ของฉันเช่นนี้: wrapper.sh -x "blah blup" ดังนั้นจะส่งเฉพาะอาร์กิวเมนต์แรก (-x) ไปที่ "other_tool" เท่านั้น ในความเป็นจริงฉันไม่ได้สร้าง subshell แต่ส่งผ่านอาร์กิวเมนต์ดั้งเดิมไปยัง shell บนโทรศัพท์ Android ซึ่งไม่ควรสร้างความแตกต่าง: #!/bin/bash # ... adb sh -c "other_tool -a …
13 bash 

2
รับเส้นทางแบบเต็มไปยังเป้าหมายของลิงก์ได้อย่างไร
ถ้ามีการเชื่อมโยงสัญลักษณ์ที่สร้างขึ้นด้วย/var/opt/foo ln -fs /path/to/target/dir fooฉันสามารถในสคริปต์ที่เห็นเพียงการเชื่อมโยงได้รับการ/path/to/target/dir? สิ่งที่ฉันต้องการที่จะประสบความสำเร็จในสคริปต์ก่อนที่ผมจะทำrm -rf /path/to/target/dirln -fs /path/to/another/dir foo

3
LD_LIBRARY_PATH ยกเลิกการตั้งค่าตามหน้าจอ
การทำงานscreenใน bash จะทำความสะอาดตัวแปร LD_LIBRARY_PATH ฉันอ่านหนังสือเสร็จแล้วและดูเหมือนว่านี่เป็นพฤติกรรมที่คาดหวัง แต่ฉันต้องหลีกเลี่ยง วิธีแก้ปัญหาคือการเพิ่มการประกาศ LD_LIBRARY_PATH ~/.bashrcไป ในกรณีของฉัน LD_LIBRARY_PATH ได้รับการเปลี่ยนแปลงมากมายระหว่างการเปิดตัวเชลล์และเมื่อฉันเรียกใช้หน้าจอดังนั้นฉันต้องได้รับค่าปัจจุบันของ LD_LIBRARY_PATH ในscreenเซสชัน

5
วิธีการทดสอบว่าตัวแปรเท่ากับจำนวนในเปลือก
ฉันมีเชลล์สคริปต์นี้ซึ่งใช้งานไม่ได้ การป้อนข้อมูล: Server_Name=1 if [ $Server_Name=1 ]; then echo Server Name is 1 else echo Server Name is not 1 fi เอาท์พุท: Server Name is 1 แต่ถ้าฉันเปลี่ยนServer_Name=2ผลลัพธ์คือ: Server Name is 1 เมื่อฉันเปลี่ยนServer_Nameไปผมต้องการที่จะพูดได้:2Server Name is 2 ฉันรู้ว่ามันเป็นif [ $Server_Name=1 ];ส่วนหนึ่ง ฉันจะแก้ไขได้อย่างไร

2
Ubuntu: เรียกใช้เอาต์พุตของคำสั่งอื่น
ฉันมีบรรทัดคำสั่งที่ส่งออกบรรทัดคำสั่งอื่นตัวอย่างเช่น: > commandlineA param1 param2 commandlineB param1 ฉันต้องการให้มีการดำเนินการบรรทัดคำสั่งเดียวที่จะรัน commandlineB พร้อมพารามิเตอร์ที่กำหนด มีวิธีง่ายๆในการทำเช่นนั้นโดยใช้บรรทัดคำสั่งเดียวหรือฉันจำเป็นต้องเรียกใช้ไฟล์ bash ขนาดเล็กที่จะเก็บผลลัพธ์ในตัวแปรแล้วเรียกใช้หรือไม่ ขอบคุณ

3
เติมคำนำหน้าเป็น tar
ขณะนี้ฉันใช้สคริปต์เชลล์อย่างไม่มีประสิทธิภาพ: cp -a $MYPATH /tmp/$VERSION cd /tmp tar cjf archive.tar.bz2 $VERSION ฉันต้องการให้ทุกอย่างอยู่ในไดเรกทอรีที่เรียกว่า $ VERSION - มีวิธีการทำเช่นนี้โดยไม่ต้องคัดลอกทุกอย่างเหมือนในสคริปต์ด้านบนหรือไม่
12 bash  tar 

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