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

คำว่า 'เชลล์' หมายถึงคลาสทั่วไปของล่ามคำสั่งแบบโต้ตอบตามข้อความซึ่งส่วนใหญ่มักเกี่ยวข้องกับระบบปฏิบัติการ Unix & Linux สำหรับคำถามเกี่ยวกับการเขียนสคริปต์เชลล์โปรดใช้แท็กเฉพาะเพิ่มเติมเช่น 'bash', 'powershell' หรือ 'ksh' หากไม่มีแท็กเฉพาะควรใช้วิธีแก้ปัญหาแบบพกพา (POSIX-compliant) แม้ว่าจะใช้ 'posix' เพิ่มเติมหรือ 'sh' แทนก็ตาม

10
วิธีรับรายการไฟล์ในไดเรกทอรีในเชลล์สคริปต์
ฉันพยายามรับเนื้อหาของไดเรกทอรีโดยใช้เชลล์สคริปต์ สคริปต์ของฉันคือ: for entry in `ls $search_dir`; do echo $entry done โดยที่$search_dirเป็นเส้นทางสัมพัทธ์ อย่างไรก็ตาม$search_dirมีไฟล์จำนวนมากที่มีช่องว่างในชื่อ ในกรณีนี้สคริปต์นี้ไม่ทำงานตามที่คาดไว้ ฉันรู้ว่าฉันสามารถใช้งานfor entry in *ได้ แต่มันจะใช้ได้เฉพาะกับไดเรกทอรีปัจจุบันของฉันเท่านั้น ฉันรู้ว่าฉันสามารถเปลี่ยนไปยังไดเรกทอรีfor entry in *นั้นใช้แล้วเปลี่ยนกลับ แต่สถานการณ์เฉพาะของฉันทำให้ฉันไม่สามารถทำได้ ฉันมีสองเส้นทางญาติ$search_dirและ$work_dirและฉันต้องทำงานทั้งสองพร้อมกันอ่านพวกเขาสร้าง / ลบไฟล์ในพวกเขา ฯลฯ แล้วฉันจะทำอย่างไรดี PS: ฉันใช้ทุบตี

9
ฉันจะใช้บรรทัดของไฟล์เป็นอาร์กิวเมนต์ของคำสั่งได้อย่างไร
บอกว่าฉันมีไฟล์ที่foo.txtระบุNข้อโต้แย้ง arg1 arg2 ... argN ซึ่งฉันต้องผ่านไปยังคำสั่ง my_command ฉันจะใช้บรรทัดของไฟล์เป็นอาร์กิวเมนต์ของคำสั่งได้อย่างไร

