我有一个有趣的问题,我似乎找不到答案。我正在创建一个简单的应用程序,它将帮助我的开发部门使用NginX和配置文件自动启动docker容器。我的问题是,由于某种原因,我无法在扫描目录时获取bash脚本来存储文件夹的名称。这是我所谈论的一个非常简单的例子......
#!/bin/bash
getFolder() {
local __myResultFolder=$1
local folder
for d in */ ; do
$folder=$d
done
__myResultFolder=$folder
return $folder
}
getFolder FOLDER
echo "Using folder: $FOLDER"
然后我将这个简单的脚本保存为folder_test.sh并将其放在只有一个文件夹的文件夹中,将所有者更改为我,并为其提供正确的权限。但是,当我运行脚本时,我不断收到错误...
./folder_test.sh: 8 ./folder_test.sh: =test_folder/: not found
我尝试将$folder=$d
部分放在不同类型的引号中,但没有任何效果。我尝试了$folder="'"$d"'"
,$folder=`$d`
,$folder="$d"
,但都没有效果。让我疯了,任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
如果您想将结果保存到命名变量中,那么您所做的就是"间接分配&#34 ;;它涵盖在BashFAQ #6。
以下是一种方法:
#!/bin/bash
# ^^^^ not /bin/sh; bash is needed for printf -v
getFolder() {
local __myResultFolder=$1
local folder d
for d in */ ; do
folder=$d
done
printf -v "$__myResultFolder" %s "$folder"
}
getFolder folderName
echo "$folderName"
其他方法包括:
使用read
:
IFS= read -r -d '' "$__myResultFolder" < <(printf '%s\0' "$folder")
使用eval
(非常,非常仔细):
# note \$folder -- we're only trusting the destination variable name
# ...not trusting the content.
eval "$__myResultFolder=\$folder"
使用namevar
s(仅当使用新版本的bash时):
getFolder() {
local -n __myResultFolder=$1
# ...your other logic here...
__myResultFolder=$folder
}
答案 1 :(得分:1)
罪魁祸首是
// construct a scheduler factory
IScheduler sched = StdSchedulerFactory.GetDefaultScheduler();
// define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>().StoreDurably()
.WithIdentity("myJob", "group1") // name "myJob", group "group1"
.Build();
sched.AddJob(job,true);
string cron = "0 0/5 2-23 1/2 * ?"; // interval in minutes 5 2h00 and 23h00 every second day
string cron1 = "0 30,35,40,45,50,55 1 1/2 * ?"; // 1h30 every second day
// Trigger the job to run now, and then every 40 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger", "group1")
.StartNow()
.WithCronSchedule(cron)
.ForJob(job)
.Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithCronSchedule(cron1)
.ForJob(job)
.Build();
// Tell quartz to schedule the job using our trigger
sched.ScheduleJob(trigger);
sched.ScheduleJob(trigger1);
sched.Start();
将文件夹名称视为以$folder=$d
符号存储之前,并尝试使用该名称展开它,即字面上将名称=
视为可在shell下运行但无法找到的可执行文件该名称的文件。将其更改为
=test_folder/
此外,folder=$d
函数的返回值仅限于整数类型,并且您不能将字符串发送到调用函数。如果你想向bash
上的调用函数发送一个非零返回码,你可以添加一行
$folder
(或)如果要从函数返回字符串值,请不要使用if [ -z "$folder" ]; then return 1; else return 0; fi
,只需执行名称的return
,并使用函数名称替换命令,即
echo