다시 시작한 후 쉘 스크립트 파일을 한 번 실행하십시오.

다시 시작한 후 쉘 스크립트 파일을 한 번 실행하십시오.

컴퓨터를 다시 시작한 후 쉘 스크립트를 한 번만 실행하는 방법에 대해 고민하고 있습니다. 파일에 다음 내용이 있고 파일에서 첫 번째 요소만 가져오는 테스트를 작성하고 있습니다.

#!/bin/bash

echo "A" >> /home/vtr/Documents/test.txt
echo "B" >> /home/vtr/Documents/test.txt 
echo "C" >> /home/vtr/Documents/test.txt

sleep 10  #this sleep I put only to the lines below be executed when the machine came back to the desktop
test=$(sort /home/vtr/Documents/test.txt | uniq | head -n 1)
echo $test >> /home/vtr/Documents/finaltest.txt

나는 cron과 systemd를 통해 이 작업을 수행했지만 둘 다 A출력으로만 여러 번 실행되는 파일을 얻습니다.

A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A

이것은 내 /etc/systemd/system/testing.service파일입니다:

[Unit]
Description=One test script
After=network.target

[Service]
Type=oneshot
ExecStart=/home/vtr/Documents/testing.sh

[Install]
WantedBy=multi-user.target

또한 위의 절전, 테스트 및 에코 줄 없이 "A", "B" 및 "C"만 쓰는 테스트를 실행하려고 시도했지만 echo "C" >> /home/vtr/Documents/test.txt동일한 내용이 있습니다. 출력 파일은 다음과 같아야 합니다.

A
B
C

그러나 실제로는 몇 번 인쇄하고 실행하기도 합니다.

A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C

재부팅 후 스크립트를 한 번 실행하는 방법이 있습니까?

답변1

먼저 스크립트를 단순화할 수 있습니다.

#!/bin/bash

printf "A\nB\nC\n" >> /home/vtr/Documents/test.txt

sleep 10
sort -u /home/vtr/Documents/test.txt |tee /home/vtr/Documents/test.txt | head -1 >> /home/vtr/Documents/finaltest.txt

cron다음과 같은 레코드를 추가하면 :

@reboot /home/vtr/Documents/testing.sh

시작 시 스크립트를 실행합니다.

테스트를 위해 다음과 같은 스크립트를 작성할 수 있습니다.

printf "A\nB\nC\n" >> /home/vtr/Documents/1.txt
    
    sleep 10
    sort -u /home/vtr/Documents/test.txt >/home/vtr/Documents/2.txt
sort -u /home/vtr/Documents/test.txt|tee /home/vtr/Documents/test.txt >/home/vtr/Documents/3.txt
sort -u /home/vtr/Documents/test.txt |tee /home/vtr/Documents/test.txt | head -1 >> /home/vtr/Documents/4.txt

그리고 이 파일의 내용을 조사해 보세요. 첫 번째 줄 뒤에 추가하여 만들 수도 있습니다.

#!/bin/bash 
set -x

답변2

크론탭을 사용해 보셨나요?@reboot범위? 어쩌면 @reboot /path/to/bashscript.shcrontab 파일 끝에 추가된 명령을 사용해야 할 수도 있습니다 crontab -e. 또한 >>bash 스크립트의 연산자를 >연산자로 변경하고 다시 시도하십시오.

관련 정보