คำถามติดแท็ก here-document

5
ไม่สามารถเยื้อง heredoc เพื่อให้ตรงกับการเยื้องของการซ้อน
หากมี "ปัญหาโลกครั้งแรก" สำหรับการเขียนสคริปต์นี่จะเป็นเช่นนั้น ฉันมีรหัสต่อไปนี้ในสคริปต์ที่ฉันอัปเดต: if [ $diffLines -eq 1 ]; then dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g') mailx -r "Systems and Operations <sysadmin@[redacted].edu>" -s "Warning Stale BB Data" jadavis6@[redacted].edu <<EOI Last Change: $dateLastChanged This is an automated warning of stale data for the UNC-G …

2
คุณจะใช้การเปลี่ยนเส้นทางผลลัพธ์ร่วมกับ here-เอกสารและ cat ได้อย่างไร
สมมติว่าฉันมีสคริปต์ที่ฉันต้องการไพพ์ไปยังคำสั่งอื่นหรือเปลี่ยนเส้นทางไปยังไฟล์ (ไพพ์shสำหรับตัวอย่าง) สมมติว่าฉันใช้ทุบตี ฉันสามารถทำได้โดยใช้echo: echo "touch somefile echo foo > somefile" | sh ฉันสามารถทำสิ่งเดียวกันได้โดยใช้cat: cat << EOF touch somefile echo foo > somefile EOF แต่ถ้าฉันแทนที่ "EOF" ด้วย "EOF | sh" แค่คิดว่ามันเป็นส่วนหนึ่งของ heredoc ฉันจะสร้างมันขึ้นมาเพื่อให้catส่งออกข้อความจาก stdin แล้วไปป์ที่ตำแหน่งใด ๆ ?

1
POSIX ต้องการอะไรสำหรับเอกสารที่ยกมาที่นี่ภายในการทดแทนคำสั่ง?
ในคำถามนี้มีคนรายงานปัญหาการใช้ที่นี่เอกสารด้วยคำคั่นอ้างภายใน$(...)แทนคำสั่งที่เครื่องหมาย\ที่ท้ายบรรทัดภายในการเรียกเอกสารการขึ้นบรรทัดใหม่เข้าสู่เส้นต่อเนื่องขณะเดียวกันที่นี่เอกสารนอกงานคำสั่งเปลี่ยนตัวตามที่คาดไว้ . นี่คือตัวอย่างเอกสารที่ง่ายขึ้น: cat <<'EOT' abc ` def ghi \ jkl EOT ซึ่งรวมถึง backtick หนึ่งรายการและแบ็กสแลชหนึ่งรายการที่ท้ายบรรทัด ตัวคั่นถูกยกมาดังนั้นจึงไม่มีการขยายเกิดขึ้นภายในร่างกาย ใน Bourne-alikes ทั้งหมดฉันสามารถค้นหาผลลัพธ์นี้เป็นคำต่อคำเนื้อหา หากฉันวางเอกสารเดียวกันไว้ภายในการทดแทนคำสั่งดังนี้: x=$(cat <<'EOT' abc ` def ghi \ jkl EOT ) echo "$x" จากนั้นพวกเขาจะไม่ทำงานเหมือนกันอีกต่อไป: dash, ash, zsh, ksh93, BusyBox ash, mkshและ SunOS 5.10 POSIX shทั้งหมดให้เนื้อหาคำต่อคำของเอกสารเป็นมาก่อน Bash 3.2 ให้ข้อผิดพลาดทางไวยากรณ์สำหรับ backtick ที่ไม่ตรงกัน ด้วย …

