mplayer를 시작하고 스크립트에 인수로 제공된 파일을 재생하는 쉘 스크립트 xterm에서 어떻게 시작할 수 있습니까?

mplayer를 시작하고 스크립트에 인수로 제공된 파일을 재생하는 쉘 스크립트 xterm에서 어떻게 시작할 수 있습니까?

내가 하고 싶은 일은 파일 목록을 인수로 사용하여 스크립트를 실행하는 것입니다. 내 스크립트에서 이 파일로 xterm과 mplayer를 시작하고 싶습니다.

나는 여러 가지를 시도했습니다.나는 다음과 같이 스크립트를 호출합니다.

myscript.sh *

이것파일 이름은 다음과 같습니다.

"aaa AAA"
"bbb BBB"
"ccc DDD"

(즉, 공백이 포함된 파일 이름) mplayer를 사용하여 재생할 수 있는 사운드, 음악 또는 비디오입니다.

이것이 내가 시도한 것입니다.

다음 명령을 모두 작성하세요.내 스크립트 안에!

나는 시도했다:

  1. 다음과 같은일하다. 파일이 인쇄됩니다.

    ls -l $@
    
  2. 다음과 같은일하다. 파일이 인쇄됩니다.

    IFS='\n'
    ls -l $*
    
  3. 다음과 같은일하다. 파일이 인쇄됩니다. 이상한 점은 IFS='\n'여기서는 필요하지 않다는 것입니다. 왜?

    xterm -e 'ls -l $*; read'
    
  4. 이것확실히파일을 찾았습니다.

    FILES=$@
    ls -l $FILES
    
  5. 이것확실히파일을 찾았습니다. 여기서 모든 파일 이름은 하나의 긴 파일 이름으로 처리됩니다. (???)

    IFS='\n'
    FILES=$@
    ls -l $FILES
    
  6. 이것확실히파일을 찾았습니다.

    export FILES=$@
    ls -l $FILES
    
  7. 그러나 다음일하다. 파일이 인쇄됩니다.

    IFS='\n'
    export FILES=$@
    ls -l $FILES
    

이제 mplayer를 사용해보세요.

  1. 이것일하다.

    IFS='\n'
    export FILES=$@
    mplayer $FILES
    
  2. 이것확실히일하다. 그런데 왜 2번이 ls -l효과가 있는 걸까요? 여기서 mplayer는 mplayer인수 없이 시작한 것처럼 도움말 인쇄를 종료합니다 .

    xterm -e 'mplayer $*; read'
    
  3. 이것확실히일하다. 파일 이름에 공백이 있는 모든 파일에 대해서는 실패합니다.

    IFS='\n'
    FILES=$@
    xterm -e 'mplayer $FILES; read'
    

질문:변수 에 저장된 파일을 사용하여 $FILES자체 xterm에서 mplayer를 시작하는 방법은 무엇입니까?

답변1

스크립트의 인수를 mplayer에 전달하려면 xterm에서 다음이 작동해야 합니다.

#!/bin/sh
xterm -e mplayer "$@"

"$@"이는 크기 조정이 작동하는 방식(항목당 하나의 매개변수) 으로 인해 작동합니다 . xterm하다아니요명령의 인수를 어떤 방식으로든 해석해 보세요.

실제로 파일 목록을 변수에 넣어야 하는 경우 가장 좋은 방법은 배열 변수를 사용하는 것입니다. 예를 들어:

#!/bin/bash
declare -a FILES
for f; do
    if [ -r "$f" ]; then
        FILES+=("$f")
    fi
done

xterm -e mplayer "${FILES[@]}"

위의 코드는 파일을 필터링하고 읽을 수 있는 파일만 전달합니다. 이는 단지 예일 뿐이며 일반적으로 이러한 유형의 필터링을 수행하지 않습니다. 또한 내보낼 계획이 없으면 일반적으로 변수 이름을 소문자로 사용합니다.

추신: 당신이 하고 있는 일을 토대로 볼 때, mplayer -slave모드를 이해하고 있습니까?

관련 정보