EMACS молча не запускается под Cygwin

Еще одно заслуживающее внимания качество «$ *» и «$ @» заключается в том, что они представляют массив оболочки - текущий набор аргументов оболочки. Их можно изменить с помощью встроенного набора set , но в целом они являются рабочим массивом по умолчанию для любых встроенных функций массива - включая массив для .

: "${2?no file arguments!}"
for x 
do     if    [ "${2+:}" ]
       then  set ".$1"
       else  [ ".${x##*.}" != "$1" ] &&
             [ -f "$x" ] &&
             mv -- "$x" "${x%.*}$1"
       fi
done

Это довольно близкое приближение к тому, что делает ваш скрипт. Он немного отличается тем, что не выполняет echo для аргумента, который не является обычным файлом. Я не уверен, что вы делаете то, о чем думаете: вы проверяете, является ли ваш аргумент существующим, доступным, обычным файлом , но вы эхо передает сообщение на стандартный вывод, в котором указано аргумент: такого файла нет . В unix-подобной системе все является файлом: канал - это файл, каталог - это файл, устройство - это файл. Итак, ваш тест и ваше сообщение не совпадают.Более того, если вы попросите mv переместить несуществующий файл, он напечатает ваше сообщение для вас и в stderr - и все это само по себе.

Еще я заметил, что вы проверяете, совпадает ли ваше новое имя со старым, и я предполагаю, что это сделано для того, чтобы mv не жаловались на перемещение файла поверх самого себя. Оказывается, mv имеет параметр для этого.

Я бы поступил так:

: "${2?no file arguments!}"
for x 
do     [ "${2+:}" ] &&
       set -- ".$1" && continue
       set -- "${x%.*}$1" "$1"
{      [  -e "$1" ] && printf "%s: exists!\n" "$1"; } ||
{    ! [  -f "$x" ] && printf "%s: not a regular file.\n" "$x"; } ||
       mv -f --    "$x" "$1"
       shift
done   >&2
1
21.08.2018, 09:52
1 ответ

Я полагаю, что проблема описана здесь.

http://cygwin.1069669.n5.nabble.com/Corrupt-Cygwin64-install-td130085.html

TL;DR -Проблема в антивирусе Trend.

1
27.01.2020, 23:42

Теги

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