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

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

1
'ls' แสดงไฟล์ที่เหมือนกันสองไฟล์ในไดเรกทอรี
อย่างใดคำสั่งlsดูเหมือนว่าจะแสดงให้ฉันสองไฟล์ที่เหมือนกันในไดเรกทอรี $ ls -Blah /System/Library/LaunchDaemons total 32 drwxr-xr-x 266 root wheel 8.8K Jun 18 10:41 . drwxr-xr-x 79 root wheel 2.6K Mar 31 12:28 .. [redacted] -rw-r--r-- 1 root wheel 715B Jun 18 10:36 tftp.plist -rw-r--r-- 1 root wheel 715B Jun 18 10:35 tftp.plist ฉันสามารถย้ายเปลี่ยนชื่อแก้ไข ฯลฯ ไฟล์อย่างใดอย่างหนึ่ง แต่อีกอันหนึ่งดูเหมือนจะไม่อยู่ที่นั่นด้วยซ้ำ bashความสมบูรณ์ของแท็บจะแสดงไฟล์ที่เหมือนกัน ตัวอย่างเช่นป้อนต่อไปนี้แล้วกดปุ่ม …
14 bash  osx  ls 

1
ทุบตีเวลาด้วย nohup
ฉันต้องการที่จะรู้ว่าต้องใช้เวลานานแค่ไหนในการทำงานบางอย่างในเวลาไม่นาน ฉันรู้ว่างานนี้: $ time sleep 2 real 0m2.001s user 0m0.000s sys 0m0.001s แต่ทำไมมันไม่ทำงานกับ nohup? $ nohup time sleep 2 & [1] 29456 $ nohup: ignoring input and appending output to 'nohup.out' nohup: failed to run command 'time': No such file or directory [1]+ Exit 127 nohup time sleep 2
14 bash  time 

1
ใครสามารถอธิบายวิธีใช้ฝูงและอธิบายไฟล์เพื่อล็อคไฟล์และเขียนไปยังไฟล์ที่ถูกล็อค?
เปลือยกับฉันเมื่อฉันยังใหม่กับflockเครื่องมือและฉันไม่ได้ใช้ตัวอธิบายไฟล์เท่าที่ฉันรู้ resp.txtฉันมีสคริปต์ทุบตีที่ทำให้คำขอม้วนและเขียนออกไปยังไฟล์ที่เรียกว่า ฉันต้องสร้างการล็อคแบบเอกสิทธิ์เพื่อที่ฉันจะสามารถเขียนไปยังไฟล์นั้นและไม่ต้องกังวลกับผู้ใช้หลายคนที่เรียกใช้สคริปต์และแก้ไขไฟล์ข้อความในเวลาเดียวกัน นี่คือรหัสที่ฉันคาดว่าจะล็อคไฟล์ดำเนินการตามคำขอและเขียนไปยังไฟล์ข้อความ: ( flock -e 200 curl 'someurl' -H 'someHeader' > resp.txt ) 200>/home/user/ITS/resp.txt นี่เป็นวิธีที่ถูกต้องที่จะไปเกี่ยวกับเรื่องนี้? สคริปต์จริงของฉันยาวกว่านี้นิดหน่อย แต่ดูเหมือนจะแตกเมื่อฉันเพิ่มflockไวยากรณ์ลงในสคริปต์ทุบตี หากใครบางคนสามารถอธิบายวิธีการทำงานของไฟล์ descriptors เหล่านี้และแจ้งให้เราทราบว่าฉันกำลังล็อคไฟล์อย่างถูกต้องหรือไม่!
14 linux  bash 

