파이프( | )를 변수에 저장하는 방법은 무엇입니까?

파이프( | )를 변수에 저장하는 방법은 무엇입니까?

아이디어는 ... 명령에서 파이프로 사용하는 것입니다. 예를 들어, 계속해서 다시 입력해야 하는 일종의 긴 경로가 있고 파이프와 두 번째 프로그램이 있다고 가정합니다.

"directory1/directory2/direcotry3/file.dat | less -I "

해당 부분을 변수에 저장하여 다음과 같이 사용할 수 있도록 하고 싶습니다.

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>

대신 나는 얻는다

cat: invalid option -- I
Try `cat --help' for more information.

...이는 파이프가 분명히 작동하지 않는다는 것을 의미합니다.

답변1

bash는 변수를 확장한 후 명령줄을 완전히 재해석하지 않습니다. 이를 강제하려면 다음을 eval앞에 넣으십시오.

r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"

그럼에도 불구하고 이를 수행하는 더 우아한 방법(별칭, 함수 등)이 있습니다.

답변2

코드와 데이터를 혼합하려고 하는데 이는 좋은 생각이 아닙니다. 대신 파일(디렉토리?) 이름을 인수로 사용하는 함수를 정의하고 less.

view () {
    less -I -p "$2" $1
}

view directory1/directory2/directory3 <searchterm>

관련 정보