[linux] 한 줄에 여러 Linux 명령 결합 실행

배포 작업을 수행하기 위해 여러 Linux 명령을 한 줄로 병합하려고합니다. 예를 들어

cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install



답변

이전 명령이 성공한 경우에만 각 명령을 실행하려면 &&연산자를 사용하여 명령을 결합하십시오 .

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

명령 중 하나가 실패하면 그 뒤에 오는 다른 모든 명령이 실행되지 않습니다.

이전 명령의 실패 여부에 관계없이 모든 명령을 실행하려면 세미콜론으로 구분하십시오.

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

귀하의 경우 다음 명령의 실행이 이전 명령의 성공에 달려있는 첫 번째 경우를 원한다고 생각합니다.

모든 명령을 스크립트에 넣고 대신 실행할 수도 있습니다.

#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install

(라인 끝에있는 백 슬래시는 쉘이 다음 라인이 새로운 명령이라고 생각하지 않도록하기 위해 존재합니다. 백 슬래시를 생략하면 전체 명령을 한 라인에 작성해야합니다.)

파일을 예를 들어 파일에 저장 myscript하고 실행 파일로 만드십시오.

chmod +x myscript

이제 컴퓨터의 다른 프로그램과 마찬가지로 해당 스크립트를 실행할 수 있습니다. 그러나 PATH환경 변수에 나열된 디렉토리 (예 /usr/local/bin: 일부 Linux 배포판 ~/bin) 에 디렉토리를 배치하지 않으면 해당 스크립트의 경로를 지정해야합니다. 현재 디렉토리에 있으면 다음을 사용하여 실행하십시오.

./myscript

스크립트의 명령은 첫 번째 예의 명령과 동일한 방식으로 작동합니다. 다음 명령은 이전 명령이 성공한 경우에만 실행됩니다. 모든 명령을 무조건 실행하려면 각 명령을 해당 행에 나열하십시오.

#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install


답변

;를 사용하여 발견했습니다. 명령을 분리하는 것은 포 그라운드에서만 작동합니다. 예 :

cmd1; cmd2; cmd3 &cmd3백그라운드 에서만 실행 되는 반면,
cmd1 && cmd2 && cmd3 &오류가없는 경우 백그라운드에서 전체 체인을 실행합니다.

괄호를 사용하여 무조건 실행을 처리하려면 다음을 해결하십시오.

(cmd1; cmd2; cmd3) & -단계가 실패하더라도 백그라운드에서 일련의 명령을 실행합니다.


답변

세미콜론을 사용하여 명령을 분리 할 수 ​​있습니다.

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install

그게 무슨 소리 야?


답변

한 번에 모두 실행하려면 파이프 라인 키 “|”를 사용할 수 있습니다. 이렇게 :

$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install


답변

이전 명령의 실행 여부에 관계없이 모든 명령을 실행하려면 세미콜론 (;)을 사용하여 명령을 분리 할 수 ​​있습니다.

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

이전 명령이 성공한 경우에만 다음 명령을 실행하려면 &&를 사용하여 명령을 분리 할 수 ​​있습니다.

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

귀하의 경우 연속 명령의 실행은 이전 명령에 의존하는 것처럼 보이므로 두 번째 예를 사용하십시오 (예 : &&를 사용하여 명령을 결합하십시오).


답변

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install


답변

단 하나의 앰퍼샌드의 유틸리티는 무엇입니까? 오늘 아침, XFCE 패널 (Manjaro + XFCE)에서 2 개의 암호 관리자를 동시에 시작하기 위해 런처를 만들었습니다.

sh -c "keepassx && password-gorilla"
or
sh -c "keepassx; password-gorilla"

그러나 원하는대로 작동하지 않습니다. IE, 첫 번째 앱은 시작하지만 두 번째 앱은 이전 앱이 닫힐 때만 시작됩니다

그러나 (단 하나의 앰퍼샌드로)

sh -c "keepassx & password-gorilla"

그리고 내가 원하는대로 작동합니다 …