4
รับชุดค่าผสมที่เป็นไปได้ทั้งหมดของคำด้วยตัวอักษรตัวพิมพ์เล็ก / ตัวพิมพ์ใหญ่
ฉันต้องการเขียนสคริปต์ทุบตีเพื่อพิมพ์วิธีเรียงสับเปลี่ยนตัวพิมพ์เล็กและใหญ่ที่เป็นไปได้ทั้งหมดเช่นฮาร์เลย์: harley harleY harlEy harLey ... HARLey HARLEy HARLEY โซลูชันไร้เดียงสาของฉันคือการเขียน n-th (n คือ len (คำ)) ซ้อนสำหรับลูปสำหรับคำเฉพาะนี้: #!/bin/bash for a in {h,H}; do for b in {a,A}; do ... done done อย่างไรก็ตามฉันจะต้องเขียนโค้ดสำหรับคำอื่นอีกครั้ง มีวิธีที่ดีกว่าในการบรรลุเป้าหมายนี้หรือไม่?
14 bash  string 

3
วิธีกำจัดสิ่งรบกวนเมื่อเริ่มต้น GUI จากเทอร์มินัล
ฉันต้องการเปิดใช้งานแอปพลิเคชัน GUI จากหน้าต่างเทอร์มินัลแทนที่จะใช้กราฟิกเดสก์ท็อป สิ่งที่น่ารำคาญก็คือบ่อยครั้งที่นักพัฒนาไม่ได้คาดหวังการใช้งานประเภทนี้ดังนั้นแอพจะพิมพ์ข้อความที่ไร้ประโยชน์เป็นความลับหรือไร้ประโยชน์มากมายไปยัง stdout หรือ stderr ความยุ่งเหยิงเพิ่มเติมบนเครื่องเทอร์มินัลเกิดขึ้นเนื่องจากการเรียกใช้โปรแกรมในเบื้องหลังโดยมี & จะสร้างรายงานการสร้างและการยกเลิกงาน วิธีแก้ปัญหาสำหรับปัญหาเหล่านี้ที่จะยอมรับอาร์กิวเมนต์บรรทัดคำสั่งและจัดการการเติมข้อความอัตโนมัติคืออะไร ที่เกี่ยวข้อง: /programming/7131670/make-bash-alias-that-takes-parameter

1
เป็นไปได้ที่จะใช้เอกสารที่นี่หลายรายการในทุบตี?
หนึ่งสามารถใช้ที่นี่หลายเอกสารเพื่อให้ข้อมูลกับคำสั่งในทุบตี? $ cat <<<foo <<<bar bar $ cat <<EOF1 <<EOF2 > foo > EOF1 > bar > EOF2 bar เห็นได้ชัดว่าในทั้งสองกรณีเอกสาร here-doc ที่สองถูกใช้เป็น stdin และแทนที่การอ้างอิงแรก เป็นวิธีการใช้งานechoของแทนหรือไม่? $ cat <(echo -n foo) <(echo bar) foobar นอกจากนี้ด้วยเหตุผลบางอย่างการใช้ชุดค่าผสมไม่ได้ผลสำหรับฉัน ทำไมถึงเป็นเช่นนั้น? $ cat <<<foo <(echo bar) bar $ cat <(echo -n foo) <<<bar foo

5
ย้ายทุกไฟล์ที่ไม่ใช่ไดเรกทอรี
ฉันมีไดเรกทอรีที่ฉันพยายามล้างออกที่มีทั้งไฟล์และไดเรกทอรีย่อย สิ่งที่ฉันพยายามทำนั้นง่ายมาก: ย้ายไฟล์ทั้งหมดไปยังไดเรกทอรีอื่น แต่ปล่อยให้ทุกไดเรกทอรีย่อยตามที่เป็น ฉันกำลังคิดเช่น: mv [*_but_no_dirs] ./other_directory ดูเหมือนว่าควรมีวิธีง่ายๆในการทำเช่นนี้กับ wildcard *และ regex ... ใครมีแนวคิดบ้าง
14 bash  directory  wildcards  mv 

