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

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

8
awk หรือ sed เพื่อพิมพ์เล็ก / พิมพ์ใหญ่อักขระเดียวในสตริง?
มีวิธีการตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็กเพียงตัวเดียวในบางสาย? ตัวอย่างอินพุต: syslog_apr_24_30 syslog_mar_01_17 ผลลัพธ์ที่ต้องการ: syslog_Apr_24_30 syslog_Mar_01_17 หมายเหตุโปรดเริ่มต้นตัวพิมพ์ใหญ่ของเดือน ฉันลองแล้วawkแต่ยังไม่ดีพอที่จะทำให้มันทำงานได้
13 bash  sed  awk 

1
วิธีการเปิดใช้งาน Virtualenv เมื่อสคริปต์ Python เริ่มทำงาน?
ฉันต้องการที่จะกำหนดเวลาหลามสคริปต์เพื่อเรียกใช้ cron ในบางวันปัญหาคือว่าเพื่อให้example.pyการทำงานexample-envจะต้องมีการเปิดใช้งานจะมีวิธีที่จะทำให้การexample.pyเปิดใช้งาน virtualenv ของตัวเองเมื่อใดก็ตามที่ cron ดำเนินการได้หรือไม่ ถ้าไม่เช่นนั้นฉันต้องสร้างสคริปต์ทุบตีbash.shที่มี #!/usr/bin/env bash workon example-env python2 example.py แล้วกำหนดเวลาที่จะดำเนินการโดย cron ในบางวัน? หรือฉันต้องทำอย่างอื่น? ทั้งสองวิธีใช้ได้กับฉันฉันแค่อยากรู้วิธีที่ถูกต้องในการทำ บางทีฉันอาจชอบวิธีการทุบตีสคริปต์เนื่องจากฉันมีไฟล์ Python จำนวนมากที่จะทำงานดังนั้นถ้าฉันวางไว้ในสคริปต์ทุบตีและกำหนดเวลานั้นดูเหมือนว่าง่ายกว่าสำหรับฉัน แต่อีกครั้งฉันไม่รู้วิธีที่ถูกต้องที่จะทำ ดังนั้นฉันขอคำแนะนำ

2
คำพูดซ้อนใน subshells
ว่าฉันต้องใช้อัญประกาศเพื่อสรุปผลลัพธ์ subshell เช่น: DATA="$(cat file.hex | xxd -r)" แต่ฉันต้องทำรังสิ่งเช่นนี้: DATA="$(cat file.hex | xxd -r | tr -d \"$(cat trim.txt)\")" ฉันไม่สามารถใช้เครื่องหมายคำพูดเดี่ยวได้เพราะสิ่งเหล่านั้นไม่ได้ขยายตัวแปรที่อยู่ข้างใน การหลีกเลี่ยงการพูดไม่ทำงานเพราะมันเป็นเสมือนข้อความแฝง ฉันจะจัดการสิ่งนี้ได้อย่างไร

7
การผสมตัวอักษรและตัวเลขที่เป็นไปได้ทั้งหมด
ดังนั้นฉันต้องการสร้างชุดค่าผสมที่เป็นไปได้ทั้งหมดของอักขระตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และตัวเลขที่สามารถสร้างสตริงอักขระได้ 5 ตัว ความเป็นไปได้: a..z, A..Z และ 0..9 มีวิธีที่สง่างามของการทำเช่นนี้ในการทุบตีเลยหรือไม่?
13 bash 

2
เหตุใดฉันไม่สามารถโหลดโมดูลในขณะที่เรียกใช้งานสคริปต์ทุบตีของฉัน แต่เมื่อทำการจัดหาเท่านั้น
ฉันใช้โมดูลเพื่อควบคุมแพ็คเกจบนระบบของฉันและฉันได้python/2.7.2ติดตั้งเป็นโมดูล ฉันมีปฏิบัติการหลามง่ายpython_exe.pyที่ฉันจะโทรจากง่าย 'ขับรถ' runit.shสคริปต์ runit.shสคริปต์ดูเหมือนว่า: #!/bin/bash module load python/2.7.2 arg1=myarg1 arg2=15 arg3=$5 /path/to/python_exe.py -a $arg1 -b $arg2 -c $arg3 Howver เมื่อฉันเพิ่งเรียกใช้./runit.shมันขาย "โมดูล: คำสั่งไม่พบ" source runit.shอย่างไรก็ตามเมื่อฉันโหลดโมดูลอย่างถูกต้อง ทำไมนี้
13 bash  shell  python 

