gpt4 book ai didi

linux - 尝试从不同位置运行 shell 脚本,但错误提示我正在尝试创建目录

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:29 24 4
gpt4 key购买 nike

我正在尝试运行以下脚本,让我们从其工作目录以外的其他位置调用它 foo.sh:

var1="$1"
var2="$2"

for SNR_NR in $var1; do
for parts in $var2; do
# echo *-$SNR_NR-$parts
for file in *-$SNR_NR-$parts; do
cat "$file" | sed -n '3p' \
| sed 's/$/,/' >> tmp
cat "$file" | sed -n '4p' \
| tr ' ' ',' \
| sed 's/^.\(.*\).$/\1/' >> tmp
done
done
# Concatenate the above onto one line
paste -d " " - - < tmp
rm tmp
done

它非常简单,它在工作目录中运行得非常好,如 sh foo.sh 5 500 它接受两个数字整数参数。

如果我尝试从工作目录以外的地方运行它,我得到的错误是:

/data/RESULTS/foo.sh: 18: /data/RESULTS/foo.sh: cannot create tmp: Is a directory
cat: *-0-500: No such file or directory
/data/RESULTS/foo.sh: 22: /data/RESULTS/foo.sh: cannot create tmp: Is a directory
cat: *-0-500: No such file or directory
paste: -: Is a directory
paste: -: Is a directory
rm: cannot remove ‘tmp’: Is a directory

我已经尝试将我的工作目录添加到 $PATH 但它仍然不起作用。在 foo.sh 上运行 ls -la 会得到 -rw-------- 但执行 chmod +x foo.sh 仍然不会'不工作。

最奇怪的部分是它试图创建一个名为 tmp 的目录,我不太明白,因为它只是一个临时文件,用于存储一些中间结果,然后将其打印到 shell。

编辑:

在采纳了评论中的建议后,以下内容现在会产生此错误,这是一种改进:

var1="$1"
var2="$2"

for SNR_NR in $var1; do
for parts in $var2; do
# echo *-$SNR_NR-$parts
for file in *-$SNR_NR-$parts; do
cat "$file" | sed -n '3p' \
| sed 's/$/,/' >> brian
cat "$file" | sed -n '4p' \
| tr ' ' ',' \
| sed 's/^.\(.*\).$/\1/' >> brian
done
done
# Concatenate the above onto one line
paste -d " " - - < brian
rm brian
done

运行 sh foo.sh 5 500 结果:

cat: *-0-500: No such file or directory
cat: *-0-500: No such file or directory

解决方案:

产生了一个简单的重写

var1="$1"
var2="$2"
# Supply results/script directory as argument
var3 = "$3"

# cd into script directory before running it
cd $var3

for SNR_NR in $var1; do
for parts in $var2; do
# echo *-$SNR_NR-$parts
for file in *-$SNR_NR-$parts; do
cat "$file" | sed -n '3p' \
| sed 's/$/,/' >> brian
cat "$file" | sed -n '4p' \
| tr ' ' ',' \
| sed 's/^.\(.*\).$/\1/' >> brian
done
done
# Concatenate the above onto one line
paste -d " " - - < brian
rm brian
done

最佳答案

不,它试图创建一个文件 tmp但是tmp 已经是该位置的一个目录。

这就是为什么 > tmp , < tmprm tmp都失败了 is a directory错误,因为它们都不能对目录进行操作。

如果你想要一个安全的临时文件使用mktemp .

关于linux - 尝试从不同位置运行 shell 脚本,但错误提示我正在尝试创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com