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

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

1
วิธีการไปที่รูทของไดเรกทอรี
ฉันกำลังพยายามรวบรวมแพคเกจใน bash และคำแนะนำใน github บอกว่า: สลับไปที่รูทของที่เก็บ Phrasal และดำเนินการ: gradle installDist ฉันพยายามระบุรูตโดยใช้ "hg root" แต่ฉันได้รับผลลัพธ์เป็น abort: ไม่พบที่เก็บข้อมูลใน '/ mnt / f / Projects / phrasal' (ไม่พบ. hg)! ฉันจะค้นหารากของไดเรกทอรีได้อย่างไร ขอบคุณ !!!
linux  bash  git 

2
ฉันจะรันสคริปต์เพื่อกำหนดค่าบางอย่างสำหรับผู้ใช้ใหม่ได้อย่างไร
ฉันต้องการทำงานการกำหนดค่าบางอย่างสำหรับผู้ใช้ใหม่เช่นใช้การตั้งค่าเริ่มต้น ตัวอย่างเช่นผมต้องการที่จะสร้างไดเรกทอรีเริ่มต้นบางคน ( Documents, Downloads, Music, PicturesและVideosเช่นเดียวกับใน Windows) ใช้ชื่อแปลผ่านทางxdg-user-dir(เช่นนั้นสำหรับผู้ใช้ที่บราซิลเขาหรือเธอจะได้รับจริงไดเรกทอรีที่มีชื่อDocumentos, Downloads, Músicas, ImagensและVídeos) ที่สามารถทำได้โดยใช้กับคำสั่งเช่นที่อยู่ในเปลือกสคริปต์: music="`xdg-user-dir MUSIC 2>/dev/null`" if test -z "$music"; then music=$HOME/Music fi mkdir -p "$music" ฉันใช้ openSUSE Leap 42.1 กับ KDE Plasma 5.4.2 ใน openSUSE รุ่นเก่า แต่เป็นรุ่นทอง 13.2 ฉันสามารถกำหนดค่าแบบนั้นได้โดยใช้สคริปต์/usr/share/kde4/env/startkde.suse.shดังที่คุณเห็นที่นี่: https://github.com/openSUSE/kdebase-opensuse/blob/master/config-files/usr/share/kde4/env/startkde.suse.sh นอกจากนี้การตั้งค่าเฉพาะผู้ใช้ LiveCD สามารถทำได้โดยใช้สคริปต์/usr/share/opensuse-kiwi/live_user_scripts/ระบบ ที่ยังคงเป็นไปได้ด้วย openSUSE Leap 42.1 ตัวอย่าง: https://github.com/openSUSE/kdebase-opensuse/blob/master/config-files/usr/share/opensuse-kiwi/live_user_scripts/kde4.sh …

2
เชลล์ไม่ขยายตัว *
ฉันกำลังตั้งค่า classpath Java ในสคริปต์ทุบตี ฉันคิดว่าฉันจะต้องใช้เครื่องหมายคำพูดเพื่อป้องกันเชลล์ไม่ให้ขยาย*ตามคำถามนี้: https://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpathแต่ต่อไปนี้ใช้งานได้ดี ไม่มีคำพูด: classpath=/jars/*:/anotherJarsDir/* java -classpath=$classpath com.test.MyClass อย่างไรก็ตามเชลล์จะขยายสิ่งนี้: classpath=/jars/* java -classpath=$classpath com.test.MyClass ดูเหมือนว่าฉันไม่ต้องกังวลเกี่ยวกับการขยายตัวของเชลล์ทำให้คลาส Java ของฉันสับสนหากมีหลายไดเรกทอรีในตัวแปร classpath
linux  bash  shell  java 

0
ได้รับ“ ไม่มีไฟล์หรือไดเรกทอรี” แต่มีโปรแกรมอยู่ใน Debian armel
ฉันใช้Debian armelใน Qemu และพยายามเรียกใช้โปรแกรม ARM แต่พบปัญหา: user@debian-armel:~$ ls -lbat total 32 drwxr-xr-x 2 user user 4096 Sep 14 23:54 . -rw------- 1 user user 139 Sep 14 20:41 .bash_history -rwxrwxrwx 1 user user 7982 Aug 24 22:14 program -rw-r--r-- 1 user user 220 Dec 9 2013 .bash_logout -rw-r--r-- 1 user …
linux  bash  qemu  arm 