5
แบ่งปันตัวแปรสภาพแวดล้อมระหว่างการทุบตีและปลา
สคริปต์ทุบตีและปลาเข้ากันไม่ได้ แต่ฉันต้องการไฟล์ที่กำหนดตัวแปรสภาพแวดล้อมบางอย่างที่จะเริ่มต้นได้โดยทั้งทุบตีและปลา โซลูชันที่เสนอของฉันกำลังกำหนด~/.envไฟล์ที่จะมีรายการตัวแปรสภาพแวดล้อมเช่น: PATH="$HOME/bin:$PATH" FOO="bar" จากนั้นฉันก็สามารถเขียนมันลงในทุบตีและสร้างสคริปต์ที่แปลงเป็นรูปแบบปลาและแหล่งที่มาในปลา ฉันคิดว่าอาจมีทางออกที่ดีกว่านี้ดังนั้นฉันจึงขอวิธีที่ดีกว่าในการแบ่งปันตัวแปรสภาพแวดล้อมระหว่างปลาทุบตี หมายเหตุ: ฉันใช้ OS X นี่คือ.envไฟล์ตัวอย่างที่ฉันต้องการให้ทั้งปลาและทุบตีจัดการโดยใช้ไวยากรณ์ของปลาที่น่าขัน (สมมติว่า ~ / bin และ ~ / bin2 เป็นไดเรกทอรีว่าง): setenv _PATH "$PATH" setenv PATH "$HOME/bin" setenv PATH "$PATH:$HOME/bin2" setenv PATH "$PATH:$_PATH"

1
ดำเนินการกระบวนการที่ถูกหยุดชั่วคราวต่อในลูป
ฉันกำลังวิ่งอยู่ในทุบตี: for i in ull-*.pbm; do convert $i tmp2/$i.pdf ; done ฉันCtrl-Zอยู่ในระหว่างการทำงานและจากนั้นfgid งานของมัน แต่การวนซ้ำที่เหลือยังไม่เสร็จสิ้น ฉันสงสัยว่าทำไม?
13 bash 

3
ควบคุมว่ากระบวนการใดที่จะถูกยกเลิกโดย Ctrl + C
ฉันมีซีดีสดที่บูทเข้าสู่ Linux และรันสคริปต์ Bash ขนาดเล็ก สคริปต์ค้นหาและเรียกใช้โปรแกรมที่สอง (ซึ่งมักจะเป็นไบนารี C ++ ที่คอมไพล์แล้ว) คุณควรจะสามารถที่จะยกเลิกโปรแกรมที่สองโดยการกด+Ctrl Cสิ่งที่ควรเกิดขึ้นก็คือโปรแกรมที่สองหยุดทำงานและสคริปต์ Bash ยังคงทำงานต่อไป สิ่งที่เกิดขึ้นจริงคือทั้งแอปพลิเคชันหลักและสคริปต์ Bash ยุติ ซึ่งเป็นปัญหา ดังนั้นฉันจึงใช้trapbuiltin เพื่อบอก Bash ให้เพิกเฉย SIGINT และตอนนี้Ctrl+ Cยกเลิกแอปพลิเคชัน C ++ แต่ Bash ยังคงทำงานต่อไป ยิ่งใหญ่ โอ้ใช่ ... บางครั้ง "แอปพลิเคชั่นที่สอง" เป็นสคริปต์ Bash อื่น และในที่กรณีCtrl+ Cตอนนี้จะไม่มีอะไร แต่อย่างใด เห็นได้ชัดว่าฉันเข้าใจว่าสิ่งนี้ทำงานอย่างไร ... ฉันจะควบคุมกระบวนการใดที่จะได้รับ SIGINT เมื่อผู้ใช้กดCtrl+ C? ฉันต้องการนำสัญญาณนี้ไปยังกระบวนการที่ระบุเพียงกระบวนการเดียว
13 bash  signals 

3
จัดรูปแบบเอาต์พุตของ cputime สำหรับ ps
ฉันพยายามเขียนสคริปต์ที่สามารถตรวจสอบการใช้งาน CPU ของกระบวนการในช่วงเวลาหนึ่ง (เพื่อสร้างกราฟ) จนถึงตอนนี้เป็นคำสั่งที่ฉันใช้ ps -p $PROCID -o cputime,etimes ข้อกังวลเดียวของฉันคือผลลัพธ์ของ cputime ดูเหมือนจะเป็น[dd]hh:mm(หรือสิ่งที่คล้ายกันไม่สามารถจำด้านบนของหัวของฉันตอนนี้) มีวิธีการจัดรูปแบบ cputime ในไม่กี่วินาทีเช่น etime -> etimes เพื่อให้ได้เวลาที่ผ่านไปในไม่กี่วินาที? แก้ไข: นี่คือผลลัพธ์ที่ฉันได้รับในขณะนี้ 2-03:01:33 2653793 ฉันต้องการพารามิเตอร์แรกที่จัดรูปแบบเป็นวินาทีไม่ใช่วันชั่วโมง: นาที: วินาที

