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

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

6
บอกได้ทันทีว่าเอาต์พุตใดถูกส่งไปที่ stderr
เมื่อทำงานอัตโนมัติเป็นเรื่องที่สมเหตุสมผลที่จะทดสอบด้วยตนเองก่อน มันจะมีประโยชน์ แต่ถ้าข้อมูลใด ๆ ที่ไปถึง stderr นั้นสามารถจดจำได้ทันทีเช่นนี้และแยกแยะได้จากข้อมูลที่จะ stdout และให้เอาท์พุททั้งหมดเข้าด้วยกันดังนั้นจึงเป็นที่ชัดเจนว่าลำดับเหตุการณ์คืออะไร สัมผัสสุดท้ายที่ดีถ้าอยู่ที่ทางออกของโปรแกรมมันจะพิมพ์รหัสส่งคืน ทุกสิ่งเหล่านี้จะช่วยในการทำให้เป็นอัตโนมัติ ใช่ฉันสามารถสะท้อนกลับรหัสเมื่อโปรแกรมเสร็จสิ้นและใช่ฉันสามารถเปลี่ยนเส้นทาง stdout และ stderr; สิ่งที่ฉันชอบเปลือกหอยสคริปต์หรือตัวเปลี่ยนเส้นทางที่ใช้งานง่ายซึ่งแสดง stdout เป็นสีดำแสดง stderr interleaved ด้วยสีแดงและพิมพ์รหัสทางออกที่ท้าย มีสัตว์ร้ายเช่นนี้ไหม? [หากเป็นเรื่องสำคัญฉันกำลังใช้ Bash 3.2 บน Mac OS X] อัปเดต : ขออภัยเป็นเวลาหลายเดือนแล้วตั้งแต่ฉันได้ดูสิ่งนี้ ฉันมากับสคริปต์ทดสอบง่ายๆ: #!/usr/bin/env python import sys print "this is stdout" print >> sys.stderr, "this is stderr" print "this is …
8 bash  colors  stderr 

2
สีในการเชื่อมต่อ SSH
ฉันมี terminal bash ที่มีสีสัน (เช่น ls และ vim แสดงสีเมื่อกำหนดค่าให้ทำ) ฉันจะมีสีเหล่านี้เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลผ่าน ssh ได้อย่างไร
8 linux  bash  ssh  colors 

3
เพิ่มสาขา git เพื่อทุบตีพร้อม ๆ กับเสือดาวหิมะ
ฉันใช้สิ่งนี้: $(__git_ps1 '(%s)') มันใช้งานได้ แต่มันไม่อัปเดตเมื่อฉันเปลี่ยนไดเรกทอรีหรือชำระเงินสาขาใหม่ ฉันมีนามแฝงนี้ด้วย: alias reload='. ~/.bash_profile' วิ่งตัวอย่าง: user@machine:~/dev/rails$cd git_folder/ user@machine:~/dev/rails/git_folder$reload user@machine:~/dev/rails/git_folder(test)$git checkout master Switched to branch 'master' user@machine:~/dev/rails/git_folder(test)$reload user@machine:~/dev/rails/git_folder(master)$ อย่างที่คุณเห็นมันถูกตั้งค่าอย่างถูกต้อง แต่ถ้าฉันโหลด bash_profile อีกครั้ง ฉันเสียเวลาไปมากกับเรื่องนี้ ฉันกำลังใช้ทุบตีเสือดาวหิมะ กรุณาช่วย! แก้ไข: คุณสามารถเห็น dotfiles ของฉันบน github และตั้งค่าไฟล์ PS1 ที่นี่

