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

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

1
bash tail & watch
ฉันมีเซิร์ฟเวอร์แอปที่ฉันสตาร์ทและเขียนเอาต์พุตไปยัง stdout ฉันต้องการที่จะสามารถดูผลลัพธ์นั้นและออกคำสั่ง (ในกรณีนี้คำสั่ง growlnotify -m "Server is up") เมื่อบรรทัดที่ระบุถูกส่งไปยัง stdout แต่ฉันยังต้องการให้ผลลัพธ์ทั้งหมดไปที่ stdout หมายเหตุฉันไม่อยากเขียนไฟล์
2 bash 

1
วิธีดูสองกล่องโต้ตอบบน linux console ทำงานในเวลาเดียวกันได้อย่างไร
ฉันต้องการดูบนหน้าต่างโต้ตอบสองหน้าต่าง Linux ในเวลาเดียวกัน ฉันต้องการหน้าต่างที่ดูแถบความคืบหน้าและกล่องท้ายที่สองที่ดูบันทึกกำลังทำงานอยู่ ปัญหาคือว่ากล่องโต้ตอบปรากฏขึ้นเสมอในใจกลางของคอนโซล สิ่งที่ฉันต้องการคือ เพื่อดูกล่องโต้ตอบสองกล่องในเวลาเดียวกันบนคอนโซล ในขณะที่แถบความคืบหน้าอยู่ด้านบนของหน้าจอ และกล่องควรจะปรากฏในหน้าจอ วิธีการใช้งานนี้ วิธีการวางหน้าต่างข้อความขึ้นหรือลงและไม่ได้อยู่ตรงกลาง dialog --title "RUN TASKS FROM TEXT TABLE" --gauge "Please wait..." 10 70 0 dialog --tailbox file.log 10 100

3
วิธีการเรียกใช้สคริปต์ Python ในหน้าต่างเทอร์มินัลโดยดับเบิลคลิก
ฉันใช้ OSX และฉันกำลังสร้างแอพที่มีโปรแกรม Python ในResourcesโฟลเดอร์สคริปต์ Bash เรียกสคริปต์ Python ให้เรียกใช้เมื่อเปิดตัวแอป สคริปต์อยู่ในMacOSโฟลเดอร์ภายในแอปชื่อเดียวกันกับแอป ฉันมีสคริปต์ Bash นี้: #!/bin/bash clear python /Applications/Converter.app/Contents/Resources/Converter.py ฉันคิดว่าสคริปต์ Bash จะทำงานเมื่อเปิดตัวแอปดังนั้นจึงทำให้สคริปต์ python ทำงานผ่านหน้าต่างเทอร์มินัล อย่างไรก็ตามเมื่อฉันดับเบิลคลิกที่แอพไม่มีอะไรเกิดขึ้น! โดยพื้นฐานแล้วฉันต้องการสคริปต์ทุบตีเพื่อเปิดโปรแกรม Python ในหน้าต่างเทอร์มินัลเพื่อให้ผู้ใช้สามารถโต้ตอบกับมันได้ สิ่งที่ฉันหายไปที่นี่?

1
ฉันจะเปิดใช้งานประวัติบรรทัดคำสั่งในเซสชันเทอร์มินัล Ubuntu ระยะไกลได้อย่างไร
เมื่อเข้าสู่เซสชัน Ubuntu ระยะไกลโดยใช้ ssh ประวัติบรรทัดคำสั่งของฉันซึ่งโดยปกติฉันจะเข้าถึงเทอร์มินัลท้องถิ่นด้วยเคอร์เซอร์คีย์จะถูกแทนที่ด้วย ^]] A ^]] ตัวอักษร B เป็นต้น ฉันจะเปิดใช้งานประวัติบรรทัดคำสั่งในเซสชันระยะไกลนี้ได้อย่างไร

1
sudo: สงวนคำอธิบายไฟล์ที่ไม่ได้มาตรฐาน
เรื่องสั้นสั้น: ทำไมตัวอย่างแบบนี้ (ประยุกต์) ไม่ทำงาน root:# sudo -C 3 -u regular-user cat /dev/fd/3 3< /var/log/syslog cat: /dev/fd/3: No Such file or directory มีไฟล์ที่มี Defaults closefrom_override ใน /etc/sudoers.d ของฉัน ฉันใช้ทุบตี 4.2.20 และ Debian Wheezy ขอบคุณมากสำหรับความช่วยเหลือของคุณ!
2 bash  sudo 

