변수 내부 명령

변수 내부 명령

파일에서 읽은 명령줄로 변수를 채우고 실행하고 싶습니다. 단일 명령이면 문제가 없습니다. |를 사용하면 작동하지 않습니다. 도움이 필요하세요? ? ? 감사해요

$ f="ls -1"
$ $f
a
a0
a1
a2
a3
b1
cfg
cfile
dfile
e
fcorreo.txt
log
logs
work
$ f="ls -1 | tail -1"
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ f='ls -1 | tail -1'
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ echo $f
ls -1 | tail -1

답변1

문제는 파이프( |)가 두 개의 서로 다른 명령을 연결하는 셸에서 실행되는 "메타" 명령이라는 것입니다. 두 명령( 및 ) ls -1 | tail -1을 실행 하고 셸 구성( )을 사용하여 두 명령에 연결하는 경우에도 마찬가지입니다. (그래서 제목은lstail|변수 내부 명령귀하의 질문이 실제로 있기 때문에 올바르지 않습니다.많은 종류의내의 명령하나의바꾸다)

어쨌든 해결책은 쉘을 사용하여 명령을 구문 분석/실행하는 것입니다.

f="ls -1 | tail -1"
sh -c "${f}"

eval또는 새 셸 프로세스를 포크하지 않고도 작동하는 를 사용할 수 있습니다 .

f="ls -1 | tail -1"
eval "${f}"

답변2

다음 기능을 사용할 수 있습니다.

f() { ls -1 | tail -1; } 

예를 들어;

user@host $ f() { ls -1 | tail -1; }
user@host $ f
test.txt

관련 정보