2
เมื่อใดจึงควรใช้ egrep แทน grep
ตอนนี้ฉันกำลังเตรียมตัวสำหรับการประเมินเทอร์มินัล Linux ฉันลองใช้ Google และพบว่าทรัพยากรส่วนใหญ่อ้างถึง "grep" พื้นฐานมากกว่า "egrep" ที่ทรงพลังมากกว่า - นั่นคืออย่างน้อยสิ่งที่อาจารย์พูดในการบรรยาย ฉันมักจะทำงานกับกลุ่มตัวอย่างเล็ก ๆ เสมอดังนั้นการปรับแต่งประสิทธิภาพก็เป็นเรื่องที่ไกลเกินไป ดังนั้นโดยทั่วไปฉันต้องการทราบว่ามีพื้นที่ใดบ้างที่ฉันต้องเปลี่ยนเป็น egrep เพื่อทำในวิธีที่ดีกว่า ปลอดภัยหรือไม่ที่จะทำงานกับ "grep" พื้นฐานในตอนนี้ จะมีความเสี่ยงหรือไม่? ขออภัยเกี่ยวกับความรู้ที่ จำกัด ของฉันเกี่ยวกับคำสั่งเชลล์ Linux หน้า man ดูเหมือนจะเป็นเขาวงกตและโดยสุจริตฉันไม่ได้ใช้เวลามากในการทำความเข้าใจคุณสมบัติทั้งหมดที่ทั้งสองคำสั่งให้
8 linux  bash 

5
ฉันจะกำหนดสีของข้อความแสดงข้อผิดพลาดใน Bash ได้อย่างไร
เป็นไปได้หรือไม่ที่จะปรับแต่งแอตทริบิวต์ข้อความแสดงข้อผิดพลาดของ Bash ตัวอย่างเช่นเป็นไปได้ที่จะแก้ไข .bash_profile เพื่อรับข้อความแสดงข้อผิดพลาด Bash ต่อไปนี้ -bash: cd: foo: No such file or directory ในสีแดง?
7 linux  bash 

5
วิธีการแยกสตริงด้วยอัญประกาศ (เช่นอาร์กิวเมนต์คำสั่ง) ในทุบตี?
ฉันมีสตริงเช่นนี้: "aString that may haveSpaces IN IT" bar foo "bamboo" "bam boo" ฉันต้องการแยกมันออกเป็นดังนี้ aString that may haveSpaces IN IT bar foo bamboo bam boo ฉันจะทำอย่างไร (ควรใช้ซับเดียว)

3
วิธีเปลี่ยนเส้นทางไปยัง stdin ของ bash shell ที่กำลังทำงานอยู่
ตามทฤษฎีแล้วถ้าฉันรู้ pid ของ bash shell ที่กำลังรันอยู่ฉันสามารถรัน cat ที่ stdout ถูกเปลี่ยนทิศทางไปยัง stdin ของเชลล์นั้น ดูเหมือนว่าฉันจะพิมพ์บางอย่างบนเปลือกนั้น น่าเสียดายที่มีกระแสข้อมูลมาจาก cat แต่จะไม่ทำให้เชลล์ทำงานอย่างถูกต้อง (คำสั่งที่ป้อนจาก cat จะไม่ถูกดำเนินการโดย bash) เปิดเทอร์มินัล: ps -ef | grep bash ymf 4906 4887 0 16:19 pts/0 00:00:00 /bin/bash บนเทอร์มินัลอื่น: cat 1> /proc/4906/fd/0 echo 'hello!' ทำไม?

