Как я могу определить псевдоним удара как последовательность нескольких команд? [дубликат]

32
задан Paŭlo Ebermann 17 August 2011 в 22:28
поделиться

6 ответов

Вы упоминаете файлы BAT, так что, возможно, вы хотите, это написать сценарий оболочки. Если так, то просто введите команды, которые вы хотите встроенную строку в файл, например:

command1
command2

и попросите Bash выполнить файл:

bash myscript.sh

, если вы хотите, чтобы вы могли выбрать скрипт непосредственно без печати «Bash» Затем добавьте следующую строку в виде первой строки файла:

#! /bin/bash
command1
command2

затем отметьте файл как исполняемый файл:

chmod 755 myscript.sh

Теперь вы можете запустить его, как и любой другой исполняемый файл:

./myscript.sh

Обратите внимание, что UNIX не работает «Действительно заботитесь о расширении файлов. Вы можете просто назвать файл «MyScript» без расширения «.sh», если хотите. Это эта специальная первая линия, которая важна. Например, если вы хотите написать свой скрипт на языке программирования PERL, а не Bash, первая строка будет:

#! /usr/bin/perl

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

Кроме того, если вы теперь скопируете свой скрипт в одну из каталогов, перечисленных в переменке среды $ PATCH, вы можете вызвать ее из любого места, просто набирая его имя файла:

myscript.sh

Даже завершено. Вот почему я обычно включаю каталог ~ / bin на моем $ Path, чтобы я мог легко установить персональные сценарии. И лучше всего, как только у вас есть куча личных сценариев, которые вы используете для того, чтобы вы могли легко портировать их на любой новый компьютер Unix, копируя свой личный каталог ~ / bin.

16
ответ дан 27 November 2019 в 19:48
поделиться

для цепи последовательности команд, попробуйте следующее:

alias x='command1;command2;command3;'

Или вы можете сделать это:

alias x='command1 && command2 && command3'

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

Также для ввода паролей интерактивно или взаимодействие с другими программами, подобное, проверьте ожидаемое. ( http://expect.nist.gov/ )

70
ответ дан 27 November 2019 в 19:48
поделиться

Нет понятия, будет ли это быстрее без тестовых данных... но звучит так, будто это может

SELECT * FROM
    SmallTable s
    INNER JOIN JoinTable j ON j.SmallTableID = s.ID
    INNER JOIN BigTable b ON b.ID = j.BigTableID
WHERE
    (s.flag1=1) AND (s.flag2=1)
 UNION ALL
 SELECT * FROM
    SmallTable s
    INNER JOIN JoinTable j ON j.SmallTableID = s.ID
    INNER JOIN BigTable b ON b.ID = j.BigTableID
WHERE
    (s.flag1=0 AND b.text1 NOT LIKE 'pattern1%')
    AND (s.flag2=0 AND b.text1 <> 'value1')

Пожалуйста, дайте мне знать, что происходит

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

изменить

что-то подобное?

SELECT * FROM
    SmallTable s
    INNER JOIN JoinTable j ON j.SmallTableID = s.ID
    INNER JOIN BigTable b ON b.ID = j.BigTableID
WHERE
    (s.flag1=1) AND (s.flag2=1)
 UNION ALL
 SELECT * FROM
    SmallTable s
    INNER JOIN JoinTable j ON j.SmallTableID = s.ID
    INNER JOIN BigTable b ON b.ID = j.BigTableID
WHERE EXISTS
    (SELECT 1 from BigTable b
     WHERE   
    (s.flag1=0 AND b.text1 NOT LIKE 'pattern1%')
    AND (s.flag2=0 AND b.text1 <> 'value1')
)
-121--4013097-

Это не элегантно, но это должно работать...

SELECT * FROM
    SmallTable s
    INNER JOIN JoinTable j ON j.SmallTableID = s.ID
    INNER JOIN BigTable b ON b.ID = j.BigTableID
WHERE
    (s.flag1 = 1 and s.flag2 = 1) OR 
    (
       (s.flag1=1 OR b.text1 NOT LIKE 'pattern1%')
       AND (s.flag2=1 OR b.text1 <> 'value1')
    )
-121--4013095-

Apropos несколько команд в одном псевдониме, для их объединения можно использовать один из логических операторов. Вот один, чтобы переключиться в каталог и сделать ls в нем

      alias x="cd /tmp && ls -al"

Другой вариант - использовать функцию оболочки. Это команды sh/zsh/bash. Я не знаю достаточно других снарядов, чтобы быть уверенным, работают ли они.

Что касается вещи sudo, если вы хотите этого (хотя я не думаю, что это хорошая идея), правильный способ пойти - изменить файл /etc/sudoers , чтобы получить то, что вы хотите.

3
ответ дан 27 November 2019 в 19:48
поделиться

Парил должен рекурсивно пройти твое. Если соленья использует только 5 уровней вызовов функций, чтобы выполнить работу, которую ваш TRE из глубины 638 понадобится уровень, установленный на уровне более 3000.

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

Мариновые ручки циклы ОК, так что не имеет значения, даже если у вашего ТРИ был цикл там

-121--1055037-

Это объекты, которые «сидят на стороне» основной части кода и выполняют некоторые работы для объекта. Они «помогают» объекту сделать свою работу.

В качестве примера многие люди имеют более тесный объект помощника. Это займет различные примерные объекты, например, Java.sql.Statement, java.sql.Connection и т. Д. и закроют объект и игнорируют любые ошибки, которые выходят из него. Это имеет тенденцию быть, потому что, если вы получите ошибку закрываю объект, в любом случае не так много, поэтому люди просто игнорируют его.

, а не имение этой котельной:

try {
  connection.close();
} catch (SQLException e) {
  // just ignore… what can you do when you can't close the connection?
   log.warn("couldn't close connection", e);
}

, разбросанный вокруг кодовой базы, они просто вызывают:

Closer.close(connection);

вместо этого. Например, посмотрите на Гуаву Крупным планом .

-121--1301622-

, вероятно, легче определить функции для этих типов вещей, чем псевдоним, сохраняет вещи более читаемыми, если вы хотите сделать больше, чем команда или два:

в вашем .bashrc

perform_my_command() {
    pushd /some_dir
    my_command "$@"
    popd
}

Затем на командной строке вы можете просто сделать:

perform_my_command my_parameter my_other_parameter "my quoted parameter"

Вы можете сделать все, что вам нравится в функции, вызовите другие функции и т. Д.

Вы можете посмотреть на просмотр Руководство по сценарию Bash Для глубоких знаний.

8
ответ дан 27 November 2019 в 19:48
поделиться

Для псевдонима Вы можете использовать это:

alias sequence='command1 -args; command2 -args;'

или если вторая команда должна быть выполнена только в том случае, если первое успешно использовать:

alias sequence='command1 -args && command2 -args'
6
ответ дан 27 November 2019 в 19:48
поделиться

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

Эта функция может быть определена в вашем .profile или .bashrc. Подложка - избегать изменения вашего рабочего каталога.

function myfunc {
   ( cd /tmp; command )
}

Затем из вашей командной строки

$ myfunc

для вашего второго вопроса вы можете просто добавить свою команду на / etc / sudoers (если вы полностью уверены в том, что делаете)

myuser           ALL = NOPASSWD: \
                    /bin/mycommand 
6
ответ дан 27 November 2019 в 19:48
поделиться
Другие вопросы по тегам:

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