1
ทุบตีค้นหารายการไฟล์ที่เก็บถาวรด้วย wildcard ในขณะวนซ้ำ
ฉันมีไฟล์ข้อความสองสามพัน gzipped ในไดเรกทอรีย่อยที่แตกต่างกันและใช้ชุดย่อยของไฟล์เหล่านี้เป็นอินพุตสำหรับโครงการเมื่อไม่กี่ปีที่ผ่านมา ย้อนกลับไปฉันมีสำเนาของไฟล์ที่ฉันใช้จริงในไดเรกทอรีเดียว แต่ได้ลบไฟล์นี้แล้วเก็บเฉพาะรายการไฟล์ที่คลายซิปเหล่านี้ในโฟลเดอร์นั้น นี่เป็นความคิดเริ่มต้นของฉันLISTคือรายการไฟล์ PARENTDIRเป็นไดเร็กทอรีระดับบนซึ่งไฟล์ทั้งหมดอยู่ในไดเร็กทอรีย่อยต่างๆ แนวคิดก็คือการค้นหาจดหมายเหตุทั้งหมดในไดเรกทอรีย่อยใด ๆ ที่พวกเขาเป็นและ gunzip พวกเขาไปNEWDIR #!/usr/bin/env bash LIST="listfile.txt" PARENTDIR="/home/user/old/project" NEWDIR="/home/user/old/project/2016" while read line; do ARCHIVE="$(find $PARENTDIR -name "$line*")" gunzip --stdout $ARCHIVE >$NEWDIR/$line done <$LIST ฉันดูเหมือนจะไม่ได้รับคำสั่ง find มันทำงานได้โดยไม่ต้องใช้ตัวแปร แต่ไม่ใช่กับแม้จะไม่มีการทดแทนคำสั่งเรียกใช้บรรทัดคำสั่ง การรวมราคาและบัตรเสริมของฉันไม่ถูกต้อง แต่ฉันไม่สามารถทำให้ถูกต้องการขยายตัวที่หลากหลายไม่ได้ช่วยอะไรและฉันคิดว่าฉันติดอยู่ ...

1
พาร์ติชันไดเรกทอรีเป็นไดเรกทอรีย่อยตามชื่อไดเรกทอรี
พื้นหลัง: เว็บไซต์ของลูกค้าจัดเก็บรูปโปรไฟล์ผู้ใช้และไฟล์แนบอื่น ๆ ไว้ในโฟลเดอร์/user/images/*user_id*เดียว พวกเขาเพิ่งถึงขีด จำกัด ไดเรกทอรี ( echo */ | wcechoes 31998, ระบบไฟล์ ext3) ดังนั้นฉันต้องแยกพวกเขาออกเป็นชิ้นเล็ก ๆ โฟลเดอร์ผู้ใช้ใน/user/imagesนั้นขึ้นอยู่กับ ID ผู้ใช้ที่เก็บไว้ในฐานข้อมูล มีไดเรกทอรีที่ไม่ใช้หมายเลขสองสามตัวที่จะไม่สนใจ ฉันสร้างสคริปต์ทุบตีเล็ก ๆ ซึ่งทำงานได้ดีในสภาพแวดล้อมการทดสอบของฉัน แต่ฉันต้องการที่จะมีความคิดเห็นของคุณเกี่ยวกับเรื่องนี้: #!/usr/bin/env bash for D in *; do if [ -d "${D}" ]; then # check if it's a directory echo "Directory: ${D}" if [ "${D}" …

