我想为变量调用一个设置文件,我怎样才能在bash中执行此操作?
因此设置文件将定义变量(例如:CONFIG.FILE):
production="liveschool_joe"
playschool="playschool_joe"
Run Code Online (Sandbox Code Playgroud)
脚本将在其中使用这些变量
#!/bin/bash
production="/REFERENCE/TO/CONFIG.FILE"
playschool="/REFERENCE/TO/CONFIG.FILE"
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Run Code Online (Sandbox Code Playgroud)
我怎样才能让bash做那样的事情?我是否必须使用awk/sed等......?
我一次又一次地看到Bash在Stack Overflow上使用eval的答案,并且答案得到了抨击,双关语是为了使用这种"邪恶"结构.为什么eval这么邪恶?
如果eval不能安全使用,我应该使用什么呢?
我试图读取前面定义的bash变量的值,但这个变量名称是动态派生的.
这是我想要做的bash脚本
$ mythreshold=10
$ table=my
$ threshold="$table"threshold
$ echo $("$threshold")
mythreshold
Run Code Online (Sandbox Code Playgroud)
但是当我尝试读取这个变量值时
$ echo $("$threshold")
-bash: mythreshold: command not found
Run Code Online (Sandbox Code Playgroud)
但我期待它打印
$ echo $("$threshold")
10
Run Code Online (Sandbox Code Playgroud)
有没有办法可以得到这个工作,它应该打印上面定义的mythreshold变量的值
我想将$home作为运行rsync时要排除的目录列表传递。文件:
cat backup_system.sh
#!/bin/bash
set -x
home=''
home=$home'"/home/ravas/Documents/*"',
home=$home'"/home/ravas/Downloads/*"',
home=$home'"/home/ravas/pCloudDrive/*"',
home=$home'"/home/ravas/pCloudLocal/*"',
home=$home'"/home/ravas.old/*"'
echo $home
sudo rsync -aAXv / --exclude={$home,"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /run/media/ravas/system_backup
Run Code Online (Sandbox Code Playgroud)
备份在没有$home变量的情况下运行良好,但如果我添加它,它不会产生任何效果。
输出的最后两行显示$home中列出的目录未使用--exclude扩展,而其他目录则扩展。
不用说,我不太擅长 bash,任何帮助将不胜感激!
./backup_system.sh
+ home=
+ home='"/home/ravas/Documents/*",'
+ home='"/home/ravas/Documents/*","/home/ravas/Downloads/*",'
+ home='"/home/ravas/Documents/*","/home/ravas/Downloads/*","/home/ravas/pCloudDrive/*",'
+ home='"/home/ravas/Documents/*","/home/ravas/Downloads/*","/home/ravas/pCloudDrive/*","/home/ravas/pCloudLocal/*",'
+ home='"/home/ravas/Documents/*","/home/ravas/Downloads/*","/home/ravas/pCloudDrive/*","/home/ravas/pCloudLocal/*","/home/ravas.old/*"'
+ echo '"/home/ravas/Documents/*","/home/ravas/Downloads/*","/home/ravas/pCloudDrive/*","/home/ravas/pCloudLocal/*","/home/ravas.old/*"'
"/home/ravas/Documents/*","/home/ravas/Downloads/*","/home/ravas/pCloudDrive/*","/home/ravas/pCloudLocal/*","/home/ravas.old/*"
+ sudo rsync -aAXv /
'--exclude="/home/ravas/Documents/*","/home/ravas/Downloads/*","/home/ravas/pCloudDrive/*","/home/ravas/pCloudLocal/*","/home/ravas.old/*"'
'--exclude=/dev/*' '--exclude=/proc/*' '--exclude=/sys/*' '--exclude=/tmp/*' '--exclude=/run/*' '--exclude=/mnt/*' '--exclude=/media/*' --exclude=/lost+found** /run/media/ravas/system_backup
Run Code Online (Sandbox Code Playgroud) 我正在尝试source从Perl脚本(script.pl)编写脚本.
system ("source /some/generic/script");
Run Code Online (Sandbox Code Playgroud)
请注意,此通用脚本可以是shell,python或任何其他脚本.此外,我无法将此通用脚本中的逻辑复制到我的Perl脚本中.我试着替换system`` exec,和qx//.每次我收到以下错误:
不能执行"source":script.pl第18行没有这样的文件或目录.
我在互联网上遇到了很多论坛,讨论了这个问题的各种原因.但他们都没有提供解决方案.有没有办法source从Perl脚本运行/执行命令?