Разница в области применения и синтаксически является очень тонкой:
$ ./updater
является эквивалентом
$ /bin/bash ./updater
, он запускает скрипт (если он помечен как исполняемый и на файловой системе, установленной на вариант
- Последняя форма работает, даже если одно из этих условий не выполнено). Это означает, что он порождает новый экземпляр оболочки и питает его содержание сценария. Таким образом, любые, определенные в нем псевдонимы, ограничены продолжительностью интерпретации оболочки, которая является только до конца скрипта.
$ . updater
$ . ./updater
$ source updater
$ source ./updater
означает все равно и сообщите току тока , чтобы выполнить содержимое этого файла, как если бы вы набрали его в командной строке. Это означает, что любые псевдонимы, функции, переменные среды, параметры опции оболочки и так далее будут доступны в оболочке после этого.
Также поэтому вы иногда видите файлы Shell init ( ~ / .bashrc
в случае bash), который выглядит так:
#!/bin/bash
for n in ~/etc/bash/*; do
. $n
done
где ~ / etc / bash
Может выглядеть как:
~/etc/bash/
|-- bash.10.env
|-- bash.20.aliases
`-- bash.30.func
(имена довольно явно объясняют). Всякий раз, когда вы добавляете некоторые файлы в каталог in in, все, что вам нужно сделать, чтобы применить изменения, - это . ~ / .bashrc
. Для чего вы можете иметь псевдоним, конечно. Это также может быть расширено - например, имеющие специализированные инициализацию в зависимости от имени хоста (или фазы луны с использованием POM
из BSG-Games).
Одно большое предупреждение для этих установок: обязательно сделайте файлы init «Re-Apperent» в том смысле, что не имеет значения, сколько раз вы их истощаете в одной оболочке - например переменные, которые вы можете захотеть сохранить Определяется условно:
VAR=${VAR:-"value"}
вместо безоговорочно:
VAR="value"
127.0.0.1
означает локальный интерфейс или адрес закольцовывания. Доступно только с локального хоста.
0,0,0,0
- это подстановочный адрес для каждого интерфейса.
В netstat -ntlp
Локальный адрес
означает «Печать активных прослушивающих TCP-соединений, отображение IP-адресов в виде числовых значений и отображение PID и имени программы, использующей это соединение».
. Если у меня есть
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1189/prog1
tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN 1188/prog2
, это означает:
Служба prog1
с PID 1189
прослушивает порт 53
с протоколом tcp
. Он доступен только с локального хоста.
Служба prog2
с PID 1189
прослушивает порт 6666
с протоколом tcp
. Доступ к этому порту разрешен с любого другого компьютера во всех сетях, частью которых является компьютер.
Есть много способов сделать это, конечно, но почему вы хотите? Это то, что файл fstab
является для .
Некоторые идеи:
монтирование
). Я нашел решение этой проблемы. В основном, я создаю новый принтер с настраиваемым бэкэндом, который позволяет мне манипулировать входящими данными, прежде чем отправлять их снова. Так что у меня есть один принтер, действующий как обертка, который получает данные, преобразует изображение, затем отправляет его на настоящий принтер.
Для этого существует пакет openSUSE RPM, который предоставляет внутренний узел трубы CUPS , который может использоваться с CentOS. Этот бэкэнд используется как канал командной строки.
Я загрузил указанный выше RPM и извлекл сценарий канала. Этот сценарий скопирован в /usr/lib/cups/backend/pipe
и выполнен.
Затем я написал небольшой сценарий, который возьмет переданную ему информацию печати, включая параметры принтера из URI принтера. Этот сценарий выполняет преобразование изображения (для этой задачи TIFF в PDF) при необходимости, а затем отправляет его на фактический принтер.
#!/bin/bash
FILE=${PIPE_BACKEND_ARGV6}
MIME_TYPE=$(file --mime-type "${FILE}" | awk '{print $2}')
if [[ $MIME_TYPE == *tiff ]]
then
tiff2pdf -o /tmp/printConv-$$.pdf "$FILE"
FILE=/tmp/printConv-$$.pdf
CONV=1
fi
lpr -P "$1" "${FILE}"
if [[ $CONV -eq 1 ]]
then
rm "${FILE}"
fi
Затем я устанавливаю «оберточный» принтер со следующим синтаксисом URI:
pipe:/path/to/cups-wrapper-script?actualPrinterName
Здесь используется внутренний узел канала. Он вызывает скрипт по адресу /path/to/cups-wrapper-script
с аргументом acturePrinterName
, который используется для указания скрипту, на какой принтер следует отправить задание.