Вы можете сделать это с помощью 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");
}
Вы используете так называемые "позиционные параметры", $1
, $2
и так далее.
например
#!/bin/bash
cd /path/to/file
git checkout --.
git checkout tags/"$1"
Теперь вы можете выполнить myscript tag
или myscript anothertag
или myscript test
, и значение $1
будет тем, что вы введете.
вы можете передавать параметры вашему скрипту с позиционными параметрами
#!/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
Ваш скрипт можно заставить работать так, как вы хотели, добавив всего одну строку:
#!/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"