1
วิธีการซิงค์ประวัติคำสั่งเซสชันเทอร์มินัลในทุบตี?
ฉันพยายามค้นหา~/.bash_historyคำสั่งล่าสุดของฉันขณะที่อยู่ในเซสชันเทอร์มินัล แต่พวกเขาไม่ได้อยู่ที่นั่น ฉันเดาว่าเป็นเพราะฉันเปิดเซสชันเทอร์มินัลหลายครั้ง มีวิธีที่ฉันสามารถซิงค์ (เช่น sync-push หรือ sync-write-out) ประวัติคำสั่งของเทอร์มินัลเซสชันปัจจุบันลงในไฟล์ bash_history (โดยไม่ต้องปิดเซสชันและสูญเสียสภาพแวดล้อมนั้น) หรือไม่ (มันจะคล้ายกันในระยะไกลในความคิดกับวิธีที่syncคำสั่งเก็บการแก้ไขระบบไฟล์ในบางระบบ) ฉันคิดว่าฉันสามารถตั้งค่า bash เพื่อเก็บรักษาประวัติเซสชันได้หลายครั้ง แต่ความสามารถในการพุชบัฟเฟอร์ประวัติปัจจุบันจะยังคงมีประโยชน์ในสถานการณ์เมื่อคุณทำงานกับเครื่องใหม่และคุณลืมตั้งค่า bash อย่างที่คุณอาจต้องการ .

2
การสื่อสารระหว่างหลายกระบวนการ
ฉันมีสคริปต์ทุบตีซึ่งทำงานเป็นผู้จัดการ () ฟังก์ชั่นเป็นกระบวนการที่แยกต่างหากสำหรับ x- ครั้ง เป็นไปได้อย่างไรที่จะส่งต่อข้อความถึงกระบวนการทั้งหมด () จากผู้จัดการภายในสคริปต์? ฉันได้อ่านเกี่ยวกับไพพ์นิรนามแล้ว แต่ฉันไม่รู้ว่าจะแชร์ข้อความกับมันได้อย่างไรฉันลองทำมันด้วยชื่อไพพ์ แต่ดูเหมือนว่าฉันจะต้องสร้างไพพ์ที่มีชื่อแยกต่างหากสำหรับแต่ละกระบวนการ? วิธีที่สง่างามที่สุดในการทำเช่นนี้คืออะไร? นี่คือรหัสของฉัน: #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x & x=$(( $x + 1 )) done while : do …

2
ตรวจสอบการอ้างอิงสคริปต์ bash / shell
มีวิธี / คำสั่งเพื่อตรวจสอบการพึ่งพาของ bash script หรือไม่ กล่าวอีกนัยหนึ่งการตอบคำถามนี้: ผู้ใช้ควรติดตั้งไลบรารีใดเพื่อเรียกใช้สคริปต์ ฉันสามารถทำได้ด้วยตนเองโดยการอ่านสคริปต์และตรวจสอบว่าไลบรารี / คำสั่งอื่น ๆ เรียกใช้ แต่สิ่งนี้ไม่ชัดเจนสำหรับสคริปต์แบบยาว

4
การพิมพ์อาเรย์ไปยังไฟล์ด้วยองค์ประกอบของอาเรย์ในบรรทัดใหม่ในทุบตี
ฉันพยายามเนื้อหาของอาเรย์เป็นไฟล์ที่มีองค์ประกอบของอาเรย์ในแต่ละบรรทัดในบรรทัดใหม่ในไฟล์ IFS=$'\n' echo "${mtches[@]}" > sample1.txt เนื้อหาของ mtches คือ "qwe" และ "asd" แต่sample1.txtไฟล์มีqwe asdอยู่ในบรรทัดเดียว ทำไมการไม่ใช้ค่า IFS ในภาพ
13 bash 

5
วิธีการจับข้อผิดพลาดในสคริปต์ทุบตีลินุกซ์?
ฉันทำสคริปต์ต่อไปนี้: # !/bin/bash # OUTPUT-COLORING red='\e[0;31m' green='\e[0;32m' NC='\e[0m' # No Color # FUNCTIONS # directoryExists - Does the directory exist? function directoryExists { cd $1 if [ $? = 0 ] then echo -e "${green}$1${NC}" else echo -e "${red}$1${NC}" fi } # EXE directoryExists "~/foobar" directoryExists "/www/html/drupal" สคริปต์ทำงานได้ แต่ข้างก้องของฉันก็มีเอาต์พุตเมื่อ cd …

3
เป็นไปได้หรือไม่ที่จะใช้คำสั่ง builtin กับ Bash?
ได้รับแรงบันดาลใจจากคำถามนี้ชื่อ: เมื่อใดที่คำสั่งในตัวถูกโหลดไปยังหน่วยความจำในขณะที่พยายามตอบคำถามนี้ฉันลองใช้คำสั่งต่อไปนี้และรู้สึกประหลาดใจเล็กน้อยที่ฉันไม่สามารถเรียกใช้: $ strace cd $HOME มีวิธีที่ฉันสามารถใช้เพื่อรัน strace สำหรับคำสั่ง builtin เพื่อ Bash หรือไม่?
13 bash  debugging  strace 

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