카테고리 없음
[리눅스] 입력 리디렉션 (<)을 통해 Bash 셸 스크립트에 매개 변수 전달
행복을전해요
2021. 1. 19. 19:10
다음과 같이 디렉토리 <
를 나열 하여 전달 된 파일의 이름을 추출 할 수 있습니다 /proc/<pid>/fd
.
ls -ltr /proc/$$/fd
그때
$ cat myscript.sh
ls -ltr /proc/$$/fd
$ ./myscript.sh < hello
total 0
lr-x------ 1 u g 64 Feb 25 08:42 255 -> /tmp/myscript.sh
lrwx------ 1 u g 64 Feb 25 08:42 2 -> /dev/pts/0
lrwx------ 1 u g 64 Feb 25 08:42 1 -> /dev/pts/0
lr-x------ 1 u g 64 Feb 25 08:42 0 -> /tmp/hello
이것이 유용한 지 추측 할 수 없습니다.
입력이 파이프를 통해 전달되면 작동하지 않습니다.
$ cat hello| ./myscript.sh
total 0
lr-x------ 1 u p 64 Feb 25 08:50 255 -> /tmp/myscript.sh
lrwx------ 1 u p 64 Feb 25 08:50 2 -> /dev/pts/0
lrwx------ 1 u p 64 Feb 25 08:50 1 -> /dev/pts/0
lr-x------ 1 u p 64 Feb 25 08:50 0 -> pipe:[82796]
또는 lsof 및 약간의 줄 처리를 사용하여 값을 추출 할 수 있습니다.
filename=$(/usr/sbin/lsof -p $$| grep " 0u"| cut -c 60-)
-------------------filename
의 경우에는 액세스 할 수 없으며 ./script < filename
해당 내용 만 액세스 할 수 있습니다 . 그 이유는 셸이 열리고 filename
해당 파일 설명자가 ./script
.
두 번째 솔루션을 사용하면 파일 이름에 액세스하지 않지만 스크립트의 표준 입력은 파일에서 제공됩니다.
첫 번째 솔루션 인쇄에서 파일은 다음과 같습니다.
cat "$1"
두 번째 :
while read line; do echo "$line"; done
출처
https://stackoverflow.com/questions/22008805