Моя собственная версия вашего сценария, вероятно, выглядела бы так:
set -- *.java
test -e "$1" && {
fortyequals=$(printf '%040d\n' | tr 0 \=)
for javaFile do
printf '%s\nIn file: %s\n%s\n' \
$fortyequals "$javaFile" $fortyequals
grep -E '^[^/]{2}.*(ftp|http)' "$javaFile"
done
} >>~/Desktop/externalservers.txt
Уже предложенное решение излишне специфично для оболочки. Вы могли бы достичь того же эффекта с помощью переносимого синтаксиса - который позволяет меньше запоминать в долгосрочной перспективе с дополнительным преимуществом в виде большей надежности, например:
set -- *.java
test -e "$1" &&
for javaFile do
# ...iterate on $javaFile here...
done
Другим преимуществом является то, что вы не только сохраняете последнее значение $javaFile
после цикла, вы также сохраняете все значения, которые $javaFile
когда-либо имели в $@
. Это делает возможным следующее:
...
done
echo "The previous for loop processed $# files."
echo "The first file processed was:"
printf "///\t'%s'\t///\n" "$1"
echo "The last file processed was:"
printf "///\t'%s'\t///\n" "$javaFile"
echo 'All files processed in the for loop were:'
printf "///\t'%s'\t///\n" "$@"
И если вам действительно нравятся {
curlies }
, вы можете использовать их - даже в bash
(хотя они и не нужны) - но вы должны разграничить два shell зарезервированных слова }
и done
, например:
for ... do {
...
} ; done
Хотя я рекомендую заключить весь блок - вокруг цикла for
и любой последующей обработки - в завитки, зависящие от &&
зарезервированных слов, например:
set -- *.java
test -e "$1" && {
for ... done
# ...further processing on $@...
}
Оглядываясь назад, я думаю, что могу помочь и с regex. .. Похоже, что мы ищем строки, содержащие слова http и/или ftp, которые не начинаются с двух //.
Я думаю, что остальное - результат отдельных операций grep
, которые вы выполняете. Похоже, что вы пытаетесь очистить пустые строки, но, как я представляю, они возникают в первую очередь из-за повторяющихся добавленных записей в файл.
Итак, вместо этого мы могли бы просто записывать for
вывод цикла непосредственно в outfile, чтобы сохранить дескриптор записи для ~/Desktop/externalservers.txt
до завершения цикла, что позволит избежать записи пустых строк. Может быть так:
for ... done >>outfile
Или
{ grouped ; command ; list ; } >>outfile
По крайней мере, я могу сказать, что это утверждение, вероятно, не делает того, что вы хотите:
sed 's/^\n//' $file
sed
является \n
ewline delimited - невозможно встретить \n
ewline как ^
первый символ в строке. Вы можете получить \n
ewlines в пространство шаблонов sed
различными способами, но никогда без некоторой обработки.
Ваш тачпад не определяется. В худшем случае вам, возможно, придется подключить внешнюю мышь для устранения неполадок или до тех пор, пока отсутствующий драйвер не будет разработан и включен в используемый вами дистрибутив.
Судя по комментариям, ваша аппаратная модель — Acer Nitro 5 AN515 -52. Погуглив, я нашел это обсуждение на форуме поддержки Acer. В этом случае в настройках BIOS есть параметр для сенсорной панели, который можно установить на Basic
или Advanced
-. Если в вашей системе используется то же самое, попробуйте оба варианта.
Кроме того, кажется, что система, обсуждаемая на форуме Acer, имеет сенсорную панель на базе I2C -. По сравнению с PS/2 или USB, это довольно новый интерфейс для HID-устройств -, спецификация которого была завершена в 2012 году. В Linux это должно поддерживаться модулем i2c-hid
и, возможно, соответствующим модулем драйвера шины i2c.. Модуль i2c-hid
для Linux был первоначально разработан в конце 2012 года, и похоже, что он был добавлен в основную кодовую базу ядра где-то в версии ядра 3.8.
До того, как спецификация I2C HID стала широко использоваться,модули, относящиеся к I2C -, могут рассматриваться как -необязательные в Linux, и, вероятно, поэтому программа установки до сих пор не загружает их автоматически -, но если вы можете выполнить установку с помощью внешней мыши, система может автоматически загружать необходимые модули для поддержки сенсорной панели I2C при загрузке полностью установленной операционной системы Linux.