2017-11-25 15 views
0

일부 원격 호스트에서 여러 명령 세트를 병렬로 실행하려고합니다. 나는이 명령을 구성, 다음의 라인을 따라, 로컬 파일에 뭔가를 출력을 기록하는 스크립트를 만들었습니다원격 호스트에 bash 명령 - 로컬 출력 파일을 쓰는 중 오류가 발생했습니다.

ssh <me>@<ip1> "command" 2> ./path/to/file/newFile1.txt & ssh <me>@<ip2> 
"command" 2> ./path/to/file/newFile2.txt & ssh <me>@<ip2> "command" 2> 
./path/to/file/newFile3.txt; ...(same repeats itself, with new commands and new 
file names)... 

내 문제는 내 스크립트가이 명령을 실행하면, 내가 얻고 있다는 것입니다 다음 오류 :

bash: ./path/to/file/newFile1.txt: No such file or directory 
bash: ./path/to/file/newFile2.txt: No such file or directory 
bash: ./path/to/file/newFile3.txt: No such file or directory 
... 

이러한 파일은 존재하지 않지만 기록됩니다. 즉, 디렉토리 경로가 유효합니다.

이상한 점은 전체 큰 명령을 복사하여 붙여 넣으면 아무런 문제없이 작동한다는 것입니다. 차라리 자동화 된 tho를 갖고 싶습니다;).

아이디어가 있으십니까?

편집 - 자세한 내용은 :

- home 
    - User 
    - Desktop 
     - Servers 
     - Outputs 
      - ... 

내가 집/사용자/데스크톱에서 bash는 스크립트를 실행하고/서버 :

내 파일 시스템은 다음과 같다. 스크립트는 원격 서버에서 실행해야하는 명령을 작성합니다. 우선 스크립트는 파일이 저장 될 디렉토리를 만듭니다.

outputFolder="./Outputs" 
... 
mkdir -p ${outputFolder}/f{fileNumb} 
... 

스크립트는 리모컨 호스트에서 호출 할 명령을 계속 작성하며 해당 출력은 작성된 디렉토리에 배치됩니다. 디렉토리가 있습니다. 명령을 실행하면 오류가 발생하지만 인쇄를하고 동일한 위치에 명령을 복사하는 것은 어떤 이유로 작동합니다. 나는 또한 디렉토리에 대한 전체 경로를 제공하려고 시도했지만 여전히 동일한 문제가 있습니다.

희망 조금 더 명확히했습니다.

+1

리디렉션이 작동하려면 경로가 있어야합니다 (중간 디렉토리는 자동으로 생성되지 않습니다). 그래서'mkdir -p path/to/file'을 리다이렉션'> path/to/file/newFile.txt' 전에 넣으십시오. –

+0

귀하의 질문에 투기 이외의 다른 정보를 허용하기에는 관련 정보가 충분하지 않은 것으로 보입니다. 모든 관련 정보 (및 최소한의 관련성없는 정보)가 여기에 있도록 문제의 [최소한의 완전하고 검증 가능한 예] (https://stackoverflow.com/help/mcve)를 작성하십시오. –

+0

귀하의 질문 * 여전히 * 무슨 일이 일어나고 있는지를 알려주는 정보가 충분하지 않습니다. 그것이 바로 MCVE를 만드는 요점입니다. 그러나 "명령 생성"에 대한 언급은 의심 스럽습니다. 실행 전에 변수에 명령을 저장하려고합니까? 그렇다면 잘못 될 수있는 많은 것들이 있습니다. [BashFAQ # 50 : 변수에 명령을 넣으려고하는데 복잡한 경우는 항상 실패합니다!] (http://mywiki.wooledge.org/BashFAQ/050). –

답변

1

정확한 오류 메시지가 얻을이 경우 :

다음
bash: ./path/to/file/newFile1.txt: No such file or directory 

실제로 " ./path/to/file/newFile1.txt"라는 파일을 열하려고 있도록, 콜론과 점 사이에 여분의 공간가 있다는 것을 알게 될 것이다 (없이 따옴표).

그러나 그것을 달성하기 위해, 당신은 일정한 공간보다 뭔가 다른 것

something ... 2> " ./path/to/file/newFile1.txt" 

또는 첫 번째 문자에로 리디렉션에 파일 이름 따옴표를 사용해야 할 것입니다. non-breaking space 아마도, 아마도 alt-space를 건 드리면 어떤 편집자가 만들 수있는 가능성이 있습니다.

+0

좋은 생각 이었지만 다시 확인했는데 하나의 공간 만 있습니다. – dtam

1

질문에 올바르게 답변 한 것으로 보이지 않습니다.

이것은 ssh의 문제는 아니지만 (ssh) 명령을 호출하는 방식입니다.

당신은 파일에 명령을 쓰고 있다고 말합니다 ... 아마 당신은 그 파일을 스크립트로 실행 중일 것입니다. 그렇게하기 위해 사용하는 코드를 보여줄 수 있습니까? 나는 그것이 당신의 문제라고 믿습니다.

스크립트를 실행할 때 작업 디렉토리가 변경되는 방식에 대해 잘못된 가정을했다고 생각됩니다. 그렇지 않습니다. 상대 경로를 나열하고 있으므로 상대 경로를 아는 것이 중요합니다. 그것은 복사하여 붙여 넣을 때 작동하는 가장 큰 이유입니다 ... 다른 작업 디렉토리에서 실행 중입니다.

+0

복사하여 붙여 넣을 때 실행중인 스크립트와 동일한 위치에 저장합니다. 도움이된다면 원본 정보를 좀 더 많은 정보로 편집했습니다. – dtam

0

저는 bash 스크립팅을 처음 접했고 내가 본 다른 스크립트를 기반으로 스크립트를 작성하고있었습니다. 나는 단순히 명령이 저장된 변수를 호출하여 명령을 "실행"하였다

$cmd 

를 해결 사용하여 : 대신

eval $cmd 

. 내 잘못, 시작부터 전체 스크립트를 제공해야합니다.