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

(1/3) означает целочисленное деление, поэтому вы не можете получить десятичное значение из этого деления. Для решения этой проблемы используйте:

public static void main(String[] args) {
        double g = 1.0 / 3;
        System.out.printf("%.2f", g);
    }
15
задан Paolo Tedesco 4 February 2009 в 14:53
поделиться

8 ответов

Необходимо смочь использовать команда compgen, как так:

compgen -A builtin [YOUR STRING HERE]

, Например, "compgen-A встроенный l" возвраты

let 
local 
logout

можно использовать другие ключевые слова вместо "встроенного" для получения других типов завершения. Встроенный дает Вам, окружают встроенные команды. "Файл" дает Вам, локальные имена файлов, и т.д.

Вот список действий (из страницы справочника Bash для завершенный , который использует compgen):

  alias      Alias names.  May also be specified as -a.
  arrayvar   Array variable names.
  binding    Readline key binding names.
  builtin    Names  of  shell builtin commands.  May also be specified as -b.
  command    Command names.  May also be specified as -c.
  directory  Directory names.  May also be specified as  -d.
  disabled   Names of disabled shell builtins.
  enabled    Names of enabled shell builtins.
  export     Names of exported shell variables.  May also be specified as -e.
  file       File names.  May also be specified as -f.
  function   Names of shell functions.
  group      Group names.  May also be specified as -g.
  helptopic  Help topics as accepted by the help builtin.
  hostname   Hostnames, as taken from the file specified by the HOSTFILE shell
                 variable.
  job        Job  names, if job control is active.  May also be specified as
                 -j.
  keyword    Shell reserved words.  May also be specified as -k.
  running    Names  of  running  jobs,  if  job  control  is active.
  service    Service names.  May also be specified as -s.
  setopt     Valid arguments for the -o option  to  the  set builtin.
  shopt      Shell  option  names  as  accepted by the shopt builtin.
  signal     Signal names.
  stopped    Names  of  stopped  jobs,  if  job  control  is active.
  user       User names.  May also be specified as -u.
  variable   Names  of  all  shell  variables.   May also be specified as -v.
33
ответ дан 1 December 2019 в 01:11
поделиться

Ответ JacobM является большим. Для того, чтобы сделать его вручную, я использовал бы что-то вроде этого:

echo $PATH  | tr : '\n' | 
 while read p; do 
  for i in $p/mod*; do
   [[ -x "$i" && -f "$i" ]] && echo $i     
  done
 done

тест перед выводом удостоверяется только исполняемый файл, регулярные файлы показывают. Вышеупомянутые шоу все команды, запускающиеся с mod.

1
ответ дан 1 December 2019 в 01:11
поделиться

Интересный способ сделать это должно совершить нападки M-* (Meta обычно оставляют Высокий звук).

Как пример, введите это:

$ lo

Затем совершает нападки M-*:

$ loadkeys loadunimap local locale localedef locale-gen locate
  lockfile-create lockfile-remove lockfile-touch logd logger login
  logname logout logprof logrotate logsave look lorder losetup 

можно читать больше об этом в man 3 readline; это - функция readline библиотека.

2
ответ дан 1 December 2019 в 01:11
поделиться

Если бы Вы хотите точно, как удар завершился бы

COMPLETIONS=$(compgen -c "$WORD")

, compgen завершает использование того же использования удара правил при переключении вкладок.

1
ответ дан 1 December 2019 в 01:11
поделиться

Что перечислено, когда Вы совершаете нападки, двоичные файлы в Вашем ПУТИ, которые запускаются с той строки. Так, если Ваша переменная ПУТИ содержит: ПУТЬ =/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/java/jre/bin:/usr/lib/qt/bin:/usr/share/texmf/bin:.

Bash посмотрит в каждом из тех каталогов, чтобы показать Вам предложения, после того как Вы совершаете нападки. Таким образом для получения списка команд, запускающихся с "ls" в переменную, Вы могли сделать: $ MYVAR= (ls/usr/local/bin/ls*/usr/bin/ls*/bin/ls*) Естественно Вы могли добавить все другие каталоги, которые я не имею.

0
ответ дан 1 December 2019 в 01:11
поделиться

Выполните итерации по переменной $PATH и сделайте ls beginningofword* для каждого каталога в пути?

Для получения его точно эквивалентный необходимо было бы отфильтровать только исполняемые файлы, и вид по имени (должно быть довольно легким с флагами ls и командой вида).

0
ответ дан 1 December 2019 в 01:11
поделиться

Только для забавы, другого ручного варианта:

find -L $(echo $PATH | tr ":" " ") -name 'pattern' -type f -perm -001 -print

, где pattern указывает шаблон имени файла, Вы хотите использовать. Это пропустит команды, которые не являются глобально исполняемым файлом, но для которых у Вас есть разрешение.

[протестированный на Mac OS X]

<час>

Использование -or и -and флаги для создания более всесторонней версии из этой команды:

find -L $(echo $PATH | tr ":" " ") -name 'pattern' -type f
                                   \( \
                                       -perm -001 -or \
                                       \( -perm -100 -and -user $(whoami)\) \
                                   \) -print

возьмет файлы, для которых у Вас есть разрешение на основании владения ими. Я не вижу общий способ получить все те, которых можно выполнить на основании присоединения группы без намного большего количества кодирования.

0
ответ дан 1 December 2019 в 01:11
поделиться

Интересный, я не знал приблизительно compgen. Здесь сценарий, я раньше делал это, который не проверяет на неисполняемые файлы:

#!/bin/bash
echo $PATH | tr ':' '\0' | xargs -0 ls | grep "$@" | sort

Сохраняют тот сценарий где-нибудь в Вашем $PATH (я назвал его findcmd), chmod u+w это, и затем используйте его точно так же, как grep, передавая Ваши любимые опции и шаблон:

findcmd ^foo   # finds all commands beginning with foo
findcmd -i -E 'ba+r'  # finds all commands matching the pattern 'ba+r', case insensitively
1
ответ дан 1 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

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