Ввести пароль с помощью sudo и выполнить скрипт с помощью nohup

Я не знаком с git, поэтому я не очень понимаю, что вы пытаетесь сделать - в частности, почему в вашей первой команде дважды встречается слово echo, но затем вы не поместили его в свои переменные?  Но я предполагаю, что вы хотите сделать что-то вроде этого:

Avineshwar_func() {
    git --git-dir="$1" echo test-folder/.git/ add Steps-to-follow.txt  &&  git --git-dir="$2" echo test-folder/.git/ commit
}

и тогда, если вы скажете

Avineshwar_func foo bar

это будет эквивалентно тому, чтобы сказать

git --git-dir=foo echo test-folder/.git/ add Steps-to-follow.txt  &&  git --git-dir=bar echo test-folder/.git/ commit

Конечно, вы можете изменить имя с Avineshwar_func на любое другое, например, git1.

Как только вы добьетесь того, что все это будет работать, вам следует добавить обработку ошибок; например,

git1() {
    if [ -d "$1" ]  &&  [ -d "$2" ]
    then
        git --git-dir="$1" echo test-folder/.git/ add Steps-to-follow.txt  &&  git --git-dir="$2" echo test-folder/.git/ commit
    else
        echo "Usage: git1 dir1 dir2"
        return 1
    fi
}
2
17.04.2019, 01:52
1 ответ

Это неправильный синтаксис в bash:

nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh

From Shellcheck:

Line 1:
nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh
                             ^-- SC1070: Parsing stopped here. Mismatched keywords or invalid parentheses?

Вы не можете просто запустить something & && something, потому что помещение первой команды в фон не позволяет ждать кода возврата скрипта.

Вы можете либо запустить весь конвейер под nohup в фоновом режиме (желательно в виде скрипта):

nohup ./run.sh &

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

nohup ./NEW_SCRIPT_NAME.sh & wait && rm NEW_SCRIPT_NAME.sh

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

4
29.04.2021, 00:13

Теги

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