파일에서 읽은 명령줄로 변수를 채우고 실행하고 싶습니다. 단일 명령이면 문제가 없습니다. |를 사용하면 작동하지 않습니다. 도움이 되었나요? 감사합니다
$ 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