1
ไม่สามารถโหลดไฟล์. xml ระยะไกลจากตัวแปร
กำลังพยายามอ่านไฟล์. xml จากเซิร์ฟเวอร์อื่นลงในตัวแปร test=$(ssh root@server "cat /dir/file.xml") แต่เมื่อทำเช่นecho $testนั้นจะพิมพ์ไฟล์. xml ในรูปแบบหนึ่งซับ จากนั้นพยายามเรียกใช้xmllintงานไฟล์นี้ xmllint $test และรับข้อผิดพลาดต่อไปนี้ในแต่ละแท็ก คำเตือน: ไม่สามารถโหลดเอนทิตีภายนอก "... " หมายเหตุ: เมื่อทำตามโพรซีเดอร์เดียวกัน แต่บนไฟล์. xml โลคัล (โดยไม่มีssh) จะทำงานและรับผลลัพธ์ที่คาดหวัง มีวิธีใดบ้างที่จะแก้ปัญหานี้? หรือใช้xmllintเครื่องมือจากระยะไกล
bash  ssh  xml 

1
Windows BASH อยู่ที่ไหน
ฉันเพิ่มส่วนประกอบสำหรับ Windows BASH ในแผงควบคุม ดูเหมือนว่าจะไปได้ดีมันเป็นสิ่งที่ดาวน์โหลด / ติดตั้งไม่มีข้อผิดพลาด ฉันรีบูท อย่างไรก็ตามตอนนี้ฉันไม่เห็นวิธีการเริ่มต้นการทุบตี การค้นหาว่างเปล่า ฉันไม่เห็นไอคอนใหม่ในเมนู ขึ้นมาว่างเปล่าด้วยการค้นหาเว็บด้วยดังนั้นจึงควรมีความชัดเจน มันควรจะปรากฏให้ฉันเริ่มต้นที่ไหน

2
ฉันจะทำให้เชลล์เติมข้อความอัตโนมัติให้เริ่มต้นของ filepath ได้อย่างไร?
ฉันมีโครงการที่มีโครงสร้างโฟลเดอร์ซ้อนกันอย่างลึกซึ้ง ส่วนใหญ่ฉันรู้ชื่อของไฟล์ที่ฉันต้องการทำงานด้วย แต่เส้นทางของโฟลเดอร์นั้นยาวเกินไป / ซับซ้อนเกินกว่าที่จะพิมพ์เมื่อฉันต้องการแก้ไขมันเช่น: vim folder/is/deep/down/there/myfile.js มีวิธีที่จะทำให้เชลล์อัตโนมัติเติมเส้นทางให้ฉันหรือไม่ถ้าชื่อไฟล์นั้นไม่เหมือนใคร vim *myfile.js กด tab vim folder/is/deep/down/there/myfile.js ฉันใช้ทุบตีเป็นส่วนใหญ่ แต่ฉันใช้ได้กับ zsh ถ้ามันสามารถแก้ปัญหาได้

1
กลไกการอัพเดตจะเป็นอย่างไรในทุบตี
ฉันต้องอัปเดตการรวบรวมสคริปต์เป็นครั้งคราว แต่ฉันไม่รู้ว่าจะเริ่มสคริปต์ตรวจสอบเวอร์ชันเป็นทุบตีได้อย่างไร ฉันมีแฟ้มรุ่นที่มี 3 vars: version=0, subversion=0และsubsubversion=1และฉันมีเว็บเซิร์ฟเวอร์ที่ให้บริการการปรับปรุงที่มีการติดตั้งการปฏิบัติเป็นสคริปต์ทุบตี ในไดเรกทอรีชื่ออัปเดต: /updates/ 0.0.1 0.0.2 0.0.3 และไดเรกทอรีที่เรียกว่ากระแสที่เก็บเวอร์ชันปัจจุบัน /current/ 0.0.1 version ตอนนี้ผมต้องการที่จะมีสคริปต์ที่ใช้$version, $subversionและ$subsubversionและกำหนดปรับปรุงแม่มดดาวน์โหลดและรัน หลังจากส่วนนี้เสร็จสิ้นสคริปต์อัปเดตควรเพิ่ม var เพื่อให้ดาวน์โหลดอัปเดตถัดไปหากมี nextversionขอเรียกว่า ฉันติดอยู่กับการเพิ่ม vars ทั้งสามและnextversionตัวแปรในสคริปต์การปรับปรุง ฉันจะทำอย่างไรเพื่อเพิ่ม vars tree และ var ที่สี่ให้สูงขึ้นไปอีกระดับ ฉันจะจัดการกับมันอย่างไรถ้าฉันไปจาก 0.0.9 ถึง 0.1.0 หรือแม้กระทั่งจาก 0.9.9 ถึง 1.0.0 และอื่น ๆ โดยไม่ต้องผลิตจำนวนมากif- else- elifงบ ฉันเศร้าที่ไม่ดีในการหาลูป
linux  bash  script 

