我正在使用当前正在服务器上运行的bash脚本(RHEL4).我正在使用Ubuntu 10.04在我的笔记本电脑上进行开发,但我不认为该平台会导致问题.
这是正在发生的事情:我有一个骨架脚本,调用另一个执行大部分工作的脚本.但是,它会调用getConfig.sh.getConfig.sh基本上只是解析一些命令行参数(使用getopts)并调用Java程序来解析一些XML文件.无论如何,getConfig.sh会抛出很多错误(但似乎仍然有效).
这是我得到的信息
每次运行时我都会收到这三个错误; 但是,脚本完成并运行Java代码.getconfig.sh:89:[[:找不到
getconfig.sh:89:[[:找不到
getconfig.sh:94:[[:未找到]
这是相关代码部分
parseOptions $*
if [[ "${debugMode}" == "true" ]] ; then
DEBUG="-DDEBUG=true"
echo "${JAVA_HOME}/bin/java ${DEBUG} -Djava.endorsed.dirs=${JAXP_HOME} -jar $(dirname $0)/GetXPath.jar ${XML_File} ${XPath_Query}"
fi
第89行是"parseOptions $*而第94行是"fi"
谢谢你的回答.
在Centos 6机器上,这适用于:
bash -c 'if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi'
Run Code Online (Sandbox Code Playgroud)
这不是:
sh -c 'if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi'
Run Code Online (Sandbox Code Playgroud)
我明白了:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi'
Run Code Online (Sandbox Code Playgroud)
没关系grep和tail.问题在于过程替换问题:<(...)
有人可以告诉我这里有什么不同吗?
[编辑]
谢谢你的回答!
使用capistrano进行部署时出现了问题.它默认使用sh,但我现在将其更改为bash.我不能做正常管道的原因是在使用时tail …
我已经看到了其他类似的问题,但我找不到任何关于如何找出通过Crontab运行Bash脚本的正确方法的真实信息.该.sh文件位于用户目录中(在我的例子中serverpilot).
该脚本正在尝试复制apps文件夹的内容并发送到我的S3存储桶.当sh backupS3.sh从终端运行时脚本运行得很好,但是没有通过Cron的欢乐.我见过人们参考PATH变量等但不知道从哪里开始!
/backupS3.sh
#!/bin/sh
echo 'Started backing to S3'
date +'%a %b %e %H:%M:%S %Z %Y'
aws s3 sync /apps s3://bucketname
date +'%a %b %e %H:%M:%S %Z %Y'
echo 'Finished backing to S3'
Run Code Online (Sandbox Code Playgroud)
crontab中
*/10 * * * * /backupS3.sh >> backupS3.log
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我做错了什么吗?谢谢!
编辑:我已经在cron命令的末尾添加了2>&1,现在我在日志文件中得到了一些内容:
/bin/sh: 1: /backupS3.sh: not found
我正在尝试编写一个将在后台播放广播的脚本
#!/bin/sh
for (( i = 80 ; i <= 101; i++ ))
do
amixer cset numid=1 i$% sleep 60;
done
Run Code Online (Sandbox Code Playgroud)
但我有问题:
alarmclock-vol.sh: 3: alarmclock-vol.sh: Syntax error: Bad for loop variable
Run Code Online (Sandbox Code Playgroud) 在创建文件路径和URL时,我注意到路径以./or 开头很多次~/.
以./和开头的文件路径有什么区别~/?
他们每个人的意思是什么?
我正在尝试运行一个命令,该命令有一个$()参数(不确定那个叫什么)应该在Docker容器中进行评估.例如:
docker exec mycontainer echo $(whoami)
Run Code Online (Sandbox Code Playgroud)
执行此操作时,whoami首先在主机上运行,然后插入主机的用户.相反,我希望whoami在容器中评估该命令,以便容器的用户被回显.
我发现很难找到任何帮助.我试过的替代方案不起作用:
docker exec mycontainer 'echo $(whoami)'
docker exec mycontainer echo '$(whoami)'
docker exec mycontainer echo $$(whoami)
docker exec mycontainer echo \$(whoami)
Run Code Online (Sandbox Code Playgroud)
怎么能实现这一目标?
我正在制作一个 dockerfile 来安装 elasticsearch:6.5.4 并向所需位置添加几个文件,并运行名为 test.sh 的脚本以在运行 elasticsearch 时在 elasticsearch 中创建一个新索引。
我不确定我是否应该使用 RUN、CMD 或 ENTRYPOINT 来做到这一点。
我通过注释我的最后一行(包含 RUN/CMD/ENTRYPOINT test.sh)成功构建了一个映像并运行了一个容器。我能够从容器的 bash 运行 test.sh 并获得所需的结果。
但是当我尝试为相同的过程构建图像时,出现以下错误:
$ docker build -t es .
Sending build context to Docker daemon 7.499MB
Step 1/8 : FROM elasticsearch:6.5.4
---> 93109ce1d590
Step 2/8 : WORKDIR /app
---> Running in 6b6412093d53
Removing intermediate container 6b6412093d53
---> a374ab69eb1a
Step 3/8 : ADD . /app
---> 6ed98ee7ad49
Step 4/8 : COPY test.sh .
---> 42184ec64c09
Step 5/8 : ADD analysis …Run Code Online (Sandbox Code Playgroud) 我想与某人共享一个脚本,但不确定 MacOS 上首选哪个。哪一个最好支持?
这?
#!/bin/sh
echo "Here goes my simple script that changes some settings."
# ... do some stuff
Run Code Online (Sandbox Code Playgroud)
或这个?
#!/bin/bash
echo "Here goes my simple script that changes some settings."
# ... do some stuff
Run Code Online (Sandbox Code Playgroud) 所以我知道有很多关于堆栈溢出的答案可以忽略 bash 脚本中的错误。不过,它们似乎都不适用于 source 命令。
我已经尝试过久经考验的 source ../bin/activate || true
我set -e在运行命令之前尝试过设置
我试过了 source ../bin/activate 2>&1 /dev/null
我set +e在运行命令之前尝试过设置。这也不起作用。
但是在这段代码的每次运行中,我都会收到
run.01: line 12: ../bin/activate: 没有那个文件或目录
这个问题的上下文是我正在创建一个运行一些 python 代码的简单 bash 脚本。指示用户如何创建特定的虚拟环境,如果他们正确设置,此行将自动激活它,否则,这应该忽略无法激活运行并在当前激活的任何环境中继续运行命令。
# Try virtual environment
source ../bin/activate || true
## Run.
code="../src-01/driver.v01.py"
## --------------------
graphInputFile="undirected_graph_01.inp"
graphType="undirected"
srcColId="0"
desColId="1"
degreeFind="2"
outFile="count.undirected.num.nodes.out"
python $code -inpGraphFile $graphInputFile -graphFormat $graphType -colSrcId $srcColId -colDesId $desColId -degreeFind $degreeFind -output_file $outFile
Run Code Online (Sandbox Code Playgroud)
无论命令是否source ../bin/activate成功,python 命令都应该执行。我有点不明白为什么这些解决方案都不起作用,目前我假设在这种情况下source可能会做一些与正常命令不同的事情。
编辑:
我#!/bin/bash -x按照要求将shebang添加到我的文件中,但这没有做任何事情。
这是我运行此脚本时的确切终端输出。 …
我正在编写一个简单的 bash 脚本,我在第 XX 行“(”处发现了这个错误语法错误,这超出了我的代码:
function myfun(){
echo XXXX
echo YYYY
read choice
}
choice=$(myfun)
Run Code Online (Sandbox Code Playgroud)
错误在哪里。我使用了 ShellCheck,没有检测到错误。