4
คำสั่งส่งออก UNIX [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน8 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันพยายามเข้าใจการใช้exportคำสั่ง ฉันพยายามใช้man exportแต่ไม่มีคู่มือสำหรับคำสั่งนี้ ใครช่วยกรุณาทำความเข้าใจเกี่ยวกับการใช้exportใน UNIX?
158 bash  shell  unix 

9
ตรวจสอบว่าผ่านการโต้แย้งเป็นไฟล์หรือไดเรกทอรีใน Bash
ฉันพยายามเขียนสคริปต์อย่างง่าย ๆ ใน Ubuntu ซึ่งจะทำให้ฉันสามารถส่งผ่านชื่อไฟล์หรือไดเรกทอรีและสามารถทำสิ่งที่เฉพาะเจาะจงเมื่อเป็นไฟล์และอย่างอื่นเมื่อเป็นไดเรกทอรี ปัญหาที่ฉันมีคือเมื่อชื่อไดเรกทอรีหรือไฟล์อาจมีช่องว่างหรือตัวอักษรที่สามารถหลีกเลี่ยงได้อยู่ในชื่อ นี่คือรหัสพื้นฐานของฉันด้านล่างและการทดสอบสองสามข้อ #!/bin/bash PASSED=$1 if [ -d "${PASSED}" ] ; then echo "$PASSED is a directory"; else if [ -f "${PASSED}" ]; then echo "${PASSED} is a file"; else echo "${PASSED} is not valid"; exit 1 fi fi และนี่คือผลลัพธ์: andy@server~ $ ./scripts/testmove.sh /home/andy/ /home/andy/ is …
156 bash  shell 

17
จะรัน Unix shell script ได้อย่างไรจากโค้ด Java?
มันค่อนข้างง่ายในการเรียกใช้คำสั่ง Unix จาก Java Runtime.getRuntime().exec(myCommand); แต่มันเป็นไปได้ไหมที่จะรันเชลล์สคริปต์ Unix จากโค้ด Java? ถ้าใช่จะเป็นการดีที่จะใช้เชลล์สคริปต์จากภายในโค้ด Java หรือไม่?
155 java  unix  shell 

9
วิธีรับ“ wc -l” เพื่อพิมพ์จำนวนบรรทัดโดยไม่มีชื่อไฟล์ได้อย่างไร
wc -l file.txt ส่งออกจำนวนบรรทัดและชื่อไฟล์ ฉันต้องการเพียงตัวเลขเอง (ไม่ใช่ชื่อไฟล์) ฉันสามารถทำได้ wc -l file.txt | awk '{print $1}' แต่อาจจะมีวิธีที่ดีกว่า
155 shell  wc 

4
ปัญหา shell init เมื่อคลิกที่แท็บมีอะไรผิดพลาดกับ getcwd?
เมื่อฉันคลิก Tab ที่ bash ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นเกิดอะไรขึ้น symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success symlink-hook: error retrieving current directory: getcwd: cannot access …
153 linux  bash  shell  pwd  getcwd 

11
แสดงรายการไฟล์ที่มีนามสกุลเฉพาะด้วย ls และ grep
ฉันต้องการรับไฟล์จาก dir ปัจจุบันและส่งออกเฉพาะ. mp4 ไฟล์. mp3.mp3 เท่านั้น ดังนั้นฉันคิดว่าฉันสามารถทำได้: ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$ แต่ไม่เพราะ grep ตัวแรกจะออกมาเพียงแค่ mp4 เท่านั้นส่วนอีก 2 grep จะไม่ถูกใช้งาน ความคิดใด ๆ PS, รันสคริปต์นี้บน Slow Leopard
153 bash  shell  macos  grep 

12
ฉันจะสร้าง crontab ผ่านสคริปต์ได้อย่างไร
ฉันต้องเพิ่มงาน cron ผ่านสคริปต์ที่ฉันเรียกใช้เพื่อตั้งค่าเซิร์ฟเวอร์ ฉันกำลังใช้ Ubuntu ฉันสามารถใช้crontab -eแต่จะเปิดตัวแก้ไขเพื่อแก้ไข crontab ปัจจุบัน ฉันต้องการทำสิ่งนี้โดยทางโปรแกรม เป็นไปได้ที่จะทำเช่นนั้น?
153 linux  shell  ubuntu  cron  crontab 

7
วิธีการประมวลผลแต่ละบรรทัดที่ได้รับจากคำสั่ง grep
ฉันมีจำนวนบรรทัดที่ดึงมาจากไฟล์หลังจากรันคำสั่งgrepดังนี้: var=`grep xyz abc.txt` สมมติว่าฉันได้ 10 บรรทัดซึ่งประกอบด้วย xyz เป็นผลลัพธ์ ตอนนี้ฉันต้องประมวลผลแต่ละบรรทัดที่ฉันได้รับจากคำสั่ง grep ฉันจะดำเนินการสิ่งนี้ได้อย่างไร
152 bash  shell  grep 

7
เรียกใช้สตริงเป็นคำสั่งภายในสคริปต์ Bash
ฉันมีสคริปต์ Bash ที่สร้างสตริงเพื่อทำงานเป็นคำสั่ง สคริปต์: #! /bin/bash matchdir="/home/joao/robocup/runner_workdir/matches/testmatch/" teamAComm="`pwd`/a.sh" teamBComm="`pwd`/b.sh" include="`pwd`/server_official.conf" serverbin='/usr/local/bin/rcssserver' cd $matchdir illcommando="$serverbin include='$include' server::team_l_start = '${teamAComm}' server::team_r_start = '${teamBComm}' CSVSaver::save='true' CSVSaver::filename = 'out.csv'" echo "running: $illcommando" # $illcommando > server-output.log 2> server-error.log $illcommando $serverbinซึ่งดูเหมือนจะไม่จัดหาข้อโต้แย้งได้อย่างถูกต้องไป เอาต์พุตสคริปต์: running: /usr/local/bin/rcssserver include='/home/joao/robocup/runner_workdir/server_official.conf' server::team_l_start = '/home/joao/robocup/runner_workdir/a.sh' server::team_r_start = '/home/joao/robocup/runner_workdir/b.sh' CSVSaver::save='true' CSVSaver::filename = 'out.csv' …

8
วิธีรับคอลัมน์ที่สองจากเอาต์พุตคำสั่ง?
เอาต์พุตของคำสั่งของฉันเป็นดังนี้: 1540 "A B" 6 "C" 119 "D" คอลัมน์แรกจะเป็นตัวเลขเสมอตามด้วยช่องว่างแล้วจึงเป็นสตริงที่มีเครื่องหมายคำพูดคู่ จุดประสงค์ของฉันคือการได้รับคอลัมน์ที่สองเท่านั้นเช่น: "A B" "C" "D" ฉันตั้งใจจะใช้<some_command> | awk '{print $2}'เพื่อให้บรรลุสิ่งนี้ แต่คำถามก็คือค่าบางค่าในคอลัมน์ที่สองมีช่องว่างซึ่งเป็นตัวคั่นเริ่มต้นสำหรับawkแยกเขตข้อมูล ดังนั้นผลลัพธ์จะเลอะ: "A "C" "D" ฉันจะรับค่าคอลัมน์ที่สองได้อย่างไร (ด้วยเครื่องหมายคำพูดคู่) อย่างสะอาด?
152 shell  awk  ksh 

12
จะบอกได้อย่างไรว่าสตริงไม่ได้ถูกกำหนดไว้ในสคริปต์เชลล์ Bash
ถ้าฉันต้องการตรวจสอบสตริงว่างฉันจะทำ [ -z $mystr ] แต่ถ้าฉันต้องการตรวจสอบว่าตัวแปรได้ถูกกำหนดเลย หรือไม่มีความแตกต่างในการเขียนสคริปต์ Bash?
151 bash  shell  scripting  string  null 

4
ฉันจะดึงข้อมูลบรรทัดก่อน / หลังผลลัพธ์ grep เป็น bash ได้อย่างไร
สวัสดีฉันยังใหม่กับการเขียนโปรแกรมทุบตี ฉันต้องการวิธีการค้นหาในข้อความที่กำหนด เพื่อที่ฉันใช้grepฟังก์ชั่น: grep -i "my_regex" ที่ได้ผล แต่ให้สิ่งdataนี้: This is the test data This is the error data as follows . . . . . . . . . . . . . . . . . . . . . . Error data ends เมื่อฉันพบคำerror(ใช้grep -i error data) ฉันต้องการค้นหา …
151 bash  shell  ubuntu 

2
วิธีการแยกออกจากวงใน Bash?
ฉันต้องการเขียนสคริปต์ Bash เพื่อประมวลผลข้อความซึ่งอาจต้องใช้ขณะที่ลูป ตัวอย่างเช่น a while loop ใน C: int done = 0; while(1) { ... if(done) break; } ฉันต้องการเขียนสคริปต์ Bash ที่เทียบเท่า แต่สิ่งที่ฉันมักจะใช้และเป็นตัวอย่างคลาสสิกทั้งหมดที่ฉันอ่านได้แสดงให้เห็นคือ: while read something; do ... done มันไม่มีความช่วยเหลือเกี่ยวกับวิธีการทำwhile(1){}และbreak;สิ่งที่กำหนดไว้อย่างดีและใช้กันอย่างแพร่หลายใน C และฉันไม่ต้องอ่านข้อมูลสำหรับ stdin ใครสามารถช่วยฉันด้วย Bash เทียบเท่ากับรหัส C ข้างต้น?
150 bash  shell  while-loop 

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