Как сохранить '>&2' в переменной

Была такая же проблема. Я добавил sudo вот так:

sudo systemctl unmask  -- -.mount

Но изменения не были видны мне, пока я не обновил systemctl:

sudo systemctl daemon-reload

Но все же изменения не были видны при запускеsystemctl unmask -- -.mount:

● -.mount - Root Mount
   Loaded: masked (Reason: Unit -.mount is masked.)
   Active: active (mounted) since Thu 2019-02-14 04:11:58 CST; 6 months 14 days ago
    Where: /
     What: /dev/mmcblk0p2
    Tasks: 0 (limit: 2077)
   Memory: 0B
   CGroup: /system.slice/-.mount

Мне пришлось перезагрузить систему, прежде чем systemctl unmask -- -.mountотобразил что-то другое:

● -.mount - /
   Loaded: loaded (/etc/fstab; generated)
   Active: active (mounted) since Thu 2019-02-14 04:11:58 CST; 6 months 14 days 
    Where: /
     What: /dev/mmcblk0p2
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)
1
28.10.2021, 07:13
1 ответ

Как они сказали в комментариях, на самом деле нет.

Ну, вы могли бы сделать это с помощью eval, но у вас будут проблемы с цитированием/экранированием всего еще в этой командной строке.

Есть кое-что, что вы можете сделать с функциями, :чтобы запустить заданную простую команду с перенаправлением; или просто написать сообщение в stderr:

#!/bin/bash
tostderr() {
        "$@" >&2
}

warn() {
        local IFS=" "
        printf "%s\n" "$*" >&2
}

tostderr printf "warning: %s\n" "something happened"

warn another thing to warn about

Акцент на простой команде в первой, это не evalи у вас не может быть синтаксиса оболочки внутри команды. Например. в tostderr foo | barон перенаправляет вывод толькоfoo(за канал на stderr ), а tostderr (foo | bar)не будет работать.


Если бы вы использовали zsh и очень хотели этого, вы могли бы использовать глобальный псевдоним для добавления перенаправления (, но некоторые могут подумать, что это граничит с запутанным кодированием):

#/usr/bin/zsh

alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR

1
28.10.2021, 12:30

Теги

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