我在我的shell脚本中使用cd进入某个计算目录并再次使用cd - 返回。这是一个好用的方法吗?我的剧本是:
input_dir=/home/abc/2001/01/
cd $input_dir
#Execute some programm with ifile.txt e.g.
awk '$1 > 99 {printf "%.2f" "$1"}' ifile.txt > ofile.tx
cd -
还是我们应该经常提到路径名?像:
input_dir=/home/abc/2001/01/
awk '$1 > 99 {printf "%.2f" "$1"}' $input_dir/ifile.txt > $input_dir/ofile.txt
您能否建议是否有简单的方法来减少文本?
答案 0 :(得分:3)
将它放在子shell中:
(cd "$input_dir" && exec awk '$1 > 99 {printf "%.2f" "$1"}' ifile.txt > ofile.tx)
因此,当子shell退出时,您将自动返回到原始目录,因为cd
仅应用于该子shell(仅包含awk
命令)。
exec
确保您不会产生额外开销,因为它会导致子shell将其进程表条目替换为awk
。 (有些shell会自动为子shell中的最后一个命令执行此操作。)
答案 1 :(得分:1)
限制给定计算的cd
范围的常用技术是在子shell中运行命令,如下所示:
(cd "${inputdir}" && awk '…')
然而,这并不总是适用,因为子shell具有与父shell通信的有限方式。子shell引入了涉及以下资源的边界限制操作:
如果您需要在目录中进行计算以与父脚本的这些资源进行交互,您仍然可以使用子shell限定cd
的范围,前提是您:
使用命名FIFO让孩子通知所需的作业控制,变量,对父脚本的信号操作
或重写计算,以便只在子shell中进行输入和简单处理,而父shell通过匿名管道读取和解释结果。