나는 그것을 할 수 있다는 것을 알고 있습니다
tr a b < file
. 그러나 어떻게 해야 합니까ls
? 예를 들어ls -l
"파일"에서 파일 목록을 제공하는 방법입니다 . 아래 방법을 시도했지만 성공하지 못했습니다.$ cat>test A B C $ ls -l < test
"<<" 또는 여기 문서의 목적이 명확하지 않습니다.
내 수업 연습 중 하나는 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
ls
표준 입력에서 읽지 않으므로 입력 리디렉션은 아무 작업도 수행하지 않습니다. 당신이 원하는 것은 명령 대체입니다.ls -l `cat list`
또는
ls -l $(cat list)
여기에 있는 문서는 별도의 파일이 아닌 스크립트에 제공된 고정 문자열로 표준 입력을 리디렉션하는 방법에 대한 것입니다. 명령줄에서도 이 작업을 수행할 수 있지만 이는 가치가 제한적이고 일반적이지 않습니다.
이것은 전혀 논리적이지 않습니다.
답변3
첫 번째 부분에 대한 답변:
while
루프를 사용하여 파일 내용을 "ls" 명령에 전달할 수 있습니다 .while read line ; do ls -l $line done < file
더러운 방법:
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