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

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

9
วิธีดำเนินการเอาต์พุตของคำสั่งภายในเชลล์ปัจจุบัน
ฉันทราบดีถึงยูทิลิตี้source(aka .) ซึ่งจะนำเนื้อหาจากไฟล์และเรียกใช้งานภายในเชลล์ปัจจุบัน ตอนนี้ฉันกำลังเปลี่ยนข้อความบางส่วนเป็นคำสั่งเชลล์แล้วเรียกใช้งานดังต่อไปนี้: $ ls | sed ... | sh lsเป็นเพียงตัวอย่างแบบสุ่มข้อความต้นฉบับอาจเป็นอะไรก็ได้ sedเช่นกันเป็นเพียงตัวอย่างสำหรับการแปลงข้อความ shบิตที่น่าสนใจคือ ฉันไปป์ทุกอย่างที่ฉันไปถึงshแล้วมันก็วิ่งไป ปัญหาของฉันคือนั่นหมายถึงการเริ่มต้นเชลล์ย่อยใหม่ ฉันอยากให้คำสั่งทำงานภายในเชลล์ปัจจุบันของฉัน เช่นเดียวกับที่ฉันสามารถทำได้source some-fileถ้าฉันมีคำสั่งในไฟล์ข้อความ ฉันไม่ต้องการสร้างไฟล์ชั่วคราวเพราะรู้สึกว่าสกปรก หรือฉันต้องการเริ่มเชลล์ย่อยของฉันด้วยลักษณะเดียวกับเชลล์ปัจจุบันของฉัน อัพเดต โอเควิธีแก้ปัญหาโดยใช้ backtick ใช้งานได้ดี แต่ฉันมักจะต้องทำสิ่งนี้ในขณะที่ฉันกำลังตรวจสอบและเปลี่ยนผลลัพธ์ดังนั้นฉันชอบมากถ้ามีวิธีที่จะทำให้ผลลัพธ์เป็นบางสิ่งในตอนท้าย อัปเดตที่น่าเศร้า อ่า/dev/stdinสิ่งนี้ดูสวยมาก แต่ในกรณีที่ซับซ้อนกว่านั้นมันไม่ได้ผล ฉันมีสิ่งนี้: find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source …
92 bash  shell  unix  pipe 

4
ใน bash ฉันจะผูกฟังก์ชันคีย์กับคำสั่งได้อย่างไร?
ตัวอย่าง: ฉันต้องการผูกF12คีย์เข้ากับคำสั่งecho "foobar"ทุกครั้งที่กดF12ข้อความ "foobar" จะถูกพิมพ์ขึ้นหน้าจอ ตามหลักการแล้วอาจเป็นคำสั่งเชลล์ใด ๆ ก็ได้ไม่ใช่แค่บิวด์อิน จะไปเกี่ยวกับเรื่องนี้ได้อย่างไร?
92 bash  shell  binding 

3
บรรทัดคำสั่ง Bash และขีด จำกัด อินพุต
มีการ จำกัด จำนวนอักขระที่กำหนดไว้ใน bash (หรือเชลล์อื่น ๆ ) สำหรับระยะเวลาในการป้อนข้อมูลหรือไม่? ถ้าเป็นเช่นนั้นจำนวนอักขระสูงสุดคืออะไร? คือเป็นไปได้ไหมที่จะเขียนคำสั่งใน bash ที่ยาวเกินกว่าที่บรรทัดคำสั่งจะดำเนินการได้? หากไม่มีขีด จำกัด ที่กำหนดมีข้อ จำกัด ที่แนะนำหรือไม่?

13
ฉันจะเรียกใช้คำสั่งเทอร์มินัลในสคริปต์ Swift ได้อย่างไร (เช่น xcodebuild)
ฉันต้องการแทนที่สคริปต์ทุบตี CI ของฉันด้วยความรวดเร็ว ฉันไม่สามารถหาวิธีเรียกใช้คำสั่งเทอร์มินัลปกติเช่นlsหรือxcodebuild #!/usr/bin/env xcrun swift import Foundation // Works println("Test") // Works ls // Fails xcodebuild -workspace myApp.xcworkspace // Fails $ ./script.swift ./script.swift:5:1: error: use of unresolved identifier 'ls' ls // Fails ^ ... etc ....
91 swift  bash  shell  xcodebuild 

