【发布时间】:2019-01-31 15:54:31
【问题描述】:
创建一个脚本以传递给几个不同的人并遇到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.
为了隐私,我更改了大部分程序和命令名称。我发布的内容仍然代表正在执行的操作以及文件的移动方式。
【问题讨论】:
-
脚本是如何执行的(是通过 sudo 还是其他方式)?你能先回显这些变量然后执行脚本吗? 编辑 请发布一个演示问题的最小脚本。您只是在展示您的解决方法。
-
如果您的脚本要求 $HOME 包含您的主目录的路径,而不是运行该脚本的用户的主目录,我认为您的脚本已严重损坏。
-
@WilliamPursell 抱歉,我可能措辞不佳。目前,每个人都必须使用自己的
$HOME和env变量来更新脚本。我想通过自动进行,让他们更轻松。我并不是在提倡我的$HOME应该是每个人的$HOME:) -
您似乎在使用
HOME,而您可以使用任意名称。
标签: bash shell environment-variables