Оболочка Bourne: запаздывание '-' оператор в замене параметра

Вам нужно загрузить и переустановить пакет linux-заголовков-3.5.0-54. Проблема здесь в том, что пакет доступен только в точном виде, на который ваши исходные тексты больше не ссылаются. Для этого я бы порекомендовал загрузить пакет вручную вместо того, чтобы добавлять точное хранилище и переустанавливать пакет с помощью dpkg, чтобы затем продолжить удаление и продолжить обновление:

wget http://security.ubuntu.com/ubuntu/pool/main/l/linux-lts-quantal/linux-headers-3.5.0-54_3.5.0-54.81~precise1_all.deb
sudo dpkg -i linux-headers-3.5.0-54_3.5.0-54.81~precise1_all.deb
sudo apt-get purge linux-headers-3.5.0-54
sudo do-release-upgrade

Для всех остальных случаев должно быть достаточно просто:

sudo apt-get --reinstall install package-name

.

1
21.08.2018, 05:53
3 ответа

Содержит ли сценарий команду set -u ? Это означает, что

Считать неустановленные переменные и параметры , кроме специальных параметров "@" и "*" , ошибкой при выполнении раскрытия параметров. Если выполняется попытка раскрытия неустановленной переменной или параметра, оболочка печатает сообщение об ошибке и, если не интерактивно, завершает работу с ненулевым статусом.

Другими словами, если $ BAR_EXT не установлен, что-то вроде

BAR_FILE="$BAR_FILE$BAR_EXT"

завершится ошибкой. Команда

BAR_EXT=${BAR_EXT-}

явно установит $ BAR_EXT в пустую строку , если она вообще не определена, тем самым избегая такой ошибки.

2
27.01.2020, 23:50

$ {Переменная -} расширяется до значения переменной , если он установлен, и в пустую строку в противном случае. Обычно это то, что прямое $ переменная . Однако, когда параметр установлено -u ( Набор -o nounset ) на $ ПЕРЕМЕННОГО вызывает ошибку, когда переменная не установлена, тогда как $ {Переменная -} все еще создает пустую строку. Так $ {VARIABLE -} означает «Я собирался это приводит к пустой строке, даже если переменная не установлена», в то время как $ VARIABLE может означать, что или может означать: «Я предназначено Переменная для установки ".

1
27.01.2020, 23:50

С помощью awk :

awk '{if($0=="click"){getline n;printf "%s(%s)\n", $0, n}else{print}}' file

Если строка соответствует щелкните , загрузите следующую строку в переменную с именем n , а затем распечатайте требуемый формат вывода.

Edit:

Если существует переменное количество нескольких строк и требуется объединить их до тех пор, пока не появится пустая строка, используйте следующую команду:

awk '{if($0=="click"){getline n; printf "%s(%s", $0, n;
  while($0!=""){printf ",%s", $0; getline};
  printf ")\n\n", x}else{print}}' file

Она печатает строки, разделенные запятыми, пока не найдет пустую строку.

-121--133211-

У меня был тот же вопрос, что и у вас, но для обычного пользователя. Допустим, я хочу запустить firefox с помощью учетной записи пользователя foo. Я вошел в систему как бар:

[bar@localhost ~]$ sudo -u foo -H firefox

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

Моим решением было просто добавить пользователя foo в список авторизованного доступа к серверу X.

xhost si:localuser:foo

И тогда я смог запустить Firefox (и другое приложение X) с помощью sudo и пользователя foo.

Фон : В окне X имеется архитектура клиент/сервер. При запуске приложения запрашивается разрешение X-сервера на его отображение. По умолчанию, как только вы открываете сеанс (вы графически входите в систему), вам (вашему пользователю), очевидно, разрешено общаться с сервером и отображать приложения. Другие пользователи не имеют этого разрешения, если его не указать. xhost - это средство для управления списком разрешений. si указывает на то, что правило является серверным, и уполномочивает локального пользователя foo отображать приложения. X Window является очень мощным в этом отношении, и вы можете отображать удаленные приложения локально, играя с переменной среды ДИСПЛЕЕВ и xhost (но не ограничиваясь ими). В более старые времена, когда люди набирали xhost + и неявно позволяли всем использовать свою X-сессию, можно было отображать приложение на своем экране для приколов; -) не столько сейчас, сколько люди все меньше используют X Window клиент/серверную архитектуру (по крайней мере для того, что я наблюдаю за последние 10 лет).

PS: Я сделал это, чтобы запустить Firefox в своего рода «тюрьме» (чтобы избежать уязвимости, как для pdf.js в будущем). Но я быстро выяснил, что вызов Firefox через sudo не позволит ему получить доступ ни к аудио, ни к видеоаппаратуре. Но есть один парень, который ясно объясняет , как активировать аппаратное ускорение видео и аудио при вызове Firefox через sudo . YMMV с этими инструкциями, например, мне все еще отказано в разрешении на аудио, но видео нормально (протестировано на Fedora 22 с SELinux ON).

-121--11008-

Проверьте справочную страницу для последней оболочки Борна:

http://schillix.sourceforge.net/man/man1/bosh.1.html

и найдите раздел «Подстановка параметров», который в настоящее время находится на странице 8. Две страницы вниз, есть таблица, которая объясняет все возможные расширения.

Оболочка Борна поддерживает в подстановке параметров не только '-'.

-2
27.01.2020, 23:50

Теги

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