셸의 한 줄에 여러 명령어 실행
파일이 있다고 합니다./templates/apple
그리고 저는
- 그것을 두 곳에 놓고 나서
- 원본을 제거하다
그렇게,/templates/apple
에 카피됩니다./templates/used
그리고./templates/inuse
그 후 원본을 삭제하고 싶습니다.
이cp
이것을 하는 가장 좋은 방법, 그 다음rm
아니면 더 좋은 방법이 있을까요?
모든 것을 한 줄로 하고 싶기 때문에 다음과 같이 보일 수 있습니다.
cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
이것이 올바른 구문입니까?
사용하고 있습니다.|
(파이프) 명령어의 출력을 다른 명령어로 유도합니다.당신이 찾고 있는 것은&&
operator는 이전 명령어가 성공한 경우에만 다음 명령을 실행합니다.
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+J.
예(치환)#
포함):
$ echo 1#
echo 2#
echo 3
출력:
1
2
3
그러면 이전 명령이 실패했는지 여부에 관계없이 명령이 실행됩니다.
일::echo 1; echo 2; echo 3
명령어의 하려면 , 「」를 합니다.&&
마지막 행을 제외한 각 행의 끝에 있습니다.
치환)#
포함):
$ echo 1 &&#
failed-command &&#
echo 2
출력:
1
failed-command: command not found
»zsh
또는 대신 을 사용할 수도 있습니다.
파이프를 사용하는 게 이상하게 느껴져요.인 것을 .and
Bash 산 bash :
$ cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apples
경우,cp
하여 "" " " " " " "가rm
을 사용하다
보다 수도 .for
및 ""cmp
.
이거 드셔보세요.
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
언급URL : https://stackoverflow.com/questions/5130847/running-multiple-commands-in-one-line-in-shell
'IT' 카테고리의 다른 글
Git: 마스터에서 스테이징되지 않은/커밋되지 않은 변경으로 브랜치를 만듭니다. (0) | 2023.04.13 |
---|---|
Excel에서 VBA 어레이에 고유한 값 입력 (0) | 2023.04.13 |
MVVM에서 모델의 역할 (0) | 2023.04.13 |
컴파일러 오류:사용자 정의 유형이 정의되지 않았습니다. (0) | 2023.04.13 |
종속성 속성 변경 듣기 (0) | 2023.04.13 |