1
ทำไมทุบตี encapsulate ข้อผิดพลาดทางไวยากรณ์ทั้งด้วยสำเนียงหลุมฝังศพและเครื่องหมายวรรคตอน?
`...'เมื่อทุบตีมีการรายงานข้อผิดพลาดทางไวยากรณ์ก็ห่อหุ้มข้อความที่ได้ยกไวยากรณ์ผิดพลาดทั้งสองด้วยสำเนียงหลุมฝังศพและมีเครื่องหมายวรรคตอนเช่นนี้ มีความคิดอะไรบ้าง นี่คือตัวอย่าง: $ bash -c "echo error()" bash: -c: line 0: syntax error near unexpected token `(' bash: -c: line 0: `echo error()' สิ่งนี้ไม่ธรรมดามาก อย่างไรก็ตามฉันแค่อยากรู้ว่านี่ไม่ใช่ปัญหาจริง แก้ไข:สิ่งนี้ทำให้ข้อความแปลกประหลาดเช่นนี้: -bash: unexpected EOF while looking for matching ``'
14 bash 

1
วิธีตัดรหัสสีออกจาก stdout และ pipe ไปยัง file และ stdout
ฉันมีโปรแกรมที่ใช้printfกับบางtputผสมอยู่ในนั้นและฉันต้องการที่จะท่อส่งออกไป stdout เช่นเดียวกับไฟล์ ฉันต้องการที่จะใช้sedเนื่องจากฉันไม่ต้องการการพึ่งพาที่ไม่จำเป็นในสคริปต์ของฉัน นี่คือสิ่งที่ฉันได้รับจนถึง printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" | tee install.log ปัญหาเดียวของเรื่องนี้คือไฟล์บันทึกของฉันกำลังรับเอาท์พุทสีทั้งหมดเช่นนี้ ... ^[[36m| ^[(B^[[m^[[37mSourcing files...^[[m ฉันอยากให้มันมี | Sourcing files...

3
วิธีการเปลี่ยนเส้นทางการส่งออกของคำสั่งใด ๆ
ฉันพยายามเขียนสคริปต์ง่าย ๆ เพื่อตรวจสอบสถานะเครือข่ายของฉันโดยไม่pingแสดงผลลัพธ์ทั้งหมด: ping -q -c 1 google.com > /dev/null && echo online || echo offline ปัญหาคือเมื่อฉันไม่ได้เชื่อมต่อฉันยังคงได้รับข้อความแสดงข้อผิดพลาดในผลลัพธ์ของฉัน: ping: unknown host google.com offline ฉันจะป้องกันไม่ให้ข้อความแสดงข้อผิดพลาดนี้ออกจากผลลัพธ์ของฉันได้อย่างไร
14 bash  ping  output 

2
สคริปต์เพื่อทดสอบแป้นคีย์บอร์ดอย่างรวดเร็วทั้งหมด
ฉันต้องตรวจสอบโน้ตบุ๊กบางตัวเพื่อหาแป้นคีย์บอร์ดที่ไม่ดีดังนั้นฉันจึงอยากเร่งความเร็วให้มากที่สุด ฉันไม่พบสิ่งใดสำหรับงานนี้ดังนั้นความคิดของฉันคือสคริปต์ที่อ่านคีย์ที่กดและรู้ว่าแป้นคีย์บอร์ดทั้งหมดดังนั้นฉันจึงสามารถทุบตีมันได้อย่างรวดเร็วและรายงานว่ายังไม่ได้กด ฉันคิดว่าฉันจะประสบความสำเร็จที่มีทั้งshowkeyหรือxev, grepping เอาท์พุท: xev | grep keysym ตัวอย่างผลลัพธ์: state 0x10, keycode 46 (keysym 0x6c, l), same_screen YES, state 0x10, keycode 33 (keysym 0x70, p), same_screen YES, state 0x11, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES, state 0x10, keycode 51 (keysym 0x5d, bracketright), same_screen YES, state 0x10, keycode 36 …
14 bash  grep  awk  keyboard  stdout 

1
วิธีเรียกใช้สคริปต์ในเชลล์เมื่อกดปุ่มทางลัด
ฉันจะรันสคริปต์ใน Shell ได้อย่างไรเมื่อกดปุ่มทางลัด โดยพื้นฐานแล้วสิ่งที่ฉันต้องการคือเมื่อกดคีย์ลัดสคริปต์ควรอ่านจากไฟล์และแสดงเนื้อหานั้นในเทอร์มินัล

3
ข้อผิดพลาดในการดักจับในการทดแทนคำสั่งโดยใช้“ -o errtrace” (เช่น set -E)
ตามคู่มืออ้างอิงนี้: -E (เช่น -o errtrace) หากตั้งค่ากับดักใด ๆ บน ERR จะได้รับมรดกโดยฟังก์ชั่นของเชลล์การแทนที่คำสั่งและคำสั่งที่ดำเนินการในสภาพแวดล้อม subshell กับดัก ERR โดยปกติจะไม่สืบทอดในกรณีเช่นนี้ อย่างไรก็ตามฉันต้องตีความอย่างผิด ๆ เพราะสิ่งต่อไปนี้ใช้ไม่ได้: #!/usr/bin/env bash # -*- bash -*- set -e -o pipefail -o errtrace -o functrace function boom { echo "err status: $?" exit $? } trap boom ERR echo $( made up name ) …

5
ฉันสามารถเลือกผลลัพธ์เดียวจาก bash glob ได้หรือไม่
ฉันกำลังพยายามเขียนสคริปต์สำหรับงานเพื่อทำให้การรายงานบางอย่างเกี่ยวกับผลลัพธ์เป็นอัตโนมัติ ล็อกไฟล์คือ (ปัจจุบันคือ 'มาตรฐาน' ในอนาคต) เก็บไว้ในโครงสร้างพา ธ ประเภทนี้: /<root_path>/<process_one_path>/logs/<time_date_stamp>/<specific_log_file> /<root_path>/<process_two_path>/logs/<different_time_date_stamp>/<specific_log_file> ทุกส่วนของเส้นทางนั้นเป็นที่รู้จักยกเว้นการประทับเวลาตามวันเวลาซึ่งเป็นส่วนล่าสุดในโฟลเดอร์เสมอ ถ้าฉันพยายามใช้ไวด์การ์ดแทนการประทับเวลาฉันจะได้ผลลัพธ์หลายอย่างเช่น: > ls /<root_path>/<process_two_path>/logs/* [tab] 20130102-175103 20130118-090859 20130305-213506 ฉันแค่ต้องการให้ส่งคืนไฟล์ล่าสุดเป็นไปได้ด้วย Bash หรือไม่ NB (ฉันไม่มี zsh และน่ารักอย่างที่มันฟังฉันสงสัยว่าเราจะเอามันไปทำงาน)
14 bash  wildcards  glob 

4
ความแตกต่างระหว่าง Ctrl-Z และ kill -STOP คืออะไร
เมื่อฉันเรียกใช้คำสั่ง ( makeในโครงการขนาดใหญ่) จากเชลล์ฉันสามารถพิมพ์ Ctrl-Z เพื่อหยุดกระบวนการและกลับไปที่เชลล์ ต่อจากนั้นฉันสามารถเรียกใช้fgเพื่อดำเนินการตามกระบวนการต่อไป ฉันกำลังพยายามเขียนเชลล์สคริปต์เพื่อทำสิ่งนี้โดยอัตโนมัติ (โดยเฉพาะเพื่อตรวจสอบอุณหภูมิ CPU ของฉันทุกสองสามวินาทีและหยุดกระบวนการถ้ามันร้อนเกินไปเนื่องจากคอมพิวเตอร์ของฉันมีแนวโน้มที่จะร้อนเกินไป) ความพยายามครั้งแรกของฉันทำงานเช่นนี้ (ลดความซับซ้อน): make & subpid="$!" sleep 2 # If the CPU temperature is too high... kill -STOP "$subpid" sleep 2 # If the CPU temperature has dropped to safe levels... kill -CONT "$subpid" wait "$subpid" น่าเสียดายที่นี่ใช้งานไม่ได้ การส่ง SIGSTOP ไปยังกระบวนการไม่ได้หยุดชั่วคราว …

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