1
เริ่มต้นสองสคริปต์ที่รันไปเรื่อย ๆ ในเชลล์สคริปต์
ฉันเป็น webdev และฉันใช้ JSX คอมไพเลอร์และ SASS preprocessor เพื่อรวบรวม.jsxและ.scssไฟล์ของฉัน เมื่อฉันเริ่มทำงานฉันจะเปิดคำสั่งทั้งสองแยกจากกัน: jsx -x jsx jsx js --watch --no-cache-dir sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch อย่างที่คุณเห็นทั้งคู่มีการ--watchตั้งค่าสถานะหมายความว่าพวกเขาจะทำการติดตามไฟล์ของพวกเขาจนกว่าพวกเขาจะถูกฆ่า ฉันต้องการที่จะสามารถใช้เชลล์สคริปต์ที่เปิดตัวทั้งสองสคริปต์ในครั้งเดียว จนถึงตอนนี้ฉันมี: #!/bin/sh echo "Starting JSX Compiler..." jsx -x jsx jsx js --watch --no-cache-dir echo "Starting SASS Preprocessor" sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch แต่นี่จะเรียกใช้งานโปรแกรมแรกเท่านั้นjsxไม่ใช่sassเพราะ jsx กำลังทำงาน ฉันจะเปิดโปรแกรมประเภท "watch" ทั้งสองนี้ผ่าน shellscript ได้อย่างไร
macos  bash  shell 

1
ทุบตีถ้าคำสั่ง
ในขณะที่ทุกคนรู้ว่าifคำสั่งง่ายๆเป็นเช่นนั้น: ถ้าคำสั่งการทดสอบ; จากนั้นคำสั่งที่เป็นผลต่อเนื่อง; Fi จากนั้นหมอพูดว่า: รายการ TEST-COMMAND จะถูกดำเนินการและหากสถานะการส่งคืนเป็นศูนย์รายการ CONSEQUENT-COMMANDS จะถูกดำเนินการ หมายความว่าสถานะการส่งคืนของคำสั่งทดสอบถูกแปลงเป็นบูลีนจริง / เท็จโดยใช้กฎ: return status - 0 -> สถานะ return return - 1 -> false จากนั้นใช้คำสั่ง if เพื่อพิจารณาว่าจะดำเนินการอย่างไร
bash  shell 

1
การใช้ / usr / bin / env เพื่อเปลี่ยนไดเรกทอรี [ปิด]
ฉันต้องการรันคำสั่งโดยอัตโนมัติด้วยคำนำหน้า /usr/bin/env $/usr/bin/env composer install (this runs OK) $/usr/bin/env cd public (failed ---> /usr/bin/env: cd: No such file or directory) ฉันใหม่กับ Linux และในความคิดของฉันใช้ /usr/bin/env เป็นวิธีที่แปลกในการเขียนคำสั่ง ฉันสงสัยว่าเพราะเหตุใดบรรทัดที่สองของฉันจึงไม่ทำงาน mkdir หรือ ls ) เหตุผลที่ฉันไม่สามารถกำจัดได้ /usr/bin/env คือฉันกำลังใช้ Capistrano และมันจะช่วยเติมคำนำหน้าไว้ หากมีวิธีการกำจัด /usr/bin/envที่ดียิ่งขึ้น ขอบคุณล่วงหน้า.

2
ไฟล์ไม่แสดงขึ้นใน windows bash
ฉันเพิ่งตั้งค่า bash สำหรับ windows ด้วยการอัพเดต windows ใหม่ หลังจากตั้งค่าชื่อผู้ใช้และรหัสผ่านและพยายามที่จะสำรวจไดเรกทอรีของฉันฉันพบว่าไม่มีอะไรที่นั่น ไม่มีใครรู้ว่าทำไมสิ่งนี้จึงเกิดขึ้นและจะแก้ไขได้อย่างไร?
-1 windows  bash 

