У меня есть две очень разные части этого ответа. Я начну с немного более технической части, а затем с личных размышлений (ладно, разглагольствований).
Оболочка bash
поставляется со скриптом cshtobash
, спрятанным в каталоге examples/misc
исходного дистрибутива.
Это не позволит взять csh
скрипт и преобразовать его в bash
, но это может быть полезно для кого-то в качестве первого шага в создании прототипа sh
-стиля ~/.profile
файла из уже существующего csh
-стиля ~/.login
файла.
Вход: Стандартный файл инициализации OpenBSD csh
.
# $OpenBSD: dot.login,v 1.6 2015/12/15 16:37:58 deraadt Exp $
#
# csh login file
if ( ! $?TERMCAP ) then
if ( $?XTERM_VERSION ) then
tset -IQ '-munknown:?vt220' $TERM
else
tset -Q '-munknown:?vt220' $TERM
endif
endif
stty newcrt crterase
set savehist=100
set ignoreeof
setenv EXINIT 'set ai sm noeb'
if (-x /usr/games/fortune) /usr/games/fortune
Выход: bash
- не совсем то же самое... но хоть что-то.
# csh aliases
# csh environment variables
export USER='me'
export HOME='/home/me'
export PATH='/usr/bin:/bin:/usr/ucb:.'
export TERM='rxvt'
export SHELL='/bin/bash'
export EXINIT='set ai sm noeb'
# csh variables
set -o ignoreeof # ignoreeof
PS1='% '
prompt2='? '
HISTFILESIZE='100'
# special csh variables converted to bash equivalents
Да, программирование на C-shell "считается вредным". Это не значит, что вы не можете писать сценарии оболочки C-shell, которые не вредны или не надежны. Это также не означает, что каждый скрипт C-shell должен быть преобразован в bash
. И это определенно не означает, что такое преобразование должно выполняться автоматическим инструментом! Это просто означает, что это неудобный язык, который имеет некоторые действительно странные причуды, особенно если вы больше привыкли к sh
.
Как и в случае с любыми двумя языками программирования, когда один выходит из моды в пользу другого, это не означает, что существующие программы должны быть переписаны. Это также не означает, что знатоки вышедшего из моды языка должны перестать на нем говорить. Это просто означает, что это может быть не тот язык, который стоит брать, если вы ищете современный язык для написания сценариев оболочки.
С другой стороны, если перед вами стоит задача расширить или как-то иначе модифицировать csh
скрипт, тогда может быть причина
... особенно если вы не сильны в csh
программировании.
Что касается автоматического перевода: Зачем?
Если скрипт работает и у вас в системе есть интерпретатор для него, нет необходимости переводить код. Автоматический перевод кода вряд ли создаст "лучший" код, и очень вероятно, что он не создаст сопровождаемый код, и в любом случае вам придется потратить время на проверку того, что переведенный скрипт ведет себя так же, как и оригинальный.
Да, потому что, если вы записываете напрямую с аппаратного устройства, вы можете записывать только те форматы, количество каналов, битрейт и т. д., которые напрямую поддерживаются аппаратным обеспечением. Итак, когда вы делаете что-то вроде
arecord -D hw:0,0 out.wav
, вы столкнетесь с этой проблемой; вам нужно либо добавить правильные параметры, как в
arecord -D hw:0,0 -c 1 -f S16_BE -f44100 out.wav
(конечно, с параметрами для вашего устройства, а не эти), либо вы можете использовать плагин преобразования, который ALSA автоматически делает доступным для каждого устройства, как в
arecord -D plughw:0,0 ... out.wav
и затем он будет преобразован в любой формат, который вы укажете.
То же самое относится к любому другому приложению, которое пытается записывать через ALSA. Вы также можете настроить свой собственный ~/.asoundrc
с разумными значениями по умолчанию, если хотите.
Используйте arecord -L
, чтобы получить список устройств/плагинов, с которых вы можете записывать.Возможно, вы захотите использовать автоматически предоставляемый плагин dsnoop
, но вы не сказали нам, для чего вам нужна запись и что именно вы делали, когда пытались записать.
Правка:
Хорошо, недостающая информация:
Вы используете программу под названием Mathworks. В этой программе есть блок аудиозахвата, в котором есть параметр Имя устройства. Параметр по умолчанию равен
hw:1,0
.
Пока для этого параметра установлено любое значение hw:...
, вы можете записывать всякое в ваш ~/.asoundrc
до посинения, и это ничего не изменит, потому что hw:...
означает "использовать оборудование напрямую, не говоря уже обо всех других плагинах, указанных в ~/.asoundrc
".
Первым шагом является определение правильного устройства: выполните arecord -l
, и вы увидите что-то вроде
card X: NAME_OF_CARD, device Y: NAME_OF_DEVICE
...
Теперь измените значение вышеуказанного параметра на plughw:X, Y
, например plughw:1,0
, удалите файл ~/.asoundrc
, чтобы удалить возможный дополнительный источник ошибок, и повторите попытку. plughw:...
поместит plug
плагин непосредственно перед данным аппаратным устройством в качестве ведомого.
Если он по-прежнему не работает, есть две возможные причины, и сообщение об ошибке, которое вы получите, подскажет, что это может быть:
(1) Блок Mathworks написан таким образом, что он работает только напрямую с аппаратными устройствами, а не с плагинами, и у него нет возможности изменить количество каналов (может быть, есть лишний параметр, о котором забыли упомянуть в документации). В этом случае вы мало что можете сделать. Вы можете попробовать использовать dsp.audiofilereader на именованном канале с arecord
на другом конце, но я не уверен, насколько хорошо это сработает, и это временная мера.
(2) Плагин plughw
должен автоматически преобразовывать каналы IIRC, но, возможно, это не так. Тогда вам придется явно прописать плагин в вашем ~/.asoundrc
, но давайте сделаем это только в случае необходимости.