Intereting Posts
Как оценить специальные символы, чтобы увидеть их в текстовом редакторе? Предварительная обработка текста. Как запустить сразу несколько скриптов Как я могу экспортировать свою цветовую колокольню? очистить команду в Konsole Динамически присваивать массив значению переменной. Eval? Почему невозможно подключиться к моему серверу с помощью RSA с устройства Ubuntu? Какую команду я должен выполнить после внесения изменений в файл / etc / passwd SELinux отключен, net.ipv4.tcp_syncookies и nfs кто, whoami, и «кто я», Проблемы с загрузкой с opensuse 15 и рабочей станцией vmware 14 Linux – как я могу воспроизвести звуковой файл через задний разъем через командную строку Использование Wi-Fi ноутбука через Ethernet для другого ПК Ошибка компиляции ядра Linux 2.6.38 Как создать ограниченную очередь для задач оболочки? Как я могу просто получить доступ к полезной нагрузке пакета и изменить его?

как начать с моего shell-скрипта xterm, который запускает mplayer и воспроизводит файлы, которые являются аргументом скрипта

Что я хочу сделать: Запустите мой скрипт со списком файлов в качестве аргументов. Из моего сценария я хочу запустить 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' 

Вопрос: Как запустить mplayer из собственного xterm с файлами, сохраненными в переменной $FILES ?

Если вы хотите передать аргументы вашему скрипту 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[@]}" 

Вышеуказанные файлы фильтруют только те, которые доступны для чтения. Это всего лишь пример, обычно вы не делали такого типа фильтрации. Кроме того, как правило, я бы использовал имя переменной в нижнем регистре, если только я не планировал его экспортировать.

PS: В зависимости от того, что вы делаете, знаете ли вы о режиме mplayer -slave ?