您能否向我解释以下测试脚本的输出:
# prepare test data
echo "any content" > myfile
# set bash to inform me about the commands used
set -x
cat < myfile
Run Code Online (Sandbox Code Playgroud)
输出:
+cat
any content
Run Code Online (Sandbox Code Playgroud)
即,为什么以+开头的行不显示“ <myfile”位?
如何迫使bash做到这一点。我需要通知用户脚本的执行情况,如下所示:
mysql -uroot < the_new_file_with_a_telling_name.sql
Run Code Online (Sandbox Code Playgroud)
我不能。
编辑:其他上下文:我使用变量。原始代码:
SQL_FILE=`ls -t $BACKUP_DIR/default_db* | head -n 1` # get latest db
mysql -uroot mydatabase < ${SQL_FILE}
Run Code Online (Sandbox Code Playgroud)
-v不会展开变量,并且cat file.sql | mysql会产生两行:
+mysql
+cat file.sql
Run Code Online (Sandbox Code Playgroud)
所以把戏也没有。
您可以尝试set -v或set -o verbose改为启用命令回显。
在我的机器上运行的示例:
[me@home]$ cat x.sh
echo "any content" > myfile
set -v
cat < myfile
[me@home]$ bash x.sh
cat < myfile
any content
Run Code Online (Sandbox Code Playgroud)
需要注意的是,它set -v只是按字面意义上回显该命令,而不进行任何外壳扩展或迭代。正如乔纳森(Jonathan)在评论中指出的那样,如果文件名是在变量(例如command < $somefile)中定义的,则很难识别所$somefile引用的内容,这可能是一个问题。
| 归档时间: |
|
| 查看次数: |
9380 次 |
| 最近记录: |