5
ฉันจะอ่าน sed จากอินพุตมาตรฐานได้อย่างไร [ซ้ำ]
คำถามนี้มีคำตอบอยู่แล้วที่นี่ : ตัวเลือกที่ไม่รู้จักเพื่อ `s 'ใน bash script [ซ้ำกัน] (4 คำตอบ) ปิดเมื่อ4 เดือนที่แล้ว . ฉันกำลังพยายาม grep searchterm myfile.csv | sed 's/replaceme/withthis/g' และได้รับ unknown option to `s' ผมทำอะไรผิดหรือเปล่า? แก้ไข: ตามความคิดเห็นรหัสถูกต้องจริง รหัสเต็มของฉันมีลักษณะดังต่อไปนี้ grep searchterm myfile.csv | sed 's/replaceme/withthis/g' # my comment และดูเหมือนว่าด้วยเหตุผลบางประการความคิดเห็นของฉันจึงถูกป้อนเข้าสู่ sed ที่แปลกมาก.
91 linux  bash  shell 

20
ล้างหน้าจอในเชลล์
คำถามสั้น ๆ : คุณจะล้างหน้าจอในเชลล์ได้อย่างไร? ฉันเคยเห็นวิธีต่างๆเช่น: import os os.system('cls') นี่เพิ่งเปิด windows cmd ล้างหน้าจอและปิด แต่ฉันต้องการล้างหน้าต่างเชลล์ (PS: ฉันไม่รู้ว่ามันช่วยได้ แต่ฉันใช้ Python เวอร์ชัน 3.3.2) ขอบคุณ :)
90 python  shell  screen 

11
จะพิมพ์คอลัมน์ทั้งหมดหลังตัวเลขโดยใช้ awk ได้อย่างไร
บนเชลล์ฉันจะไปที่ awk เมื่อฉันต้องการคอลัมน์ใดคอลัมน์หนึ่ง สิ่งนี้พิมพ์คอลัมน์ 9 ตัวอย่างเช่น: ... | awk '{print $9}' ฉันจะบอกให้ awk พิมพ์คอลัมน์ทั้งหมดรวมทั้งและหลังคอลัมน์ 9ไม่ใช่เฉพาะคอลัมน์ 9 ได้อย่างไร
90 shell  awk 

2
อะไรคือความแตกต่างระหว่างการใช้ Terminal บน mac vs linux? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน9 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันใช้ Ubuntu มาสี่ปีแล้ว ฉันมีความรู้พื้นฐานเกี่ยวกับคำสั่งเชลล์และฉันชอบทำงานในเทอร์มินัลมากกว่าใช้ GUI ฉันเพิ่งเริ่มใช้ Mac ฉันได้ลองใช้คำสั่งเทอร์มินัลสองสามคำ (ที่ฉันใช้บน Ubuntu) ในเทอร์มินัล Mac และดูเหมือนว่าจะตอบสนองในลักษณะเดียวกันเป็นส่วนใหญ่ มีความแตกต่างอย่างมีนัยสำคัญในคำสั่งที่ฉันใช้งานที่ทำหรือสภาพแวดล้อมเชลล์ที่ฉันควรทราบหรือไม่
89 macos  bash  shell  ubuntu  terminal 

4
จะตรวจสอบได้อย่างไรว่ามีผู้ใช้ postgres อยู่หรือไม่?
createuserอนุญาตให้สร้างผู้ใช้ (ROLE) ใน PostgreSQL มีวิธีง่ายๆในการตรวจสอบว่ามีผู้ใช้ (ชื่อ) อยู่แล้วหรือไม่? มิฉะนั้น createuser จะส่งกลับพร้อมข้อผิดพลาด: createuser: creation of new role failed: ERROR: role "USR_NAME" already exists UPDATE: ควรใช้วิธีแก้ปัญหาจากเชลล์เพื่อให้ง่ายต่อการทำงานอัตโนมัติภายในสคริปต์


13
ใช้ sed เพื่อเปลี่ยนชื่อไฟล์จำนวนมาก
วัตถุประสงค์ เปลี่ยนชื่อไฟล์เหล่านี้: F00001-0708-RG-biasliuyda F00001-0708-CS-akgdlaul F00001-0708-VF-hioulgigl ไปยังชื่อไฟล์เหล่านี้: F0001-0708-RG-biasliuyda F0001-0708-CS-akgdlaul F0001-0708-VF-hioulgigl รหัสเชลล์ ทดสอบ: ls F00001-0708-*|sed 's/\(.\).\(.*\)/mv & \1\2/' ในการดำเนินการ: ls F00001-0708-*|sed 's/\(.\).\(.*\)/mv & \1\2/' | sh คำถามของฉัน ฉันไม่เข้าใจรหัส sed ฉันเข้าใจคำสั่งการแทนที่ $ sed 's/something/mv' หมายถึง. และฉันเข้าใจนิพจน์ทั่วไปบ้าง แต่ฉันไม่เข้าใจว่าเกิดอะไรขึ้นที่นี่: \(.\).\(.*\) หรือที่นี่: & \1\2/ สำหรับฉันในอดีตดูเหมือนว่ามันหมายถึง: "อักขระเดี่ยวตามด้วยอักขระเดี่ยวตามด้วยลำดับความยาวของอักขระเดี่ยว" - แต่แน่นอนว่ามีอะไรมากกว่านั้น เท่าที่ส่วนหลัง: & \1\2/ ฉันไม่รู้.
89 bash  shell  sed  file-rename 