6
เกิดอะไรขึ้นกับสคริปต์ทุบตีของฉันเพื่อเก็บไฟล์ x ล่าสุดและลบส่วนที่เหลือ
ฉันมีสคริปต์ทุบตีนี้ซึ่งสำรองฐานข้อมูลของฉันในกำหนดการ cron: #!/bin/sh PT_MYSQLDUMPPATH=/usr/bin PT_HOMEPATH=/home/philosop PT_TOOLPATH=$PT_HOMEPATH/philosophy-tools PT_MYSQLBACKUPPATH=$PT_TOOLPATH/mysql-backups PT_MYSQLUSER=********* PT_MYSQLPASSWORD="********" PT_MYSQLDATABASE=********* PT_BACKUPDATETIME=`date +%s` PT_BACKUPFILENAME=mysqlbackup_$PT_BACKUPDATETIME.sql.gz PT_FILESTOKEEP=14 $PT_MYSQLDUMPPATH/mysqldump -u$PT_MYSQLUSER -p$PT_MYSQLPASSWORD --opt $PT_MYSQLDATABASE | gzip -c > $PT_MYSQLBACKUPPATH/$PT_BACKUPFILENAME ปัญหานี้คือมันจะทิ้งสำรองข้อมูลในโฟลเดอร์และไม่ทำความสะอาดไฟล์เก่า นี่คือที่ตัวแปร PT_FILESTOKEEP เข้ามาสิ่งใดก็ตามที่จำนวนนี้ถูกตั้งค่าเป็นจำนวนเงินสำรองที่ฉันต้องการเก็บไว้ การสำรองข้อมูลทั้งหมดจะถูกประทับเวลาดังนั้นเมื่อสั่งซื้อด้วยชื่อ DESC จะให้ข้อมูลล่าสุดแก่คุณก่อน ทุกคนสามารถช่วยฉันด้วยส่วนที่เหลือของสคริปต์ BASH เพื่อเพิ่มการล้างไฟล์? ความรู้เรื่องการทุบตีของฉันขาดไปและฉันไม่สามารถแยกรหัสเพื่อทำส่วนที่เหลือ
7 linux  bash  backup 

2
เขียน n ไบต์จากไฟล์หนึ่งไปอีกอันหนึ่งใน Bash
สวัสดีฉันจะเขียนnไบต์จากไฟล์หนึ่งไปเป็นไฟล์ใหม่โดยเริ่มจากkตำแหน่งโดยใช้ Bash ได้อย่างไร ตัวอย่างเช่นถ้า n = 60, k = 1 และขนาดไฟล์ = 100 ดังนั้น: ไฟล์ที่ 2 จะประกอบด้วยตั้งแต่ไบต์ที่ 1 จนถึง 60 ไบต์และจะมีขนาด 60 ไบต์ ตัวอย่างเช่นถ้า n = 40, k = 61 และขนาดไฟล์ = 100 ดังนั้น: ไฟล์ที่ 2 จะประกอบด้วยตั้งแต่ 61st ไปจนถึง 100 ไบต์และจะมีขนาด 40 ไบต์ อาจเป็นไปได้ว่าเรากำลังทำงานกับไฟล์ไบนารีไม่ใช่ไฟล์ ASCII ดังนั้นการต่อข้อมูล 2 ส่วนควรจะเหมือนกับไฟล์ต้นฉบับ! (เป็นไปได้ด้วยddหรือไม่)

3
เรียกใช้ mplayer จากการทุบตีในพื้นหลังโดยไม่ต้องทุบตีพิเศษ
ฉันต้องการดูภาพยนตร์mplayerจากbashเบื้องหลังฉันเหมือนกับโปรแกรมทั้งหมดและไม่เคยมีปัญหาใด ๆ : mplayer Kick* & หากคุณต้องการดู Kickboxer เช่น แต่นี่ไม่ได้เปิดหน้าต่าง แต่มันบอกว่ากระบวนการหยุด ฉันสามารถเปิดหน้าต่างภาพยนตร์ขึ้นมาได้fg mplayerแต่ CLI ไม่พร้อมใช้งาน (นี่คือเท่าที่ฉันเห็นต่อไป - เทียบเท่าmplayer Kick*) ฉันสามารถแก้ไขปัญหาเช่นนี้: $(mplayer Kick*) & แต่จากนั้นฉันได้รับ bashes เพิ่มอีกสองรายการ (ฉันเห็นสิ่งนี้ด้วยps) มันไม่ได้เป็นปัญหาจริงๆเพราะสิ่งเหล่านั้นปิดตัวลงเมื่อฉันAlt-F4ภาพยนตร์ แต่ก็ยังไม่เป็นที่พึงปรารถนา ฉันคิดว่าฉันรำคาญที่สุดที่ต้องพิมพ์สิ่งพิเศษนั้นดังนั้นถ้าคุณคิดนามแฝงหรือฟังก์ชั่น แม้ว่ามันจะไม่ทำร้ายฉันที่จะเรียนรู้สิ่งที่เกิดขึ้น
7 bash  mplayer 

