Принять аргумент файла и перейти в этот каталог?

Если вы все равно используете Pulseaudio, взгляните на модули Pulseaudio , в частности module-loopbackи module-null-sink. По моему опыту, snd-aloopнемного неудобно использовать, и, поскольку Pulseaudio в основном имеет дело с передачей звукового потока, в Pulseaudio это намного проще.

Таким образом, если вариант использования — «записывать выходные данные одного приложения в фоновом режиме, тем временем использовать громкоговорители для других вещей, время от времени прослушивать приложение», я бы создал нулевой приемник с соответствующим названием, подключил приложение к это сpavucontrol(это будет запомнено Pulseaudio ), запись из monitorисточника этого приемника (снова, это будет запомнено, при необходимости с параметрами командной строки для записывающего приложения, чтобы установить имя приложения для Pulseaudio ). Если вы хотите послушать, сделайте петлевое соединение от источника монитора до вашего приемника громкоговорителя. Или сделайте эту петлю постоянной и отключайте/включайте ее по мере необходимости.

Вы можете использовать pacmdили pactl, чтобы попробовать все это в командной строке. С помощью тех же команд вы также можете написать свои ярлыки. Сделайте его постоянным, используя сценарии запуска Pulseaudio.

Что-то вроде

pactl load-module module-null-sink sink_name=recsink
pactl load-module module-loopback source=recsink.monitor sink=your_loadspeaker_sink

Используйте pactl list short sinksдля просмотра имен ваших приемников. pactl helpи pacmd helpдля дополнительных команд.

1
16.08.2020, 21:44
4 ответа

Вы ищете?

cd "${dirname "$1"}"

Вы также можете использовать pushdвместо cdв зависимости от ваших потребностей.

0
18.03.2021, 23:12

Вы можете создать такую ​​функцию:

cd_to_file_location() {                          
    location=$(dirname -- "$1")
    cd -- "$location"
}

# test it out
$ mkdir /tmp/foodir
$ touch /tmp/foodir/a
$ cd_to_file_location /tmp/foodir/a 
$ pwd
/tmp/foodir
1
18.03.2021, 23:12

Вzsh:

cdparent() cd -- $1:h

Будет определена функция cdparent, которая изменяет текущий рабочий каталог на часть каталога(head )первого аргумента.

Вы также можете:

cd some/file(:h)

Здесь :hснова используется в квалификаторе glob для извлечения заголовка данного файла.

Модификатор :hпришел из csh 70-х годов, где его можно было применять для расширения параметров и подстановки истории. В zshэто может быть применено к тем плюс квалификаторам glob. В bashего можно применять только к подстановке истории. Некоторые из этих модификаторов (, включая :h), также доступны в vim, где вы можете выполнить :cd %:h, например, для перехода в каталог редактируемого в данный момент файла.

(приведенная выше формулировка parent может немного ввести в заблуждение, например, в случае cdparent.., который будет выполнять cd., а не cd../.., поскольку parent мог бы предложить ).

0
18.03.2021, 23:12

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

mycd()
{
    if [ ! $# -eq 1 ]
    then
        printf "Usage: mycd <PATH>\n" >&2
        return
    fi

    if [ ! -d "$1" ]
    then
        dest="$(dirname -- "$1")"
        set -- "$dest"
    fi

    cd -- "$1"
}

Он достаточно универсален, чтобы работать как с каталогами, так и с путями к файлам. и поскольку он использует реальный cd, вы всегда можете вернуться к предыдущему каталог сcd -:

$ mkdir /tmp/test-dir/
$ touch /tmp/test-dir/FILE
$ mycd /tmp/test-dir/FILE
$ pwd
/tmp/test-dir
$ mycd /tmp/
$ pwd
/tmp
$ cd -
/tmp/test-dir
$ pwd
/tmp/test-dir
0
18.03.2021, 23:12

Теги

Похожие вопросы