![쉘 스크립트에서 CLI 명령 사용 [닫기]](https://linux55.com/image/175252/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20CLI%20%EB%AA%85%EB%A0%B9%20%EC%82%AC%EC%9A%A9%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
이 코드가 있고 일반 CLI에서 작동하지만 파일에 어떻게 적용합니까?
sort <filename> | uniq | cut -f 1 -d "," | uniq -c |sed -e "s/^[ \t]*//"
항상 명령을 찾을 수 없음과 같은 메시지가 표시됩니다.
편집: 내 명령은 CLI에서 작동하지만 이를 bash 스크립트에 적용하고 싶습니다. 이제 내 질문은 이 명령을 스크립트에 파일 이름이 $1로 적용한 다음 파일처럼 한 줄씩 읽을 수 있는 다른 변수에 출력을 저장하는 방법입니다.
그래서 이 bash 코드와 "./script.sh filename.txt"를 사용해 보았습니다.
#!/bin/bash
lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'
실행할 때 다음 오류가 표시됩니다.
./filename.txt: line 1: YKL112W,YKL112W: command not found
답변1
문제는 스크립트에 구문 오류가 있다는 것입니다. 선
lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'
방법:
sort
변수에 문자열 할당lines
$1
그런 다음 출력을 각각uniq
,cut
및 로 파이프하면서 변수에 저장된 명령이 실행됩니다 .uniq
sed
스크립트에 제공한 인수 에는 $1
파일 이름이 포함되어 있으므로 쉘은 파일이 텍스트 파일임에도 불구하고 파일을 실행하려고 시도하므로(즉, 스크립트인 것처럼) 오류 메시지가 나타납니다.
명령의 결과를 변수에 할당하려면 line
아래와 같이 "명령 대체"를 수행해야 합니다.
lines="$(sort "$1" | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//')"
나는 또한 사용하는 것이 좋습니다주택 검사셸 스크립트 관련 문제를 식별합니다.