파일에서 읽은 명령줄로 변수를 채우고 실행하고 싶습니다. 단일 명령이면 문제가 없습니다. |를 사용하면 작동하지 않습니다. 도움이 필요하세요? ? ? 감사해요
$ 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
을 실행 하고 셸 구성( )을 사용하여 두 명령에 연결하는 경우에도 마찬가지입니다. (그래서 제목은ls
tail
|
ㅏ변수 내부 명령귀하의 질문이 실제로 있기 때문에 올바르지 않습니다.많은 종류의내의 명령하나의바꾸다)
어쨌든 해결책은 쉘을 사용하여 명령을 구문 분석/실행하는 것입니다.
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