[bash] 쉘에서 한 줄에 여러 명령 실행
내가 파일을 말해봐 /templates/apple
내가 원하는
- 서로 다른 두 곳에 놓고
- 원본을 제거하십시오.
따라서 AND /templates/apple
로 복사
한 다음 원본을 제거하고 싶습니다./templates/used
/templates/inuse
이 cp
작업을 수행하는 가장 좋은 방법은 rm
무엇입니까? 아니면 더 좋은 방법이 있습니까?
나는 한 줄로 모든 것을하고 싶기 때문에 다음과 같이 보일 것이라고 생각합니다.
cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
이것이 올바른 구문입니까?
답변
|
(파이프)를 사용하여 명령 출력을 다른 명령으로 보냅니다. 찾고 &&
있는 것은 이전 명령이 성공한 경우에만 다음 명령을 실행하는 연산자입니다.
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
또는
cp /templates/apple /templates/used && mv /templates/apple /templates/inuse
bash의 명령 연산자 / 구분자를 요약 해보면 다음과 같습니다.
|
stdout
한 명령 의 표준 출력 ( )을 다른 명령의 표준 입력에 파이프 (파이프 라인)합니다 . 참고stderr
계속 될 일이 무엇이든 기본 목적지로 이동합니다.|&
양 파이프stdout
및stderr
다른 표준에 입력 한 명령. bash 버전 4 이상에서 사용 가능합니다.&&
&&
이전 명령이 성공한 경우에만 오른쪽 명령을 실행합니다 .||
||
이전 명령이 실패한 명령 만 오른쪽 명령을 실행합니다 .;
;
이전 명령의 성공 여부에 관계없이 항상 오른쪽 명령을 실행합니다 .set -e
이전에 호출 하지 않으면bash
오류로 실패합니다.
답변
cp
1 번 위치로 이동 한 다음 mv
2 번 위치로 이동 하지 않는 이유 는 원본을 “제거”하는 것입니다.
그리고 아니요, 올바른 구문이 아닙니다. |
한 프로그램의 출력을 “파이프”하고 다음 프로그램의 입력으로 전환하는 데 사용됩니다. 원하는 것은 ;
여러 명령을 분리하는 것입니다.
cp file1 file2 ; cp file1 file3 ; rm file1
다음 명령을 시작하기 전에 개별 명령이 성공해야하는 경우 &&
대신 다음을 사용하십시오 .
cp file1 file2 && cp file1 file3 && rm file1
이렇게하면 두 cp
명령 중 하나라도 실패하면 명령이 rm
실행되지 않습니다.
답변
참고 cp A B; rm A
정확히 mv A B
. 실제로 대상을 동일한 파일 시스템에 있다고 가정하고 바이트를 복사 할 필요가 없으므로 파일 이름을 바꾸면 더 빠릅니다. 그래서 너는 원해cp A B; mv A C
답변
다른 옵션은 Ctrl+V Ctrl+J각 명령 끝에 입력 하는 것입니다.
예 (교체 #
와 함께 Ctrl+V Ctrl+J) :
$ echo 1#
echo 2#
echo 3
산출:
1
2
3
이전 명령이 실패했는지 여부에 관계없이 명령을 실행합니다.
다음과 같습니다 : echo 1; echo 2; echo 3
실패한 명령에서 실행을 중지 &&
하려면 마지막 명령을 제외한 각 행의 끝에 추가하십시오 .
예 (교체 #
와 함께 Ctrl+V Ctrl+J) :
$ echo 1 &&#
failed-command &&#
echo 2
산출:
1
failed-command: command not found
에서 zsh
당신은 또한 사용할 수 있습니다 Alt+Enter또는 Esc+Enter대신Ctrl+V Ctrl+J
답변
이 시도..
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
답변
파이프를 사용하는 것이 이상하게 보입니다. 어쨌든 논리 and
Bash 연산자를 사용해야합니다 .
$ cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apples
cp
명령이 실패 하면 명령 rm
이 실행되지 않습니다.
또는 for
루프 및을 사용하여보다 정교한 명령 줄을 만들 수 있습니다 cmp
.