Для передачи параметра к файлу сценария Bash

Вы можете сделать это с помощью fork () и exec ()

pid_t pid = fork();
if (pid == 0) { // child process
    execl("/etc/init.d/servicename", "/etc/init.d/servicename", "start", (char*) 0);
    perror("execl"); // only get here when exec fails
    exit(0);
} else if (pid > 0) { // parent process
    wait(NULL); // wait for child to finish
} else { // error
    perror("fork");
}
0
05.12.2018, 13:22
3 ответа

Вы используете так называемые "позиционные параметры", $1, $2и так далее.

например

#!/bin/bash
cd /path/to/file
git checkout --.
git checkout tags/"$1"

Теперь вы можете выполнить myscript tagили myscript anothertagили myscript test, и значение $1будет тем, что вы введете.

4
28.01.2020, 02:18

вы можете передавать параметры вашему скрипту с позиционными параметрами

#!/bin/bash
cd /path/to/file
TAG=$1  # read the first paramater passed to your script like./myscript v1.2
if [ "$TAG" != "" ]; then
    git checkout --.
    git checkout tags/"$TAG"
else
    echo "Please enter a Tag "
    exit 1 ;
fi

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

   #!/bin/bash
    read -p "Please enter tag: " TAG
     cd /path/to/file
    if [ -n "$TAG" ]; then
        git checkout --.
        git checkout tags/"$TAG"
    else
        echo "Please run again and enter a Tag "
        exit 1 ;
    fi
0
28.01.2020, 02:18

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

#!/bin/bash
tag=$1
cd /path/to/file
git checkout --.
git checkout tags/${tag}

При этом первый аргумент командной строки скрипта будет присвоен переменной tag.

Чтобы разрешить пробелы в значении $tag, двойные кавычки расширения переменной:

#!/bin/bash
tag=$1
cd /path/to/file
git checkout --.
git checkout tags/"$tag"

Чтобы выполнять операции gitтолько в случае успешного выполнения cd, сделайте каждую команду зависимой от успешного завершения предыдущей команды:

#!/bin/bash
tag=$1
cd /path/to/file &&
git checkout --. &&
git checkout tags/"$tag"

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

#!/bin/bash -e
tag=$1
cd /path/to/file
git checkout --.
git checkout tags/"$tag"

Поскольку этот скрипт не использует ничегоbash-специфического, вместо этого он легко запустится под /bin/sh:

#!/bin/sh -e

tag=$1

cd /path/to/file
git checkout --.
git checkout tags/"$tag"
2
28.01.2020, 02:18

Теги

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