Переменные Env не выбираются сценарием - PullRequest
0 голосов
/ 31 января 2019

Создание сценария для передачи нескольким людям и столкнулся с проблемой env.Сценарий не запустится, если я не укажу $PATH, $HOME и $GOPATH в начале файла.Вот так:

HOME=/home/Hustlin

PATH=/home/Hustlin/bin:/home/Hustlin/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin:/bin:/home/Hustlin/go/bin

export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

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

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

Спасибо всем заранее !!!

РЕДАКТИРОВАТЬ Сценарий запускается через crontab без специальных разрешений.

1,16,31,46 * * * * /home/Hustlin/directory1/super_cool_script.sh

Вот скрипт, который я запускаю:

#!/bin/bash
# TODO Manually put your $PATH and $HOME here. 

PATH=/home/Hustlin/bin:/home/Hustlin/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin:/bin:/home/Hustlin/go/bin

HOME=/home/Hustlin

export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

# Field1
field1="foo"

# Welcome message. 
echo Starting the update process...

# Deposit directory.
mkdir -p $HOME/directory1/sub1/data/body
mkdir -p $HOME/directory1/sub2/system

# Run command
program1 command1 

# Run longer command. 
program1 command2 field1

sleep 3

program1 command3 -o $HOME/directory1/sub1/data $field1

sleep 1

# Unzip and discard unnecessary files.
unzip $HOME/directory1/sub1/data/$field1 -d $HOME/directory1/sub1/data

rm $HOME/directory1/sub1/data/bar.yaml $HOME/dircetory1/sub1/data/char.txt

rm $HOME/directory1/sub1/data/$field1.zip

# Rename
mv $HOME/directory1/sub1/data/body.json $HOME/directory1/sub1/data/body/$(date -d '1 hour ago' +%d-%m-%Y_%H).json

echo Process complete.

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

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Проблема в crontab, а не в скрипте.
Когда вы запускаете скрипт на своем терминале, вы вошли в сеанс с установленными всеми переменными среды, поэтому скрипт может его использовать.
Но когда вы запускаетеон из crontab - это «пустой» сеанс, поэтому в нем не задана ни одна переменная окружения, он даже не знает о вашем пользователе.

Запустите скрипт в crontab следующим образом:su --login Hustlin /home/Hustlin/directory1/super_cool_script.sh

Проверьте эту документацию.
http://man7.org/linux/man-pages/man1/su.1.html

0 голосов
/ 31 января 2019

bash -l -c /path/to/script заставит bash сначала выполнить все файлы .bashrc и .profile, поэтому для него будут установлены переменные HOME и PATH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...