파이프 (|)를 변수에 저장하는 방법?


12

아이디어는 그것을 명령의 파이프로 사용하는 것입니다. 예를 들어, 몇 가지 긴 경로가 반복해서 다시 입력되고 파이프와 두 번째 프로그램이 뒤 따릅니다.

"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
할 수는 있지만 eval일반적으로 기능을 수행합니다.
frostschutz

답변:


21

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

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

그럼에도 불구하고이 작업을 수행하는보다 우아한 방법 (별칭, 기능 등)이 있습니다.


8

코드와 데이터를 혼합하려고 시도하는 것은 좋지 않습니다. 대신 파일 (디렉토리?) 이름을 인수로 사용하여로 표시하는 함수를 정의하십시오 less.

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

view directory1/directory2/directory3 <searchterm>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.