1
ผ่านและการตั้งค่าตัวแปรใน heredoc
ฉันมีสคริปต์ที่ต้องทำสิ่งต่าง ๆ มากมายในเครื่องระยะไกลที่แตกต่างกัน ฉันคิดว่า heredoc จะใช้งานได้ แต่ฉันไม่สามารถใช้ตัวแปรที่กำหนดไว้ที่อื่นในสคริปต์และอีกหนึ่งที่กำหนดไว้ใน heredoc นี่คือรหัสบางส่วน: #!/bin/sh FOO="foo" ssh some.remote.host << EOF BAR="bar" echo "FOO=$FOO" echo "BAR=$BAR" EOF นี่พิมพ์เฉพาะสิ่งต่อไปนี้: FOO = BAR บาร์ = อย่างไรก็ตามถ้าฉันอ้างถึงบรรทัด EOF เช่นนี้ ssh some.remote.host << "EOF" แล้วมันพิมพ์เฉพาะสิ่งต่อไปนี้: FOO = foo BAR = มีคำแนะนำเกี่ยวกับวิธีที่ฉันสามารถใช้ตัวแปรทั้งสองภายใน heredoc? ขอบคุณ

3
ข้อผิดพลาดสคริปต์ bash stty: อินพุตมาตรฐาน: ioctl ที่ไม่เหมาะสมสำหรับอุปกรณ์
ฉันใช้เอกสารที่นี่ในสคริปต์ทุบตีเพื่อทำการติดตั้งและตั้งค่าอัตโนมัติซึ่งต้องใช้รหัสผ่านหลายครั้ง ฉันป้อนรหัสผ่านหนึ่งครั้งและสคริปต์จะส่งไปยังคำสั่งต่างๆ ในกรณีส่วนใหญ่วิธีการที่นี่เอกสารจัดการปรับนี้ อย่างไรก็ตามในกรณีหนึ่งฉันได้รับข้อผิดพลาดนี้: Enter VNC password: stty: standard input: Inappropriate ioctl for device Verify password: stty: standard input: Inappropriate ioctl for device โปรดสังเกตว่าข้อความแสดงข้อผิดพลาดนี้มาจากx11vnc -storepassword(ไม่ใช่จากsudo) ปัญหาของฉันเกี่ยวข้องกับx11vnc -storepasswdและนี่คือรหัสของฉัน: sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC password password y ENDDOC เห็นได้ชัดว่า (จากข้อผิดพลาด) ไม่ทำงาน ฉันขอขอบคุณตัวอย่างการทำงานของวิธีการใช้งานsudo x11vnc -storepasswd ~/.vnc/passwdในสคริปต์ ในกรณีที่ช่วยได้พรอมต์จะมีลักษณะดังนี้: ป้อนรหัสผ่าน VNC: ยืนยันรหัสผ่าน: เขียนรหัสผ่านไปที่ /home/user/.vnc/passwd? …

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

