SFTP 연결 후 로컬 셸의 조건인 경우

SFTP 연결 후 로컬 셸의 조건인 경우

파일 크기가 0인 경우 로컬 셸에서 다음 스크립트를 사용하여 파일을 한 디렉터리에서 다른 디렉터리로 이동했습니다.

if [[ ! -s /directory1/subdirectory1/file1.txt ]]
then
    mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2;
fi;

이제 동일한 스크립트를 사용하여 추가하고 싶습니다.!고객 서버에 SFTP 연결을 설정한 후 로컬 셸에서 동일한 명령을 실행합니다.

!if [[ ! -s /directory1/subdirectory1/file1.txt ]]
then
    mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2/; fi;

다음 오류로 인해 스크립트가 실패합니다./QOpenSys/usr/bin/bsh: 1행의 구문 오류: 예상치 못한 'fi'. SFTP를 통해 연결을 설정한 후 로컬 셸 명령이 포함된 스크립트를 성공적으로 실행했지만 성공하지 못했습니다. 우리는 iSeries V7.2를 실행하고 있습니다. 도움을 주시면 감사하겠습니다.

답변1

무엇을 달성하고 싶나요?

Bash 스크립트의 경우! 출력 리턴을 반전시킵니다. 실행 중인 CLI의 예를 보려면 다음을 수행하세요.

ls ; echo $?

0을 반환해야 함

! ls ; echo $?

1을 반환합니다. 폴더가 가득 찬 경우 반품 하단을 주의 깊게 살펴보세요. 실행 방법에 따라 0 또는 1을 얻게 됩니다.

귀하의 경우! !if, not !if와 같은 if(공백 없음) 옆에는 if가 fi로 반전되고 bash는 fi가 명령이 아니라고 말합니다. 시도해 보고 사이에 공백을 두십시오! 그렇다면 무슨 일이 일어나는지보십시오. 무슨 일이 일어나야 할지 잘 모르겠습니다. 내가 말했듯이, 원하는 결과를 설명하면 다른 사람들이 답을 얻는 데 도움이 됩니다.

답변2

  1. 셸 이스케이프를 사용하려면 일반적으로 셸 명령 전체를 한 줄에 입력해야 합니다. 들어가려고 노력하다

    !if [[ ! -s /directory1/subdirectory1/file1.txt ]]; then mv /directory1/subdirectory1/file1.txt /directory2/subdirectory2; fi
    

    (끝에는 세미콜론이 필요하지 않습니다.)

  2. 동일한 명령을 여러 번 실행하려는 경우 해당 명령을 (로컬) 쉘 스크립트에 넣어 생활을 단순화할 수 있습니다. 그런 다음 다음을 입력하여 실행할 수 있습니다.

    !my_conditional_mv
    

    (또는 무엇이라고 부르든 간에).

관련 정보