1
ย้ายไฟล์ซ้ำใน sub-dirs ไปยัง sub-dirs ใหม่ที่มีชื่อเดียวกัน
ฉันมีชุดของไฟล์ทั้งหมดที่ลงท้ายด้วยสตริงเดียวกันเช่น: *_ext.datตั้งอยู่ในหลาย sub-dirs พร้อมกับไฟล์อื่น ๆ หลายใน dir หลักที่กำหนด นี่คือโครงสร้าง: /main_dir/subdir1/file11_ext.dat /main_dir/subdir1/file12_ext.dat /main_dir/subdir1/file13_ext.dat /main_dir/subdir1/file14_other.dat /main_dir/subdir1/file15_other.dat /main_dir/subdir2/file21_ext.dat /main_dir/subdir2/file22_ext.dat /main_dir/subdir2/file23_ext.dat /main_dir/subdir2/file24_other.dat /main_dir/subdir2/file25_other.dat /main_dir/subdir3/file31_ext.dat /main_dir/subdir3/file32_ext.dat /main_dir/subdir3/file33_ext.dat /main_dir/subdir3/file34_other.dat /main_dir/subdir3/file35_other.dat ฉันต้องการที่จะย้ายซ้ำเฉพาะไฟล์ที่ลงท้าย*_ext.datเป็นผบหลักใหม่new_dirเคารพโครงสร้างย่อย dir เพื่อให้ไฟล์ที่จะสิ้นสุดในโครงสร้าง dir เทียบเท่าเช่นนี้ /new_dir/subdir1/file11_ext.dat /new_dir/subdir1/file12_ext.dat /new_dir/subdir1/file13_ext.dat /new_dir/subdir2/file21_ext.dat /new_dir/subdir2/file22_ext.dat /new_dir/subdir2/file23_ext.dat /new_dir/subdir3/file31_ext.dat /new_dir/subdir3/file32_ext.dat /new_dir/subdir3/file33_ext.dat ด้วยเหตุนี้คำสั่งควรสร้าง dir ย่อยเหล่านั้นด้วยชื่อที่เกี่ยวข้อง ฉันรู้ว่ามีบรรทัดเช่นนี้: find . -name "*_ext.dat" -print0 | xargs -0 …

3
การรันไฟล์ bash ในหน้าต่างเทอร์มินัลใหม่และปิดหน้าต่างเมื่อทำเสร็จแล้ว
ฉันต้องการเปิดไฟล์ bash ในดาร์วินผ่าน: open -n -a Terminal --args bashfile.sh ไฟล์ bash นั้นดูเหมือนว่า: #! /bin/sh <application> <arguments> มันทำงานได้ตามที่คาดไว้ แต่มีวิธีปิดหน้าต่างเทอร์มินัลเมื่อกระบวนการเสร็จสิ้นหรือไม่? ฉันพยายามแล้วexit;และexit 0;แต่ไม่ประสบความสำเร็จ สารละลายบางส่วน ในการตั้งค่าของสถานี ( เทอร์มิ> การตั้งค่า> การตั้งค่า> เชลล์ ) คุณสามารถตั้งค่า 'เมื่อเปลือกที่มีอยู่' close the window if the shell exited cleanlyธง หากไม่มีสิ่งใดผิดพลาดสิ่งนี้จะปิดหน้าต่างเทอร์มินัลภายหลัง แต่ไม่ใช่แอปพลิเคชันดังกล่าว
2 macos  bash  terminal 

0
wget สคริปต์:% 0D ที่ส่วนท้ายของชื่อไฟล์
ฉันมีสคริปต์ทุบตีที่วนรอบคำสั่ง wget แต่ฉันไม่รู้ว่าทำไมฉันถึงมี% 0D ในตอนท้ายของชื่อไฟล์ทั้งหมดยกเว้นตอนแรก for var in "${array[@]}" do wget -P output_folder "${var}" done ทำไมฉันมีสิ่งนี้ วิธีแก้ปัญหานี้
2 linux  bash  script  wget 

2
ตั้งค่าตัวแปรสภาวะแวดล้อมโกลบอลใน Linux ที่จะทำงานเมื่อรูท
เมื่อฉัน SSH ลงในกล่อง Linux ฉันต้องการให้/etc/profileไฟล์บันทึกผลลัพธ์ของwhoamiคำสั่งไปยังตัวแปรสภาวะแวดล้อมโกลบอล ถ้าฉันจะรูทด้วยคำสั่งsudo su -ฉันไม่ต้องการให้คำสั่งนั้นรันอีกครั้งเมื่อไปรูท ฉันต้องการให้มันใช้ผลลัพธ์ของwhoamiชื่อผู้ใช้ปกติของฉันก่อนที่ฉันจะรูทและต้องการเข้าถึงตัวแปรนั้นในฐานะผู้ใช้รูทแม้ว่ามันจะรัน/etc/profileไฟล์อีกครั้งเมื่อฉันรูท ฉันจะทำอย่างไรเพื่อเรียกใช้คำสั่งนั้นเพียงครั้งเดียวใน/etc/profileคำสั่ง
2 linux  bash 

