폴더 경로에서 $1을 사용하는 방법

폴더 경로에서 $1을 사용하는 방법

저는 Linux 스크립팅을 처음 접했기 때문에 누군가가 이 질문을 한다면 사과드립니다(게시하기 전에 꽤 많은 검색을 했습니다).

특정 문자 조합이 백업 파일에 나타나는지 확인하는 간단한 스크립트를 만들고 있습니다. 이러한 파일의 경로는 장치에 따라 다르며 파일이 많기 때문에 텍스트 파일에서 확인해야 하는 파일 목록이 있습니다.

내가 하고 싶은 일은 cat파일을 만들고 해당 장치 폴더의 경로에 장치 이름을 삽입한 다음 최신 백업 파일을 확인하는 것입니다. 예를 들어

cat devicelist.txt  | grep A[BCD] /folder1/folder2/$1/latest

이로 인해 오류가 발생합니다./latest: No such file or directory

그럼 내가 뭘 잘못하고 있는 걸까요?

답변1

귀하의 요구 사항을 올바르게 이해했다면 예를 들어 xargs다음을 사용할 수 있습니다.

cat devicelist.txt | xargs -d'\n' -I{} echo grep 'A[BCD]' "/folder1/folder2/{}/latest"

또는 (파일을 직접 읽으십시오)

xargs -a devicelist.txt -d'\n' -I{} echo grep 'A[BCD]' "/folder1/folder2/{}/latest"

echo원하는 대로 작동한다고 확신되면 제거하세요.

man xargs자세한 내용과 플랫폼에 사용 가능한 옵션의 전체 목록은 리소스를 참조하세요 .

답변2

$1은 스크립트에 전달된 매개변수(첫 번째 매개변수)를 나타냅니다.

그래서 당신은 사용할 수 있습니다

#!/bin/bash
grep A[BCD] /folder1/folder2/"$1"/latest

쓸모 없을 때는 grep을 사용하지 마세요. :) "$1"을 사용하면 변수 내용을 보존할 수 있습니다.

-bash-4.4$ mkdir test
-bash-4.4$ mkdir -p test/folder/a/latest
-bash-4.4$ cat > t.sh
#!/bin/sh
grep A[BCD] test/folder/"$1"/latest/toto
-bash-4.4$ chmod u+x t.sh
-bash-4.4$ echo ABCD > test/folder/a/latest/toto
-bash-4.4$ ./t.sh b
grep: test/folder/b/latest/toto: No such file or directory
-bash-4.4$ ./t.sh a
ABCD
-bash-4.4$ rm t.sh
-bash-4.4$ rm -rf test
-bash-4.4$ 

폴더 경로를 찾을 수 없을 때 grep 오류 메시지를 방지하려면 존재하지 않는 $1 값을 스크립트에 남겨 둘 수도 있습니다.

답변3

당신은 그것을 사용할 수 있습니다

grep 'A[BCD]' "/folder1/folder2/$1/latest" <devicelist.txt

매개변수를 사용하여 호출하는 스크립트에서.

셸에서 동일한 동작을 시뮬레이션하려면 먼저 다음을 수행해야 합니다.

set -- foo

그러다가 .$1foo

관련 정보