Пользовательское автоматическое заполнение: соглашение с пробелами в именах файлов

Проверьте это, Как я обнаруживаю спецификацию микросхемы Оперативной памяти из вопроса о машине Linux.

Этот инструмент мог бы помочь:

http://www.cyberciti.biz/faq/check-ram-speed-linux/

$ sudo dmidecode - тип 17 | больше

Демонстрационный вывод:

# dmidecode 2.9
SMBIOS 2.4 present.
Handle 0x0018, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0017
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: J6H1
        Bank Locator: CHAN A DIMM 0
        Type: DDR2
        Type Detail: Synchronous
        Speed: 800 MHz (1.2 ns)
        Manufacturer: 0x2CFFFFFFFFFFFFFF
        Serial Number: 0x00000000
        Asset Tag: Unknown
        Part Number: 0x5A494F4E203830302D3247422D413131382D
Handle 0x001A, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0017
        Error Information Handle: Not Provided
        Total Width: Unknown
        Data Width: Unknown
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: J6H2
        Bank Locator: CHAN A DIMM 1
        Type: DDR2
        Type Detail: None
        Speed: Unknown
        Manufacturer: NO DIMM
        Serial Number: NO DIMM
        Asset Tag: NO DIMM
        Part Number: NO DIMM

С другой стороны, и newegg.com и crucial.com среди других сайтов имеют советников/сканеры по вопросам установки дополнительной памяти, которых я регулярно использовал в соответствии с Windows. Некоторые из них были веб-в какой-то момент, таким образом, Вы могли попробовать это, или если Вы могли бы возможно загрузиться в Windows (даже если временно), он мог бы помочь.

Не уверенный, что результаты находились бы под Windows VM и к сожалению я в настоящее время запускаю Linux в VM в соответствии с Windows 7, так не может надежно протестировать на это сам.

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

8
13.04.2017, 15:36
3 ответа

Полагайте, что могло бы быть лучше использовать compgen вместо find в этом случае.

У Вас, вероятно, уже есть сценарий завершения с системой. Попробуйте, например.

locate bash_completion

На вариантах Debian это, вероятно:

/usr/share/bash-completion/bash_completion

где Вы находите, например. _filedir. Таким образом, самый простой путь затем был бы чем-то в направлении:

*)
    pushd "/some/path" >/dev/null
    _filedir
    popd >/dev/null

Если это не опция, это могло бы быть начинающим:

_comp_by_path()
{
    local opt cur dir
    local IFS=$'\n' x tmp
    local -a tokens

    opt="$1"
    cur="$2"
    dir="$3"

    # Enter target directory
    pushd "$dir" >/dev/null

    # Get directories, filtered against current
    [[ "$opt" != "-f" ]] && \
    x=$( compgen -d -- "$cur" ) &&
    while read -r tmp; do
        tokens+=( "$tmp" )
    done <<< "$x"

    # Get files, filtered against current
    [[ "$opt" != "-d" ]] && \
    x=$( compgen -f -- "$cur" ) &&
    while read -r tmp; do
        tokens+=( "$tmp" )
    done <<< "$x"

    # If anything found
    if [[ ${#tokens[@]} -ne 0 ]]; then
        # Make sure escaping is OK
        compopt -o filenames 2>/dev/null
        COMPREPLY+=( "${tokens[@]}" )
    fi

    # Go back
    popd >/dev/null
}

_GetOptMyCommand()
{
    local cur

    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"

    case "$cur" in
    -*)
        COMPREPLY=( $( compgen -W "-h -l --help --list --" -- "$cur" ) );;
    *)
        _comp_by_path "any" "$cur" "/some/path"
    esac
}

complete -F _GetOptMyCommand my_command

Различное использование find могло быть что-то в направлении этого:

_zaso()
{
    local dir="$1"

    pushd "$dir" >/dev/null
    find * -maxdepth 0 2>/dev/null
    popd >/dev/null
}

_comp_with_find()
{
    local cur dir      
    local IFS=$'\n'

    cur="$1"
    dir="$2"

    compopt -o filenames 2>/dev/null
    COMPREPLY=( $( compgen -W "$(_zaso "$dir")" -- "$cur" ) );
}

Также отметьте это printf в Bash имеет a %q опция. Таким образом для генерации заключенных в кавычки строк это - опция играть с:

find * -maxdepth 0 2>/dev/null && \
while read -r tmp; do
    printf "%q\n" "$tmp"
done <<< "$x"

Также не, что имена файлов могут иметь символы новой строки, в которых повредится многое из этого. Не нашли способ использовать \0 с compgen.

4
27.01.2020, 20:12
  • 1
    Спасибо за местоположение встроенного автоматического заполнения я на самом деле задавался вопросом, где оно было сохранено. После того как я получаю свою работу материала, я отправлю детали, еще раз спасибо! –  Pierre Mourlanne 25.05.2013, 13:45
  • 2
    @PierreMourlanne: Да, существует много для приобретения знаний из чтения тех сценариев. Также загляните (вероятно, completions/) подкаталог где bash_completion находитесь для команды определенные сценарии завершения. Должен быть вполне длинный хороший список со сценариями. –  Runium 25.05.2013, 13:57
  • 3
    Также. Я не думал об этом по Вашему предыдущему вопросу, но compgen может также использоваться на Вашем ssh сервере. –  Runium 25.05.2013, 14:00

Попытайтесь передать по каналу find вывод через sed 's/ /\\ /'.

Обратите внимание однако что другие символы (кавычки, $, и.. все обычные подозреваемые), может также сбить Вас с толку.

sed 's/\([ $&!#*()<>|{}[?`"'"'"']\)/\\\1/'

может быть лучше, поскольку это выйдет из большинства "специальных" символов.

(Я не выяснил, как правильно выйти \все же, хотя),

0
27.01.2020, 20:12
  • 1
    я уже попробовал такого рода вещи и вывод находки, действительно становится правильно отформатированным с завершенным пространством (another\ file). Проблема, вероятно, заключается впоследствии, в compgen -W "$(_get_file_list)" потому что мне все еще предлагают с этими тремя вариантами file, another и a_file. –  Pierre Mourlanne 25.05.2013, 13:12
  • 2
    я понял, что проблема, но не знала, как зафиксировать его. Вам нужен "$" расширение стиля. Я просто не знаю, как получить "$" расширение стиля. –  kampu 25.05.2013, 14:09
[115515] Недавно я столкнулся с той же проблемой. Я смог заставить все работать правильно, изменив переменную IFS с помощью [115964]local IFS=$'\n'[115965], а затем используя массивы. Попробуйте использовать следующее:

3
27.01.2020, 20:12

Теги

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