3
วิธีรวมกระบวนการทดแทนของ Bash เข้ากับเอกสาร HERE ได้อย่างไร
ใน Bash รุ่น 4.2.47 (1) - ปล่อยเมื่อฉันพยายามที่จะจัดรูปแบบข้อความที่จัดมาจาก HERE-dcoument ดังนี้: cat <(fmt --width=10 <<FOOBAR (I want the surrounding parentheses to be part of the HERE-document) (Even the preceding unbalanced parenthesis should be part of it. FOOBAR ) # I want this paranthesis to end the process substitution. ฉันได้รับข้อผิดพลาดต่อไปนี้: bash: bad substitution: …

3
จะเข้าใจคำสั่ง“ cat> file_name << blah” ได้อย่างไร?
ในคำสั่งต่อไป cat ใช้เนื้อหาของ here-doc และเปลี่ยนเส้นทางไปยังไฟล์ conf: cat &gt; conf &lt;&lt; EOF var1="cat" var2="dog" var3="hamster" EOF จะเข้าใจลำดับของคำสั่งได้อย่างไร bashขั้นตอนแรกจะประมวลผลทุกอย่าง (ที่นี่ส่วน doc) และเป็นขั้นตอนสุดท้ายมันดู&gt; confส่วนหรือไม่

2
วิธีรันโค้ดในเซสชั่น tmux ใหม่ - จากภายในเซสชันปัจจุบัน?
ฉันใช้ Ubuntu 16.04 และฉันต้องการtmuxวิธีแก้ไขปัญหาต่อไปนี้เพราะฉันต้องการเรียกใช้กระบวนการหมดเวลาด้วยsleepในกรณีเฉพาะของฉันฉันไม่พอใจatและพบข้อบกพร่องด้วยnohup(เมื่อรวมnohup-sleep) ตอนนี้tmuxดูเหมือนจะเป็นทางเลือกที่ดีที่สุดเนื่องจากมีกลไกการไม่วางสายและทำงานได้ดีในการใช้งานด้วยตนเอง (ฉันถามคำถามเฉพาะเกี่ยวกับกระบวนการทำให้เป็นอัตโนมัติด้วยตนเองฉันสามารถทำได้ด้วยตนเอง) สิ่งที่ฉันต้องการ: ฉันต้องการวิธีในการดำเนินการ 3 อย่างต่อไปนี้ทั้งหมดในการดำเนินการครั้งเดียว: แนบtmuxเซสชันใหม่ (sleep 30m ; rm -rf dir_name ; exit)ฉีดชุดพร้อมคำสั่งไปยังเซสชั่นว่าเหมือน โดยเฉพาะอย่างยิ่งฉันต้องการชุดหลายบรรทัดไม่ใช่แถวยาวหนึ่งแถว การดำเนินการคำสั่งด้านบนตั้งช่วงเวลาที่มันเสร็จสิ้นการเขียนเป็น stdin ในtmuxเซสชั่นใหม่ กล่าวอีกนัยหนึ่งฉันต้องการรันชุดรหัสในtmuxเซสชันอื่นที่สร้างขึ้นเป็นพิเศษสำหรับสาเหตุนั้น แต่จะทำทั้งหมดในการดำเนินการครั้งเดียว หมายเหตุ: ฉันตั้งเป้าหมายที่จะทำทุกอย่างจากเซสชันการทำงานดั้งเดิมของฉัน (อันที่ฉันทำงานมาเกือบตลอดเวลา) โดยทั่วไปฉันไม่มีความตั้งใจที่จะเยี่ยมชมเซสชั่นที่เพิ่งสร้างใหม่ฉันแค่ต้องการสร้างมันด้วยโค้ดที่ถูกเรียกใช้โดยอัตโนมัติและนั่นก็คือ ถ้าเป็นไปได้ฉันอยากได้โซลูชัน heredoc ฉันคิดว่ามันมีประสิทธิภาพมากที่สุด

4
เหตุใดเนื้อหา JSON จาก heredoc จึงไม่สามารถแยกวิเคราะห์ได้
ฉันมีส่วนของ JSON ต่อไปนี้ใช้ไม่ได้: VALUE=&lt;&lt;PERSON { "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" } PERSON echo -n "$VALUE" | python -m json.tool ผลลัพธ์คือ: ไม่สามารถถอดรหัสวัตถุ JSON ได้ ทำเช่นเดียวกันกับjqเช่น echo -n "$VALUE" | jq '.' ไม่มีเอาต์พุต มีพฤติกรรมเหมือนกันสำหรับสิ่งต่อไปนี้: VALUE=&lt;&lt;PERSON '{ "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" }' PERSON echo -n "$VALUE" | python -m json.tool …

3
bash: ปัญหาบางอย่างเมื่อใช้การอ่าน <<<“ $ VARIABLE” บนพาร์ติชันรูทแบบอ่านอย่างเดียว การแก้ไขปัญหาใด ๆ ที่รู้จักกัน?
โดยบังเอิญฉันต้องใช้สคริปต์ ATA-ID-to-device-name (อยู่ที่นี่: /server/244944/linux-ata-errors-translating-to-a-device-name/ 426561 # 426561 ) ในพาร์ติชันแบบอ่านอย่างเดียว /ในกรณีที่คุณอยากรู้อยากเห็นมันเป็นคอนโซลการกู้คืนของ Ubuntu ซึ่งจะช่วยให้คุณเข้าถึง/พาร์ติชันของคุณแต่จะติดตั้งเป็นอ่านอย่างเดียวโดยค่าเริ่มต้น ฉันดีใจที่เป็นเช่นนั้นเพราะไม่เช่นนั้นฉันอาจไม่เคยพบว่าสคริปต์ของฉันทำงานผิดปกติในระบบ R / O เนื่องจากบรรทัดที่เฉพาะเจาะจงอันนี้: IFS=: read HostMain HostMid HostSub &lt;&lt;&lt; "$HostFull" วิธีนี้ใช้ไม่ได้หากไม่มีสิทธิ์ในการเขียน ฉันไม่คิดเลยว่ามันจะล้มเหลว แต่เห็นได้ชัดว่า&lt;&lt;&lt;ผู้ประกอบการไม่จำเป็นต้องเขียนไฟล์ชั่วคราวบางส่วนไปยังที่อื่น แต่มีวิธีใดที่จะหลีกเลี่ยงการสร้างไฟล์ชั่วคราวหรือมีวิธีใดที่จะระบุตำแหน่งของไฟล์ที่ถูกเขียนไป? ในคอนโซลการกู้คืนของอูบุนตูมี - ผิดปกติพอ --- เขียนสิทธิ์ใน/runไดเรกทอรีดังนั้นถ้าฉันสามารถ "บอก" readเพื่อเขียนไฟล์ชั่วคราวไปที่อื่นที่ไม่ใช่ปกติ

3
การกำหนดเอาต์พุตของเคียวรี SQL ให้กับตัวแปร
ฉันกำลังเชื่อมต่อกับฐานข้อมูล Oracle และยิงแบบสอบถามและกำหนดผลลัพธ์ให้กับตัวแปร แต่เมื่อฉันสะท้อนค่าของตัวแปรมันไม่ได้รับการพิมพ์อย่างถูกต้อง count=`sqlplus -s $configuser/$configpass@$ORACLE_SID &lt;&lt;END set pagesize 0 feedback off verify off heading off echo off; select max(cust_id) from cutomers exit; END` echo $count แบบสอบถามส่งคืนผลลัพธ์ที่ถูกต้องเมื่อเรียกใช้งานบนฐานข้อมูล แต่ตัวแปร "นับ" มีค่าที่ไม่ถูกต้อง

3
ใช้ here-doc สำหรับ `sed 'และไฟล์
ฉันต้องการใช้ here-doc สำหรับคำสั่ง sed และจัดเตรียมไฟล์ที่จะอ่านและไฟล์เอาต์พุต ฉันดูที่นี่ - เอกสารจากคู่มือการสคริปต์การทุบตีขั้นสูง แต่ไม่ได้พูดถึงสิ่งใดเกี่ยวกับอาร์กิวเมนต์ปกติในการใช้ here-doc เป็นไปได้ไหม ฉันต้องการบรรลุสิ่งต่อไปนี้: #!/bin/bash OUT=/tmp/outfile.txt IN=/my_in_file.txt sed $IN &lt;&lt; SED_SCRIPT s/a/1/g s/test/full/g SED_SCRIPT &gt; $OUT; ความช่วยเหลือใด ๆ ที่เป็นที่นิยมจริงๆ

1
วิธี echo ตัวแปรโดยใช้ cat เป็นไฟล์ได้อย่างไร
ฉันมีสคริปต์ง่าย ๆ เช่นนี้: #!/bin/bash BOO=bla-bla-bla cat &gt; ./Makefile &lt;&lt;'EOF' Hello INCLUDES := -I/data/opt/include/ -Ideps/ -I$BOO/include EOF แต่มันจะส่งสัญญาณออกเป็นไฟล์: Hello INCLUDES := -I/data/opt/include/ -Ideps/ -I$BOO/include จะทำให้การcatใช้ค่าตัวแปรของฉันไม่ใช่ชื่อภายในสตริงนั้นได้อย่างไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.