"<", "<<" 및 파일 읽기 정보 [닫기]

"<", "<<" 및 파일 읽기 정보 [닫기]
  1. 나는 그것을 할 수 있다는 것을 알고 있습니다 tr a b < file. 그러나 어떻게 해야 합니까 ls? 예를 들어 ls -l"파일"에서 파일 목록을 제공하는 방법입니다 . 아래 방법을 시도했지만 성공하지 못했습니다.

    $ cat>test
    A
    B
    C
    $ ls -l < test
    
  2. "<<" 또는 여기 문서의 목적이 명확하지 않습니다.

  3. 내 수업 연습 중 하나는 vi를 사용하여 ":"가 포함된 라인 1과 "6/3"이 포함된 라인 2가 있는 파일을 만드는 것입니다. 라인 1을 구분 기호로 사용하고 라인 2를 필드로 사용하여 파일에서 열 2를 잘라서 표시합니다.

이 두 줄을 반복해서 읽어서 변수로 읽어야 합니까? 나는 그것을 사용합니까 sed -n '#p' (file)? 우아한 1라인 솔루션이 있나요?

답변1

간단한 방법은 다음과 같습니다.

ls -ld -- $(< file )

(가정 ksh또는 호환 가능한 쉘)

하지만 파일 이름에 공백이나 와일드카드가 포함되는 등 몇 가지 문제가 있습니다. 따라서 다른 방법을 사용하는 것이 좋습니다.

xargs -rd '\n' ls -ld -- < file

xargs(이것은 -r이들 및 옵션의 GNU 구현을 가정합니다 -d).

답변2

  1. ls표준 입력에서 읽지 않으므로 입력 리디렉션은 아무 작업도 수행하지 않습니다. 당신이 원하는 것은 명령 대체입니다.

    ls -l `cat list`
    

    또는

    ls -l $(cat list)
    
  2. 여기에 있는 문서는 별도의 파일이 아닌 스크립트에 제공된 고정 문자열로 표준 입력을 리디렉션하는 방법에 대한 것입니다. 명령줄에서도 이 작업을 수행할 수 있지만 이는 가치가 제한적이고 일반적이지 않습니다.

  3. 이것은 전혀 논리적이지 않습니다.

답변3

첫 번째 부분에 대한 답변:

  1. while루프를 사용하여 파일 내용을 "ls" 명령에 전달할 수 있습니다 .

    while read line ; do
    ls -l $line 
    done < file
    
  2. 더러운 방법:

    counter=1
    while read line ; do
        if [ $counter -eq 1 ] ; then 
            delimiter=$line
            counter=$((counter+1))
        elif [ $counter -eq 2 ] ; then
            field=$line
            counter=$((counter+1))
        else
            echo File ended.
        fi
    done < inputfile
    

관련 정보