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

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

5
รับพาเรนต์ไดเร็กทอรีสำหรับไฟล์
ฉันต้องการชื่อไดเรกทอรีหลักสำหรับไฟล์ ตัวอย่าง: เมื่อฉันมีpath=/a/b/c/d/fileฉันต้องการเพียง แต่dไม่/a/b/c/d(ซึ่งฉันได้รับจากdirname $path) เป็นเอาต์พุต มีวิธีที่ซับซ้อนในการทำเช่นนี้?
24 linux  bash  shell 

2
ฉันจะเปรียบเทียบตัวแปรกับสตริงข้อความแทนที่จะเป็นจำนวนเต็มในคำสั่ง if / else ได้อย่างไร
ในขั้นตอนการเขียนเชลล์สคริปต์ฉันพบปัญหาด้วยคำสั่ง if / else ต่อไปนี้ซึ่งอยู่ตรงกลางของสคริปต์: if [ $act -eq "add" ] then read - "add or update: " $comm git commit -m "$comm $file" else git commit -m "$act $file" fi ข้อผิดพลาดที่กลับมาเป็น: ./gitup: line 13: [: add: integer expression expected แล้วจึงดำเนินการกับส่วนที่เหลือของสคริปต์ ฉันจะมีถ้าเซ็กเมนต์ประเมิน / เปรียบเทียบตัวแปรกับอินพุตสตริงแทนที่จะเป็นจำนวนเต็ม; ต้องการข้อผิดพลาดที่แตกต่างกันเมื่อใช้ "! =" ท่ามกลางสิ่งอื่นที่ฉันลอง

4
วิธีการสำรองข้อมูล (WSL) ระบบย่อย Linux สำหรับ Windows 10 ก่อนที่ระบบจะรีเซ็ตหรือติดตั้งใหม่
ปัญหาของฉันคือฉันต้องรีเซ็ตหรือติดตั้ง windows ใหม่เนื่องจากปัญหาบางอย่าง แต่ฉันใช้เวลามากในการกำหนดค่า WSL เพื่อการพัฒนาและไม่ต้องการสูญเสียมัน มีวิธีใดบ้างในการสำรองข้อมูล WSL ทั้งหมดด้วยการตั้งค่าและโมดูลที่ติดตั้งปลั๊กอินผู้ใช้และอื่น ๆ และคืนค่าหลังจากรีเซ็ตหรือติดตั้ง windows ใหม่ ฉันค้นหาหัวข้อนี้มาก แต่ฉันไม่พบข้อมูลที่เป็นประโยชน์ มิฉะนั้นหากไม่มีวิธีสำรองข้อมูล windows 10 reset จะลบ WSL ทั้งหมดหรือไม่

10
ฉันจะคัดลอกไฟล์ที่ชื่อขึ้นต้นด้วยจุดได้อย่างไร
ฉันกำลังพยายามคัดลอกไฟล์ทั้งหมดภายใต้ไดเรกทอรี A ไปยังไดเรกทอรี B ไฟล์ทั้งหมดภายใต้ไดเรกทอรี A เริ่มต้นด้วยจุดตัวอย่างเช่น: A/.a A/.b A/.c ซึ่งฉันพบว่าถ้าฉันใช้: cp A/* Bได้รับข้อผิดพลาด: cp: cannot stat 'A/*': no such file or directory ดูเหมือนว่าไม่มีตัวเลือกสำหรับ cp เช่น ls เพื่อจัดการกับรายการที่เริ่มต้นด้วยจุดทุกคนมีความคิดวิธีการแก้ไขหรือไม่
23 linux  bash  shell  regex 

2
ฉันจะป้องกันการเคลียร์เอาต์พุตเทอร์มินัลได้อย่างไรเมื่อฉัน“ ออกจาก” เซสชัน SSH
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Super User อพยพ 9 ปีที่ผ่านมา นี่คือสถานการณ์: ฉันเปิดเทอร์มินัลใน Ubuntu และทำssh host-1ซึ่งทำงานได้ตามที่คาดไว้ จาก host-1 ฉันใช้ssh host-2งานได้ดีและเชื่อมต่อฉันกับ host-2 อีกครั้ง จาก host-2 ฉันทำเช่นecho "blah"ซึ่งพิมพ์blahไปที่หน้าจอ ปัญหา: ถ้าฉันทำexit, หน้าจอจะถูกล้างและฉันเหลือเพียงต่อไปนี้: Connection to host-2 closed. myusername$ ฉันจะป้องกันการลบเอาต์พุตจากหน้าจอที่สร้างโดยคำสั่งที่รันบน host-2 (เช่นblahฯลฯ ) ได้อย่างไรหลังจากฉันexitกลับไปที่ host-1 การดีบักบางอย่างที่ฉันทำไปแล้ว: ฉันมีเพื่อนลงชื่อเข้าใช้ host-1 และ host-2 ตรงตามข้างบนและเมื่อเขาexitมาจาก host-2 หน้าจอของเขาจะไม่ถูกล้างออก ดังนั้นมันจะต้องเป็นสิ่งที่ต้องทำกับสภาพแวดล้อมของฉัน ... ใช่มั้ย ความคิดใด …
23 bash  ssh 

3
ทำให้ทุบตีหยุดชั่วคราวหลังจากคำสั่งไม่ดีคืออะไร?
เมื่อคุณพิมพ์คำสั่งที่ไม่ดีให้พูดว่าคุณต้องการทำ: $ cd .. $ ls แต่คุณพิมพ์เร็วเกินไปและสิ้นสุดการกดปุ่มป้อนระหว่าง l และ s ดังนั้นคุณจะได้รับ: $ cd .. $ l sbash: l: command not found... สิ่งนี้เกิดขึ้นตลอดเวลาเมื่อเราพิมพ์เร็ว สิ่งที่ฉันอยากรู้คือที่มาของ 2.5 วินาที (ในระบบของฉัน) หยุดชั่วคราวหลังจากข้อความคำสั่งไม่ดีปรากฏบนหน้าจอ ดูเหมือนว่าฉันจะรับรู้คำสั่งที่ไม่ดีทันทีพิมพ์ข้อความผิดพลาดเกี่ยวกับมัน แต่แล้วก็เพื่อความสนุกสนานรอ 2.5 วินาทีก่อนที่จะกลับฉันไปที่บรรทัดคำสั่ง อะไรทำให้เกิดสิ่งนี้ มีวิธีแก้ไขปัญหานี้หรือไม่? มันน่ารำคาญนิดหน่อย แต่ฉันต้องการกำจัดมัน :) แก้ไข: เรียกใช้ระบบ Fedora 16
23 bash 

3
ฉันจะโยงคำสั่งบนคอนโซลได้อย่างไร
ในbashบางครั้งฉันต้องการเรียกใช้หลายคำสั่งในอนุกรมและไม่ต้องการรอให้เสร็จก่อนที่ฉันจะพิมพ์คำสั่งใหม่ ดังนั้นฉันจะทำสิ่งนี้: cmd1; cmd2; cmd3 น่าเสียดายที่หนึ่งในคำสั่งอาจล้มเหลว ในกรณีนี้ฉันต้องการหยุด มีวิธีง่ายๆในการทำเช่นนี้หรือไม่ แต่ทำเพื่อที่ฉันจะเรียกใช้คำสั่งต่อไปหากคำสั่งก่อนหน้ามีรหัส 0 ออกเท่านั้น

3
คำสั่ง cashic Bash นี้หมายความว่าอย่างไร
ฉันอ่านคำเตือนของ Ubuntu Forum เกี่ยวกับคำสั่งที่เป็นอันตรายและพบอัญมณีที่น่าสนใจนี้: :(){ :|:& };: คำเตือน:โค้ดด้านบนจะทำให้เครื่องของคุณผิดพลาดเว้นแต่คุณจะมีข้อ จำกัด ของ proc อย่างเข้มงวด sudo rm -rf /พิจารณารหัสนี้คล้ายกับการทำงาน แต่นั่นหมายความว่าอย่างไร แม้จะมีประสบการณ์การเขียนโปรแกรมของฉันฉันไม่เคยเห็นคำสั่งที่คลุมเครือนั่นไม่ใช่ภาษาแอสเซมบลี
23 bash 

1
ทำไมเราถึงมี bash shell เข้าสู่ระบบ, ไม่โต้ตอบ, และไม่โต้ตอบ?
ดังนั้นคนทุบตีหน้าอธิบายการเข้าสู่ระบบและเปลือกโต้ตอบ: เปลือกเข้าสู่ระบบเป็นหนึ่งที่มีอักขระตัวแรกของศูนย์อาร์กิวเมนต์เป็น - หรือหนึ่งเริ่มต้นด้วยตัวเลือก --login เชลล์แบบโต้ตอบเริ่มต้นหนึ่งโดยไม่มีอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกและไม่มีตัวเลือก -c ซึ่งทั้งอินพุตและข้อผิดพลาดมาตรฐานเชื่อมต่อกับเทอร์มินัล (ตามที่กำหนดโดย isatty (3)) หรือเริ่มด้วยตัวเลือก -i มีการตั้งค่า PS1 และ $ - รวม i หาก bash เป็นแบบโต้ตอบอนุญาตให้เชลล์สคริปต์หรือไฟล์เริ่มต้นเพื่อทดสอบสถานะนี้ ฉันคิดว่านี่หมายความว่าเราสามารถมีกระสุนได้ 4 แบบ: เชลล์ล็อกอินแบบโต้ตอบ เชลล์ล็อกอินที่ไม่โต้ตอบ เชลล์ที่ไม่ใช่การล็อกอินแบบโต้ตอบ เชลล์ที่ไม่ใช่การล็อกอินแบบไม่โต้ตอบ แต่ทำไมเราถึงมีเชลล์แบบตอบโต้ / ไม่โต้ตอบและล็อกอิน / ไม่ใช่เข้าสู่ระบบในตอนแรก? ทำไมต้องเป็นวาไรตี้? เราจะเสียอะไรถ้าเรามีเปลือกประเภทเดียว นอกจากนี้เมื่อพยายามที่จะตรวจสอบว่าฉันอยู่ในเปลือกเข้าสู่ระบบโดยการเรียกใช้echo $-มันก็ส่งออก: himBH บางส่วนของสถานะเหล่านี้มีการอธิบายที่นี่แต่h, Hและmไม่ได้อธิบาย มีสถานที่ที่อธิบายธงเหล่านี้ทั้งหมดหรือไม่

5
สัญลักษณ์ท่อ linux“ |” ทำหน้าที่อะไร? [ซ้ำ]
คำถามนี้มีคำตอบอยู่ที่นี่แล้ว : ทำความเข้าใจวิธีการส่งอินพุตไปยังไพพ์ใน Bash (4 คำตอบ) ปิดให้บริการใน5 ปีที่ผ่านมา นี่คือคำสั่งที่เรียงลำดับไฟล์ในโฟลเดอร์ตามลำดับย้อนกลับ ls | sort -r อะไร|สัญลักษณ์ในคำสั่งที่ทำอย่างไร สิ่งที่ฉันกำลังมองหาจริงๆที่นี่คือคำอธิบายระดับสูง (เข้าใจง่าย) ของไพพ์สำหรับผู้เริ่มต้นใช้งาน Linux ฉันเห็นคำถามอื่นเกี่ยวกับท่อที่นี่ใน Superuser แต่ไม่มีสิ่งใดที่ทำให้เกิดคำตอบที่อธิบายในแง่ง่าย ๆ ว่าพวกเขาทำอะไรและแตกต่างจากการเปลี่ยนเส้นทางอย่างไร ( >หรือ<สัญลักษณ์)

2
วิธี cd ลงใน smb: //user@100.100.100.100 จากเทอร์มินัล
ฉันกำลังใช้ Ubuntu และ gnome บนคอมพิวเตอร์ของฉัน เมื่อฉันเปิดเบราว์เซอร์ไฟล์บนรางรถไฟด้านซ้ายฉันเห็นโฟลเดอร์ชื่อ "Work Server" เมื่อฉันวางเมาส์เหนือภาพคำอธิบายต่อไปนี้จะปรากฏเป็น "smb: //john@69.100.100.1" หากฉันคลิกที่โฟลเดอร์นั้นฉันจะเห็นเนื้อหาของโฟลเดอร์นั้น ทุกอย่างยอดเยี่ยม ดังนั้นเมื่อฉันเปิด terminal / shell ฉันพิมพ์ cd smb://john@69.100.100.1 ฉันได้รับข้อผิดพลาดที่บอกว่าไม่มีไดเรกทอรีนี้ ฉันจะเข้าสู่ไดเรกทอรีนี้ผ่านเชลล์ / เทอร์มินัลได้อย่างไร
23 bash  terminal  mount  smb 

3
การโยง backward-kill-word ถึง Ctrl + w
ฉันกำลังพยายามเปลี่ยนจากการใช้ Tcsh เป็นเวลานานเป็นการสำรวจล่าสุดของ Bash ฉันจัดการพอร์ตคุณสมบัติที่ชื่นชอบทั้งหมดยกเว้น Ctrl + w ที่ใช้ช่องว่างและเครื่องหมายทับเป็นขอบเขตของคำซึ่งเป็นไปได้มากว่า back-kill-word ใน Bash อย่างไรก็ตาม readline จะลบไปจนถึงช่องว่างแรกโดยลบเครื่องหมายทับทั้งหมดระหว่าง ฉันได้ลองใช้ชุด \ Cw: หลายแบบย้อนหลัง - ฆ่า - คำทั้ง .putrc และ. bashrc โดยใช้การโยง แต่ฉันไม่สามารถทำให้มันทำงานได้อย่างที่ต้องการ ตลกพอผ่าน Putty จาก Windows ในที่ทำงานฉันสามารถใช้ Alt + Backspace ซึ่งคู่มือบอกว่าเป็นการเชื่อมโยงเริ่มต้นเพื่อสร้างพฤติกรรมที่แน่นอนที่ฉันต้องการ แต่ใน Terminal.app บน Mac ของฉันที่บ้านมันไม่ทำงาน ไปเหมือนกันสำหรับเซิร์ฟเวอร์ FreeBSD หรือ Linux ใด ๆ ที่ฉันเคยเข้าสู่ระบบจาก Terminal.app …
23 bash  readline 

7
การรันคำสั่งแบบขนานพร้อมกับ จำกัด จำนวนคำสั่งพร้อมกัน
ตามลำดับ: for i in {1..1000}; do do_something $i; done- ช้าเกินไป แบบขนาน: for i in {1..1000}; do do_something $i& done- โหลดมากเกินไป วิธีรันคำสั่งแบบขนาน แต่ไม่เกิน 20 อินสแตนซ์ต่อนาที ตอนนี้มักจะใช้วิธีแฮ็for i in {1..1000}; do do_something $i& sleep 5; doneค แต่นี่ไม่ใช่ทางออกที่ดี อัปเดต 2 : แปลงคำตอบที่ยอมรับเป็นสคริปต์: http://vi-server.org/vi/parallel #!/bin/bash NUM=$1; shift if [ -z "$NUM" ]; then echo …

3
วิธีแทรกวันที่เป็นกลุ่ม
ในกลุ่มคุณสามารถรันคำสั่งด้วย "!" คุณสามารถรวมกับ "r" เพื่อแทรกผลลัพธ์ลงในบัฟเฟอร์ปัจจุบันของคุณ : r! date Fri 20 ก.ค. 09:39:26 SAST 2012 จะแทรกวันที่ลงในไฟล์ ตอนนี้เมื่อฉันพยายามทำสิ่งที่น่าสนใจเช่นวันที่ด้วยรูปแบบที่แตกต่างกัน +% F บนบรรทัดคำสั่ง $ date +% F 2012-07-20 ในกลุ่ม : r! date "+% F" message.to.followup.lstF สิ่งใดที่ทำให้ชื่อของไฟล์และทำให้ F หลังจากนั้น วิธีที่ r! date "+% F" ถูกขยายเป็นกลุ่มและไม่ทำงานบนบรรทัดคำสั่ง ฉันต้องทำอะไรเพื่อเรียกใช้เพื่อที่จะทำให้เนื้อหาเป็นกลุ่ม บางทีเสียงเรียกเข้ามีวิธีที่ดีกว่าในการแทรกวันที่ลงในไฟล์
23 linux  command-line  bash  vim  date 

7
มีโปรแกรมยูนิกซ์มาตรฐานที่คืนค่าตัวเลขหรือไม่
ฉันเรียนรู้การเขียนสคริปต์เชลล์จากตำราเรียนที่ล้าสมัยและฉันคิดว่ามันจะเป็นประโยชน์อย่างยิ่งที่จะมีโปรแกรมที่เพิ่งคืนค่าตัวเลขที่คั่นด้วยช่องว่างเช่น $ range 10 20 10 11 12 13 14 15 16 17 18 19 20 จากนั้นถ้าคุณทำสคริปต์เชลล์คุณสามารถมี for i in `range 10 20`; do some stuff with numbers in that range;done สิ่งนั้นมีอยู่จริงหรือฉันต้องเขียนเอง?
22 bash  unix 

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