1
เหตุใดการตั้งค่านามแฝงจึงเขียนทับลิงก์ปฏิบัติการได้
ฉันอยากรู้ว่าทำไมการเพิ่มรายการถึง .bashrc ทำให้ลิงค์ถูกเขียนทับ? ตัวอย่างเช่นบนเครื่องทดสอบฉันติดตั้ง Java ด้วย apt-get install openjdk-7-jre แล้วเล่นด้วย .bashrc โดยการเพิ่ม alias java="echo Java!". เมื่อฉันวิ่ง java จากทุบตีฉันพบว่ามันสะท้อน Java! แทนที่จะเรียกใช้จาวาซึ่งอยู่ที่ /usr/bin/java. ฉันยังพบว่าสิ่งนี้เกิดขึ้นกับ ps, sh และ screen. เหตุใดจึงเป็นเช่นนี้
-1 linux  bash 

1
การย้ายไฟล์ PDF ด้วยสายอักขระและพิมพ์ ok หรือไม่พบในทุกการค้นหาไฟล์
ฉันใช้คำสั่งต่อไปนี้กับ pdf เพื่อค้นหาสตริงเฉพาะในไฟล์ pdf หลายไฟล์และย้ายไปยังไดเรกทอรีเป้าหมายหากมีการแข่งขัน: pdfgrep -H "DESIRE STRING" TARGET/* | grep --ignore-case --perl-regexp --only-matching '.*(.PDF)'| uniq | xargs -I{} mv -i {} DESTINATION/ ฉันต้องการพิมพ์ตกลงหากพบคู่ที่ตรงกันหรือไม่พบถ้าไม่มีคู่ที่ตรงกัน เป็นไปได้หรือไม่ที่จะรวมสิ่งนี้ไว้ในบรรทัดคำสั่ง? ขอบคุณ
-1 linux  bash  pdf  grep 

1
ฉันสามารถมี 2 โฟลเดอร์จาก 2 เซิร์ฟเวอร์ที่แตกต่างกันในแบบซิงค์เดียวหรือไม่
ฉันสามารถมี 2 โฟลเดอร์จาก 2 เซิร์ฟเวอร์ที่แตกต่างกันในการซิงค์ทางเดียว! ฉันมีเซิร์ฟเวอร์ Windows, เซิร์ฟเวอร์ 1: เซิร์ฟเวอร์สาธารณะ เซิร์ฟเวอร์ Windows, เซิร์ฟเวอร์ 2: ภายในเครือข่ายของฉัน: ภายใต้ NAT ปัญหาคือฉันได้รับไฟล์บางไฟล์ในโฟลเดอร์บนเซิร์ฟเวอร์ 1 และฉันต้องคัดลอกไปยังไดรฟ์เครือข่ายท้องถิ่น (เซิร์ฟเวอร์เครือข่ายท้องถิ่น 2) และลบต้นฉบับ (จำกัด พื้นที่) วิธีที่ฉันทำตอนนี้คือฉันเปิด Filezila ในเซิร์ฟเวอร์ 2 แล้วรีเฟรชเพื่อดูไฟล์ใหม่ ถ้าใช่ฉันดาวน์โหลดพวกเขาและลบต้นฉบับ (ฉันมีแผนที่ไดรเวอร์เครือข่ายเป็นท้องถิ่นภายใต้ตัวอักษรไดรเวอร์ "Z:") ฉันต้องการวิธีในการทำสิ่งนี้โดยอัตโนมัติ ฉันได้ลอง Bit Torrent Sync แล้ว แต่ฉันลบข้อมูลสำรองถ้าฉันลบต้นฉบับหรือวิธีอื่น และสร้างไฟล์ซ้ำ ฉันต้องการซิงค์เช่น Dropbox แต่หลังจากดาวน์โหลดจากเซิร์ฟเวอร์ 1 ฉันสามารถลบต้นฉบับหรือย้ายสำรองโดยไม่ต้องซิงค์อีกครั้ง หมายเหตุ: ฉันจะมีความสุขมากหากสามารถทำได้อย่างปลอดภัยเช่น SFTP
-1 windows  bash  ftp  automation  sync 

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