Сценарий для выбора редактора для открытия файла на основе аргумента

В пользовательской установке по умолчанию, существует только ssh как серверное приложение, установленное, через который можно просто удалить aptitude remove openssh-server или через любой другой диспетчер пакетов Вы используете.

Ограничение доступа к сети для приложений является трудным. {{ РЕДАКТИРОВАНИЕ: Однако существует теперь Цветок Leopard, разработанный, который кажется, обеспечивает функции, в которых Вы нуждаетесь (брандмауэр для каждого процесса, интерактивный пользовательский интерфейс). }} Посмотрите брандмауэр Для каждого процесса? для получения дополнительной информации о теме. Без использования усложняют решения, можно только ограничить доступ к сети к специальным пользователям через iptables owner модуль.

Как обычный пользователь Вам не нужен никто harden-* пакеты. Они или конфликтуют на небезопасных пакетах, которые Вы, вероятно, не установили так или иначе или устанавливаете пакеты защиты, которые являются для нормальных систем, также сложных, чтобы настроить и поддержать - как сетевые системы проникновения.

2
11.01.2013, 21:13
2 ответа
  1. Вы должны расположить с интервалами после if [ потому что [ на самом деле команда (как test) который читает, это - аргументы (это может быть интерпретировано оболочкой, но это может быть не). Используя [[ удостоверяется, что внутренняя логика оболочки используется (быстрее, так как никакой новый процесс не запускается). Хотя оболочки могут интерпретировать [ и test как builtins, эта функция может быть выключена с enable (и затем новый процесс действительно запускается).

  2. = оператор сравнения в условных выражениях (и внешний и встроенный) однако, это - также оператор присваивания в другом месте. В то время как test и = соответствуйте POSIX, с помощью == (распознанный в [[) кажется, разумный выбор каждый раз, когда каждый не стремится к соответствию POSIX, так как оно приносит немного больше исправности к несоответствию оболочки контекстно-зависимого значения =.

  3. exit 1 - почему эффективно отбрасывают возвращаемое значение редактора? Или пропустите его полностью или использование exec заменять сценарий редактором.


#!/bin/bash
editor=$1
if [[ "$1" == "g" ]]; then
    exec geany "$file.tex"
else
    linha=$(wc -l < "$file.tex")
    exec texstudio --line $linha  "$file.tex"
fi
3
27.01.2020, 21:57
  • 1
    Большой. Я не знаю, почему, так как я являюсь новым на этом, но я заменил /bin/sh /bin/bash как Вы записали, и Ваш код теперь работает.Спасибо. –  Sigur 11.01.2013, 21:52
  • 2
    На самом деле. [ действительно берет =; нет такой вещи как ре присвоения [. ответ права –  Ignacio Vazquez-Abrams 11.01.2013, 21:54
  • 3
    I downvoted, потому что 1. ложь, и == даже не определяется POSIX. –  jordanm 11.01.2013, 22:47
  • 4
    @sigur - что код не будет работать в dash. Это использует функции неPOSIX ([[), таким образом, /bin/sh не является правильным. –  jordanm 11.01.2013, 22:48
  • 5
    @jordanm, извините но у меня нет комментариев Вам, так как я ничего не знаю об этом. Но так или иначе, я следую за большим обсуждением здесь. –  Sigur 11.01.2013, 23:18
if ["$1" = "g"]; then

Вам нужны пробелы внутри [ и ], поскольку они анализируются как обычные команды. Действительно, [ обычная команда (который является встроенным в большинстве оболочек).

exit 1

Почему Вы выходите с ошибочным состоянием после выполнения редактора? Статус возврата 0 успехов средств, что-либо еще означает отказ. Необходимо заставить сценарий возвратить то же состояние как редактор. Как записано, можно кончить exit в целом: когда оболочка достигает конца сценария, это завершает выполнение сценария и возвращает состояние последней команды, которая выполнялась.

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

A case конструкция была бы более ясна выразить, что Вы основываете свое условное выражение на значении конкретной переменной.

#!/bin/sh
editor=$1 file=$2
case "$editor" in
  g) exec geany "$file".tex;;
  *)
    linha=$(wc -l < "$file".tex)
    exec texstudio --line "$linha" "$file.tex";;
esac
2
27.01.2020, 21:57
  • 1
    Когда я называю сценарий, он работает, то есть, редактор открывает файл. Но терминал заблокирован к другим командам. Действительно ли возможно продолжить использовать тот же терминал, в то время как редактор открыт? –  Sigur 15.01.2013, 00:37
  • 2
    @Sigur Любое выполнение fastex g somefile &, или добавьте a & (и не помещать exec) на строке, которая запускает редактора, например. g) geany "$file.tex" & ;; –  Gilles 'SO- stop being evil' 15.01.2013, 00:41
  • 3
    Это необходимый двойные кавычки вокруг переменной $file который был определен file=fastex-temp.tex? –  Sigur 15.01.2013, 00:45
  • 4
    @Sigur, Если Вы знаете, что переменная не содержит пробельного символа или любого из \[?* (и Вы не изменились IFS) затем двойные кавычки не необходимы. Но можно ли едва знать, что заранее при записи сценария, итак, почему пропускают их? большое спасибо –  Gilles 'SO- stop being evil' 15.01.2013, 01:04

Теги

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