ใช้ nohup ใน Ubuntu - จะทำให้ไม่แสดงหมายเลขงานได้อย่างไร


0

ฉันใช้คำสั่งนี้:

$ nohup command > foo.out 2> foo.err < /dev/null &

ปัญหาของฉันคือแม้ว่าจะnohupทำให้คำสั่งของฉันทำงานในพื้นหลัง แต่ก็พิมพ์สิ่งนี้ลงในเทอร์มินัลของฉัน:

[1] 27918

ฉันจะทำให้มันไม่ส่งออกหมายเลขงานได้อย่างไร ฉันแค่อยากให้มันทำในพื้นหลังโดยไม่บอกอะไรเลย ใน Mac OS X นั่นเป็นสิ่งที่เกิดขึ้นดังนั้นฉันจึงค่อนข้างรำคาญว่ามันจะทำงานแตกต่างไปจาก Ubuntu ...

ขอบคุณสำหรับความช่วยเหลือ!


2
[1] 27918 มาจาก & ไม่ใช่ nohup
Majenko

ขอบคุณแมตต์นั่นแหละที่ทำได้ ตอนนี้ฉันจะปิดคำถามนี้ ...
Hora

วิธีการทำคือทำเครื่องหมายคำตอบว่ายอมรับโดยใช้เครื่องหมายถูกที่อยู่ติดกัน
Dennis Williamson

ดูsuperuser.com/faqส่วน "ฉันจะถามคำถามได้อย่างไร"
grawity

คำตอบ:


4

nohupข้อมูลงานที่แสดงโดยเปลือกของคุณไม่ได้

คุณสามารถลองทางเลือกนี้:

(yourcommand&)

( วางเปลือกย่อยซึ่งจัดการการควบคุมงานแตกต่างกัน

(ฉันมีnh() { ("$@" &); }ใน ~ / .bashrc ของฉันดังนั้นฉันสามารถพิมพ์nh commandเพื่อทำสิ่งเดียวกัน)

อีกวิธีที่แตกต่าง:

setsid yourcommand

แก้ไข:ดูเหมือนว่า(setsid yourcommand &)เป็นการผสมผสานที่ดีที่สุดเนื่องจากแยกออกจาก tty และทำงานได้อย่างเท่าเทียมกันในโหมดโต้ตอบและสคริปต์


(command &) ทำงานให้ฉันเมื่อฉันมีข้อผิดพลาด ioctl กับ nohup
Shahzada Hatim

1

[1] 27918 มาจาก & ไม่ใช่ nohup

ใส่คำสั่งที่คุณต้องการเรียกใช้ในพื้นหลังภายในไฟล์สคริปต์:

#!/bin/sh
/path/to/command & >/dev/null 2>/dev/null

แล้วเรียกสิ่งนั้นด้วย nohup

nohup sh /path/to/my/script > foo.out 2> foo.err < /dev/null

ผลลัพธ์ของ & จะถูกเปลี่ยนเส้นทางไปยัง / dev / null ภายในสคริปต์


&เป็นเพียงเทอร์มินอลคำสั่ง แต่จะไม่แสดงผลใด ๆ และคุณไม่สามารถเปลี่ยนทิศทางได้ ในโหมดโต้ตอบบรรทัดงานจะถูกพิมพ์โดยเชลล์ ในแบบไม่โต้ตอบ (รวมถึงสคริปต์) มันยังคงเงียบ การเปลี่ยนเส้นทางภายในของคุณนำไปใช้กับผลลัพธ์ของคำสั่งเองและฉันไม่คิดว่าการเปลี่ยนเส้นทางภายนอกจะแทนที่พวกเขา
grawity

1

เช่นเดียวกับที่กล่าวข้างต้น (ขอบคุณโดยวิธี)

ภายในสคริปต์ชื่อ test.ksh:

#!/bin/ksh
./test2.ksh >/dev/null
nohup ksh test2.ksh < /dev/null
echo  "whatever"

โดยที่ test2.ksh เป็นสคริปต์อื่น (หรืออาจเป็นคำสั่ง):

#!/bin/ksh
max=10
for ((i=2; i<=$max; ++i )) ; do
    echo -e "\n Hello world "
done

จากนั้นเรียกใช้:

~> ksh test.ksh

และผลลัพธ์คือ:

nohup: appending output to `nohup.out'
whatever
~>

มันใช้งานได้สำหรับฉัน

หากคุณยังคง & ในการเปลี่ยนเส้นทาง

./test2.ksh & >/dev/null

มันจะพิมพ์ทั้งใน tty และไฟล์. out

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