1
ฉันจะบังคับให้ gnuparallel ดำเนินการคำสั่งตามลำดับได้อย่างไร
Gnu parallel เป็นเครื่องมืออันทรงพลังที่ฉันใช้เพื่อรันคำสั่ง BASH อิสระจำนวนมากเป็นชุดเดียวในแบบคู่ขนาน ฉันต้องการเรียกใช้คำสั่งเดียวกัน SEQUENTIALLY โดยไม่มีการเปลี่ยนแปลงคำสั่งที่ฉันใช้อย่างมีนัยสำคัญ ฉันรู้ว่ามีสวิตช์ที่บังคับให้ส่งออกที่จะถูกส่งกลับเป็น THOUGH ทำงานแบบเรียงลำดับ แต่ฉันต้องการให้ Gnuparallel RUN ทำงานจริงตามลำดับ เหตุผลของฉันคือเพื่อวัตถุประสงค์ในการทดสอบบนเครื่องที่มีแนวโน้มว่าจะร้อนเกินไปการแก้ปัญหาฮาร์ดแวร์ของฉันไม่ใช่ตัวเลือกนอกจากนี้เรายังสามารถจินตนาการถึงการทดสอบอื่น ๆ ที่ใช้ gnuparallel ตามลำดับจะเป็นประโยชน์ ดังนั้น. มีวิธีเรียกใช้ gnuparallel ตามลำดับหรือฉันต้องการแยกคำสั่ง gnuparallel ด้วยตนเองที่กำหนดไว้ในคำสั่งส่วนประกอบและเรียกใช้งานตามลำดับหรือไม่

0
มีวิธีการเปิดใช้งานการเติมข้อความอัตโนมัติของ Bash แบบฟัซซี่อย่างที่ Intellij มีหรือไม่?
ฉันใช้ Intellij มากและหนึ่งในคุณสมบัติที่ฉันชอบคือการเติมข้อมูลอัตโนมัติ สังเกตว่าคุณสามารถข้ามตัวอักษรในอินพุตของคุณและเดาสิ่งที่คุณต้องการโดยใช้ตัวอักษรเหล่านั้น: มีวิธีการเปิดใช้งานการเติมข้อมูลอัตโนมัติประเภทนี้ใน Bash หรือไม่? ฉันเปิดใช้งานbash-completion แล้วแต่ใช้งานได้เฉพาะกับการพิมพ์ในส่วนนำหน้าของสิ่งที่คุณไม่ใช้ไม่ใช่อินพุตที่ไม่สมบูรณ์เช่นในรูปภาพ

2
แทรกสตริงระหว่างสองรูปแบบ
ฉันต้องการเปลี่ยนไฟล์ด้วยชื่อเช่น: d1-a2_A1_B1.txt abcd_A90_B2.txt ที่ฉันต้องการแทรก_FOOระหว่างแรก_A[0-9]\+และ_B[0-9]เพื่อให้ชื่อไฟล์ d1-a2_A1_FOO_B1.txt abcd_A90_FOO_B2.txt แต่การแสดงออกปกติของฉันไม่ทำงาน: for f in $(ls); do mv $f \`echo $f | sed -e s/\(.*_A[0-9]\+\)\(_B[0-9].*\)/$1_FOO$2/\`; done ฉันลองด้วยสายเดี่ยว: echo abcd_A90_B2.txt | sed -e s/\(.*_A[0-9]\+\)\(_B[0-9].*\)/$1_FOO$2/ ตกลง: สิ่งนี้ได้ผล: echo abcd_A90_B2.txt | sed -e 's/\(_A[0-9]\+\)\(_B[0-9]\)/\1_FOO\2/'
2 linux  bash  regex  sed 

2
ไพพ์เอาต์พุต bash ไปยังอาร์กิวเมนต์ของ perl script
ฉันมีคำสั่ง bash ต่อไปนี้: find repo -name '*.c' สิ่งที่ฉันต้องการจะทำคือใช้ไฟล์ที่ส่งคืนเป็นอาร์กิวเมนต์ของสคริปต์ Perl ของฉันเพื่อให้เทียบเท่ากับการทำงาน: perl ./myscript file1.c file2.c file3.c ... ฉันจะทำสิ่งนี้ได้อย่างไร
2 bash  perl  pipe 

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