카테고리 없음

[리눅스] 입력 리디렉션 (<)을 통해 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