如果我有一個像這樣的 bash 腳本
#!/bin/bash -p
echo "PART A PID $$" >> "txt$$.txt";
for ((a=1; a<=10; a ))
do
sleep 1
echo "PART B$a" >> "txt$$.txt";
done
echo "PART C" >> "txt$$.txt";
我知道./script.sh & disown可以防止腳本在 SSH 退出時停止,但我想實作這一點,而無需將腳本置于后臺。
PART A
PART B1
PART B2
PART B3
PART B4
PART B5
PART B6
PART B7
PART B8
PART B9
PART B10
PART C
并得到這樣的輸出。
我想等待回圈獲得有序輸出。
注意(我不想要 nohup)
編輯
我這樣做是因為我想開始不止一個。
如果我喜歡@Petesh 在答案中所說的
#!/bin/bash -p
(
echo "PART A PID $$" >> "txt$$.txt";
for ((a=1; a<=10; a ))
do
sleep 1
echo "PART B$a" >> "txt$$.txt";
done
echo "PART C" >> "txt$$.txt";
)& disown
PID 變化。這樣,如果我想停止該程序,我將無法獲得 pid 的原始參考。
我想知道是否有一些簡單的東西可以放在底部,而不會打亂所有代碼
uj5u.com熱心網友回復:
正如您在評論中所解釋的那樣,您的真正目標是讓您的腳本默認仍然在前臺運行,但要確保它能夠在 SSH 斷開連接的情況下繼續存在。
您可以在不需要disown任何方式的情況下執行此操作,但代碼需要放在頂部而不是底部:
#!/usr/bin/env bash
# redirect all three of stdin, stdout and stderr (not just stdout!)
exec >"txt$$.txt" 2>"err$$.txt" </dev/null
# ignore any SIGHUP signals received
trap : SIGHUP
# ...put the content of your script here
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387537.html
上一篇:嘗試回圈API呼叫直到滿足條件
