Как заставить x11vnc использовать Xfce?

Вы должны использовать "${@}"вместо ${@}(, как с echo "${@}"), но это не является причиной вашей проблемы.

Причина в том, что перенаправление происходит очень рано при синтаксическом анализе командной строки, до подстановки параметров. Таким образом, после того, как переменная поместила >в командную строку, оболочка больше не ищет >.

Важный момент, который я заметил после того, как опубликовал свой ответ :С позывным типа

run mysqldump blabla > dump.sql

функция runне видит >и dump.sql. Это, вероятно, не то, что вам нужно, потому что это не позволяет вам изменить все перенаправления с помощью одной переменной среды, поскольку вывод echo "${@}"также перенаправляется в файл. Таким образом, вы должны использовать что-то вроде run --redirect dump.sql mysqldump blabla, см. ниже.

Есть две возможности:

  1. Придерживайтесь "$@"и используйте eval. Конечно, это может привести вас к кошмару цитирования. Вы должны заключать в кавычки все, кроме >, чтобы оболочка увидела пустой >в командной строке, прежде чем удалить кавычки.

  2. Обработка перенаправления отдельно:

    run --redirect dump.sql mysqldump blabla
    
    run() {
        if [ "$1" == '--redirect' ]; then
            shift
            redirect_target="$1"
            shift
        else
            redirect_target='/dev/stdout' # works at least with Linux
        fi
    
        if [[ "$(printenv DRY_RUN)" = "yes" ]]
        then
            echo "${@}"
        else
            "${@}" > "$redirect_target"
        fi
    }
    

    Вы можете избежать redirect_target='/dev/stdout', если поместите if [ "$1" == '--redirect' ]в ветку elseif [[ "$(printenv DRY_RUN)" = "yes" ]].

        if [[ "$(printenv DRY_RUN)" = "yes" ]]
        then
            if [ "$1" == '--redirect' ]; then
                # do not output "--redirect file"
                shift
                shift
            fi
            echo "${@}"
        else
            if [ "$1" == '--redirect' ]; then
                shift
                redirect_target="$1"
                shift
                "${@}" > "$redirect_target"
            else
                "${@}"
            fi
        fi
    
2
17.01.2020, 03:38
1 ответ

Оказалось, что добавление флага -usepwпозволило мне получить доступ к рабочему столу Xfce.

2
27.01.2020, 22:07

Теги

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