我正在做一门关于 bash 的课程,这似乎有点过时了。下面有一个简单的脚本,它应该允许我在读取或执行行时看到它们,但我的控制台没有任何返回。传递给 bartek_report.sh 的 $1 参数故意丢失,因为我想看看控制台挂起时会发生什么。使用最新的Ubuntu。
#!/bin/bash -v #or -x
# creates a report for a single container
# exercise: add a variable called 'directory'
# that determines where we save our output file
directory="reports"
mkdir -p $directory
grep $1 shipments.csv > $directory/$1.csv
echo Report created in $directory under filename $1.csv
当我在 bash 下调用脚本时,它就像没有 -x 或 -v 一样挂起,为什么?
bartek@Lenovo-LAB~/Desktop/Devs/bash_learning/02/demos/after_m2$ sh bartek_report.sh
[blinking cursor]
答案1
您没有使用 调用脚本bash
,因为您已明确指定sh
为运行脚本的 shell。
#!
仅当您使脚本可执行并像系统中的任何其他程序一样对待它时,才会考虑顶行
chmod a+x myscript # Make executable
./myscript # Run it
正如已经提到的一条评论在这个答案下面,您还应该注意,既不-x
也不-v
写信给标准输出。两者都是调试工具并将消息写入标准错误以免中断任何有效的正常输出流。 (因此./script >file
会将调试消息写入您的终端,并将正常的预期输出写入file
。)