Распаковка файла с восклицательным знаком из командной строки в сценарии bash

[119410] Вы должны избежать знака доллара в команде [119843]awk[119844]:

И вы не должны использовать [119845]-F' '[119846], [119847]awk[119848] использовать пробелы как отдельное поле по умолчанию.[119413].

1
02.11.2015, 23:17
2 ответа

В общем, вам не нужно экранировать и цитировать что-либо. Безопасный способ написать так:

FILE="/usr/local/var/www/htdocs/${FILENAME}!3.zip"
UNZIPPEDFOLDER="$("$UNZIP" "$FILE" | "$GREP" -m1 'creating:' | "$CUT" -d' ' -f5-)"
echo "$UNZIPPEDFOLDER"
1
27.01.2020, 23:27

Передача пароля sudo в сценарии совершенно бессмысленна. Вместо этого добавьте правило sudo , добавляющее определенную команду, которую необходимо выполнить с помощью NOPASSWD тэгов . Следите за тем, чтобы правило NOPASSWD , специфичное для команды, следовало за любым общим правилом.

saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start

Но это, вероятно, все равно не полезно. lightdm start запускает запрос на вход в систему, но это необходимо только в том случае, если вы хотите разрешить другим пользователям входить в систему графически. Вам это не нужно, если вы хотите только начать сеанс GUI. Вместо этого вызовите startx для запуска сеанса GUI из сеанса текстового режима. Это не требует каких-либо дополнительных привилегий.

Возможно, потребуется явно указать диспетчер окон или среду рабочего стола, поскольку startx может не выбрать тот же тип сеанса по умолчанию, что и lightdm.

startx -- gnome-session
-121--57339-

В общем случае не нужно ничего упускать и цитировать . Безопасный способ записи:

FILE="/usr/local/var/www/htdocs/${FILENAME}!3.zip"
UNZIPPEDFOLDER="$("$UNZIP" "$FILE" | "$GREP" -m1 'creating:' | "$CUT" -d' ' -f5-)"
echo "$UNZIPPEDFOLDER"
-121--166122-

! - это символ расширения журнала команд, поэтому его необходимо цитировать в командной строке, когда расширение журнала включено. Его не нужно цитировать внутри сценария.

На главной странице:

При использовании средств расширения истории команд (см. ниже HISTORY EXPANSION) символ расширения истории, обычно!, должен быть процитирован для предотвращения расширения истории.

и

Неинтерактивные оболочки не выполняют расширение истории по умолчанию.

для получения более подробной информации см. man bash , поиск QUOTING и HISTORY EXPANSION .

2
27.01.2020, 23:27

Теги

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