如何解决复制粘贴代码有效,但不能用作脚本
我用六个if语句编写了一个脚本,如下所示:
#!/usr/bin/bash
if [ -n $var1 ]
then
for f in /path/*.fastq.gz
do
x=${f/%.fastq.gz/_sample1-forward.fastq.gz}
y=${f/%.fastq.gz/_sample1-forward.out}
q=${f/%.fastq.gz/_temp.fastq.gz}
command [options] -i $f -o $temp${x##*/}
cp $temp${x##*/} $temp${q##*/}
done
else
echo "no $var1"
for f in /path/*.fastq.gz
do
q=${f/%.fastq.gz/_temp.fastq.gz}
cp $f $temp${q##*/}
done
fi
其他五个语句对var2和var6做类似的任务。当我运行脚本时,会得到意外的输出(没有错误,没有警告),但是当我将每个if语句复制粘贴到终端时,最终得到的是我期望的确切结果。我已经寻找了几个小时的隐藏字符或语法问题。难道这是一个壳问题?在OSX上编写的脚本(默认为zsh),在服务器上执行的脚本(默认为bash)。我觉得这个issue很相似,但是我在回复中找不到解决我问题的答案。
欢迎任何想法!
二羽里
解决方法
您也许应该看看shebang。我认为正确的用法是#!/usr/bin/env bash
或#!/bin/bash
。
非常感谢您的帮助。 Shebang似乎不是问题,尽管感谢您指出。 Shellcheck.net提醒我使用
[[]]
用于未加引号的变量,但这也不能解决问题。这是哪里出了问题以及我如何“解决”它:
对于每个变量,都使用依赖于支持文件的相同命令(工具)(格式相似但内容不同)。最初,在每个if语句之前,我用当前变量所需的支持文件替换了先前变量的支持文件。由于某种原因(好奇,欢迎提出任何想法),这种情况并非总是会正确发生。 作为快速解决方法,我制作了该工具的六个版本,所有版本均具有不同的支持文件,并在每个if语句之前使用了PYTHONPATH = / path / to / version /:$ PYTHONPATH。最佳实践是调整该工具,以便它可以使用不同的支持文件或用于处理重复任务的选项,但我现在没有时间。
祝您有美好的一天, 新渡里
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。