Я новичок в написании сценария bash, и у меня есть пакет npm, который я создал https://www.npmjs.com/package/comgen
Баш
days=3
hours=24
minutes=60
totalNumberOfCommits=3
lenghtOfTime=$((days*hours*minutes))
arrayOfCommits=$(shuf -i 1-$lenghtOfTime -n $totalNumberOfCommits | sort -r -n)
for index in $arrayOfCommits
do
randomMessage=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
git commit --allow-empty --date "$(date -d "-$index minutes")" -m "$randomMessage"
done
git push origin master
Вы запускаете его так: npm run comgen Я хочу, чтобы он работал так:
npm run comgen -days "x number of days" -totalNumberOfCommits "x number of commits"
Package.json
"scripts": {
"comgen": "commit-generator.sh"
},
Если количество дней и общее количество переданных коммитов заменят число в переменных, которые у меня есть в сценарии bash.
Я прочитал эти SO-вопросы, прежде чем отправлять свои собственные: https://unix.stackexchange.com/questions/32290/pass-command-line-arguments-to-bash-script





Я не уверен, как именно работает npm, но по моему опыту я предполагаю, что аргументы командной строки передаются непосредственно в вызываемый исполняемый файл (двоичный файл или сценарий). Это означает, что ваш скрипт на самом деле называется как
/path/to/comgen -days "x number of days" -totalNumberOfCommits "x number of commits"
Теперь это чистый материал Bash для анализа аргументов cmdline. Вы оцениваете вариант и решаете, какое будет следующее значение:
days=3
hours=24
minutes=60
totalNumberOfCommits=3
while [ $# -ne 0 ]; do
case "$1" in
"-d"|"-days") days=$2; shift 2;;
"-tc"|"-totalNumberOfCommits") totalNumberOfCommits=$2; shift 2;;
# "-x"|"-xx"|"-xxx") : Process another option; shift 2;;
*) break;;
esac
done
lenghtOfTime=$((days*hours*minutes))
... rest of the code
Я дошел до того, что могу запустить этот commit-generator.sh -d 4 -tc 10 в терминале. Теперь, когда я хочу выполнить npm run comgen -d 5 -tc 10, я получаю commit-generator.sh -d $1 -tc $2 "1" "10" в моем пакете. Json у меня есть "scripts": { "comgen": "commit-generator.sh -d $1 -tc $2 " }
я понял. Моя проблема в том, что мне нужно передать параметры без «-» и изменить имя в сценарии bash, чтобы оно было просто d, tc и т. д.
Попробуй это
package.json
"scripts": {
"comgen": "commit-generator.sh"
},
commit-generator.sh
#!/bin/bash
echo $npm_config_days
echo $npm_config_hours
и, наконец, в терминале
npm run comgen --days=foo --hours=bar
выход:
> commit-generator.sh
foo
bar
Все, что мне нужно сделать, это передать переменные в npm run comgen -d 5 -tc 10