1
ทำไมคุณไม่อ่านบรรทัดที่มีเครื่องหมาย“ for” ใน bash?
ฉันอ่านว่าการใช้ "สำหรับ" ไม่ใช่วิธีที่ดีในการอ่านบรรทัดในการทุบตี หลายคนบอกว่านี่เป็นสิ่งที่ซุ่มซ่ามและไม่มีประสิทธิภาพและล้มเหลวในหลาย ๆ กรณี ฉันต้องการทราบว่าวิธีที่ดีที่สุดในการอ่านบรรทัดเป็นทุบตีคืออะไร ขอบคุณ ตัวอย่างเช่น: $ for i in $(<afile); do echo "$i"; done
7 bash  readline 

2
ตัด newline ต่อท้ายในนามแฝงทุบตีซับ
ฉันกำลังพยายามเขียนนามแฝงง่ายๆบนเทอร์มินัล Mac OS X ของฉันเพื่อคัดลอกไดเรกทอรีการทำงานปัจจุบัน ฉันมีสิ่งนี้: alias cpwd="echo \`pwd\` | pbcopy; echo \"Copied \`pwd\`\"" จากนั้นฉันสามารถเรียกใช้สิ่งต่อไปนี้เพื่อคัดลอก: $ cpwd ปัญหาคือecho pwdมีการขึ้นบรรทัดใหม่ในตอนท้าย ดังนั้นเมื่อฉันวางมันจะทำงานทันที (ถ้าวางในเทอร์มินัล) สิ่งที่ฉันต้องการทำคือตัดการขึ้นบรรทัดใหม่ของการทดลอง แต่ไม่มีสิ่งใดที่ฉันพบบนอินเทอร์เน็ตดูเหมือนจะเหมาะกับฉัน เห็นวิธีการแก้ปัญหาต่าง ๆ ที่เกี่ยวข้องกับการsed, awkและcutแต่ฉันไม่สามารถค่อนข้างได้รับมัน ดูเหมือนว่ามันจะง่ายที่จะทำ

2
เพิ่ม / usr / local / sbin ไปยัง PATH ของผู้ใช้ [ซ้ำ]
คำถามนี้มีคำตอบอยู่ที่นี่แล้ว: PATH และตัวแปรสภาพแวดล้อมอื่น ๆ คืออะไรและฉันจะตั้งค่าหรือใช้งานได้อย่างไร 4 คำตอบ ถ้าฉันพิมพ์ echo $PATH ฉันได้รับเท่านั้น / usr / local / bin: / usr / bin: / bin: / usr / local / เกม: / usr / เกม ฉัน/usr/local/sbinจะเพิ่มเส้นทางได้อย่างไรดังนั้นจึงมีอยู่แล้วในครั้งถัดไป (ฉันใช้เดเบียนบีบ)
7 bash  debian  path 

2
สมาร์ทแท็บเสร็จสมบูรณ์ (สำหรับไดเรกทอรี)
มีรุ่นของเชลล์ที่มีแท็บที่ชาญฉลาดมากขึ้นหรือไม่ ฉันต้องการพิมพ์ cd foo-<TAB> จากนั้นมันจะแสดงความสมบูรณ์ที่เป็นไปได้พร้อมกับตัวเลขที่ฉันสามารถพิมพ์เพื่อเลือกหนึ่งในนั้นได้: cd foo-<TAB> (1) foo-bar1 (2) foo-bar2 (3) foo-bad ดังนั้นหลังจากที่<TAB>ฉันจะพิมพ์และมันจะพาฉันไป3 foo-badหรือมิฉะนั้นให้ใช้ปุ่มลูกศรแทนการพิมพ์ตัวเลขก็ได้

2
อัพเดต mtime ของไฟล์ด้วยตนเองใน UNIX
เป็นไปได้ไหมที่จะเปลี่ยนวันที่ของไฟล์บนระบบ UNIX ด้วยตนเอง ถ้าเป็นเช่นนั้นฉันจะแก้ไขปัญหานี้ได้อย่างไร ฉันจะทำสิ่งเดียวกันในหลายไฟล์พร้อมกันได้อย่างไร
6 linux  bash  unix 

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