2010-06-23 2 views
26

예를 들어,이 줄은 실패Bash For-loop에서 Unix Nohup을 사용할 수없는 이유는 무엇입니까?

$ nohup for i in mydir/*.fasta; do ./myscript.sh "$i"; done > output.txt& 
-bash: syntax error near unexpected token `do 

을 할 수있는 올바른 방법은 무엇입니까?

+0

는 "왜",하지 않을 것을 nohup을()가'execv와'으로 인수를 실행하고,'execv와가()가'커널에 직접 전달되는 인수 벡터를 걸립니다 모든 쉘을 통해. 따라서, 쉘을 원한다면, nohup에게 스스로를 실행하도록 지시해야합니다. –

답변

60

왜냐하면 'nohup'은 셸 루프 구조가 아닌 단일 단어 명령과 그 인수를 기대하기 때문입니다. 다음을 사용해야합니다.

nohup sh -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done >output.txt' & 
+1

각 파일에 대해 output.txt를 통해이 파일을 쓸 수 있습니까? 거기에 중요한 정보가있는 경우 덮어 쓰지 않으려면'>'대신'>>'을 사용하십시오. –

+0

'output.txt'에 중요한 데이터가 있다면, 추가 모드에서도 프로그램의 출력을 실행하지 않을 것입니다. 나는 새로운 파일을 만들 것이고, 새로운 데이터가 내가 원한 것이라는 사실을 만족할 때만 마스터 파일에 추가 할 수있을 것이다. 물론 YMMV. –

+0

@JonathanLeffler는 질문에 대답하지 않습니다. 나는 이것이 단 한 번 자른다 고 믿습니다. –

8

내일 한 번에 할 수도 있지만 너무 좋을 수도 있습니다.

$ cat loopy.sh 
#!/bin/sh 
# a line of text describing what this task does 
for i in mydir/*.fast ; do 
    ./myscript.sh "$i" 
done > output.txt 
$ chmod +x loopy.sh 
$ nohup loopy.sh & 
+3

'loopy.sh'가 경로에 없다면 적어도 방금 시도한이 Red Hat 시스템에서'./loopy.sh'와 같이 호출해야합니다. 와. – Tshepang

-1

또한 나를 위해

for i in mydir/*.fasta; do nohup ./myscript.sh "$i" > output.txt; done & 
+2

아닙니다. for 루프가 로그 아웃 메시지를 수신하면 인터럽트가 발생하기 때문에 – Jav

+0

Jup. nohup은 nohup에서 명령을 사용해야하기 때문에 첫 번째가되어야합니다. – Kangarooo

3

로 쓸 수 조나단의 솔루션은 OUTPUT.TXT 올바르게 리디렉션하지 않습니다. 이 사람은 잘 작동 :

nohup bash -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done' > output.txt &

관련 문제