5
ส่งออกจาก sqlite เป็น csv โดยใช้เชลล์สคริปต์
ฉันกำลังสร้างเชลล์สคริปต์เพื่อส่งออกเคียวรี sqlite ไปยังไฟล์ csv เช่นนี้: #!/bin/bash ./bin/sqlite3 ./sys/xserve_sqlite.db ".headers on" ./bin/sqlite3 ./sys/xserve_sqlite.db ".mode csv" ./bin/sqlite3 ./sys/xserve_sqlite.db ".output out.csv" ./bin/sqlite3 ./sys/xserve_sqlite.db "select * from eS1100_sensor_results;" ./bin/sqlite3 ./sys/xserve_sqlite.db ".exit" เมื่อเรียกใช้สคริปต์เอาต์พุตจะปรากฏบนหน้าจอแทนที่จะบันทึกเป็น "out.csv" มันทำงานด้วยวิธีเดียวกันกับบรรทัดคำสั่ง แต่ฉันไม่รู้ว่าทำไมเชลล์สคริปต์จึงไม่สามารถส่งออกข้อมูลไปยังไฟล์ได้ ผมทำอะไรผิดหรือเปล่า?
89 sqlite  shell  csv 


12
บังคับให้ bash ขยายตัวแปรในสตริงที่โหลดจากไฟล์
ฉันกำลังพยายามหาวิธีทำให้ bash (แรง?) ขยายตัวแปรในสตริง (ซึ่งโหลดจากไฟล์) ฉันมีไฟล์ชื่อ "something.txt" ที่มีเนื้อหา: hello $FOO world จากนั้นฉันก็วิ่ง export FOO=42 echo $(cat something.txt) ผลตอบแทนนี้: hello $FOO world มันไม่ได้ขยาย $ FOO แม้ว่าจะตั้งค่าตัวแปรไว้ก็ตาม ฉันไม่สามารถประเมินหรือซอร์สไฟล์ได้เพราะมันจะพยายามและเรียกใช้งาน (มันไม่สามารถเรียกใช้งานได้อย่างที่เป็นอยู่ - ฉันแค่ต้องการสตริงที่มีการแทรกตัวแปร) ความคิดใด ๆ ?
89 linux  bash  shell  unix 

9
วิธีตรวจสอบว่ากระบวนการกำลังทำงานอยู่ภายใน Docker container หรือไม่
[อัปเดต 1] ฉันมีเชลล์ซึ่งจะเปลี่ยนพารามิเตอร์เคอร์เนล TCP ในบางฟังก์ชัน แต่ตอนนี้ฉันจำเป็นต้องทำให้เชลล์นี้ทำงานในคอนเทนเนอร์ Docker นั่นหมายความว่าเชลล์จำเป็นต้องรู้ว่ามันกำลังทำงานอยู่ภายในคอนเทนเนอร์และหยุดการกำหนดค่าเคอร์เนล ตอนนี้ฉันไม่แน่ใจว่าจะบรรลุได้อย่างไรนี่คือเนื้อหา/proc/self/cgroupภายในคอนเทนเนอร์: 9:hugetlb:/ 8:perf_event:/ 7:blkio:/ 6:freezer:/ 5:devices:/ 4:memory:/ 3:cpuacct:/ 2:cpu:/docker/25ef774c390558ad8c4e9a8590b6a1956231aae404d6a7aba4dde320ff569b8b 1:cpuset:/ แฟล็กใด ๆ ด้านบนที่ฉันสามารถใช้เพื่อดูว่ากระบวนการนี้กำลังทำงานอยู่ในคอนเทนเนอร์หรือไม่ [อัปเดต 2]: ฉันสังเกตเห็นด้วยว่าการพิจารณาว่ากระบวนการทำงานภายใน lxc / Dockerหรือไม่ แต่ดูเหมือนว่าจะไม่ทำงานในกรณีนี้เนื้อหาใน/proc/1/cgroupคอนเทนเนอร์ของฉันคือ 8:perf_event:/ 7:blkio:/ 6:freezer:/ 5:devices:/ 4:memory:/ 3:cpuacct:/ 2:cpu:/docker/25ef774c390558ad8c4e9a8590b6a1956231aae404d6a7aba4dde320ff569b8b 1:cpuset:/ ไม่ใช่ / lxc / containerid

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