相关疑难解决方法(0)

如何撤消`set -x`?

set -x在终端输入。

现在终端继续打印在我的输出顶部运行的最后一个命令,因此命令

~]$echo "this is what I see"
Run Code Online (Sandbox Code Playgroud)

返回

+ echo 'this is what I see'
this is what I see
Run Code Online (Sandbox Code Playgroud)

没有手册页set,我该如何set -x关闭?

shell

90
推荐指数
3
解决办法
9万
查看次数

带有带有空格和通配符的路径的字符串的 Bash 脚本错误

我在掌握 Bash 脚本的基础知识时遇到了麻烦。这是我到目前为止所拥有的:

#!/bin/bash
FILES="/home/john/my directory/*.txt"

for f in "${FILES}"
do
  echo "${f}"
done
Run Code Online (Sandbox Code Playgroud)

我想要做的就是.txtfor循环中列出所有文件,以便我可以对它们进行处理。但是 中的空间my directory*.txtjust 中的星号效果不佳。我尝试在带和不带双引号的情况下使用它,在变量名上带和不带花括号,但仍然无法打印所有.txt文件。

这是一个非常基本的事情,但我仍然在挣扎,因为我很累,无法直视。

我究竟做错了什么?

如果我的文件没有空格或星号,我已经能够成功应用上面的脚本......我不得不尝试使用或不使用双引号和大括号来让它工作。但是当我同时拥有空格和星号时,它就把一切都搞砸了。

shell bash quoting wildcards

29
推荐指数
2
解决办法
5万
查看次数

如何保存和恢复所有 shell 选项,包括 errexit

我在各种堆栈交换站点和 unix 帮助论坛上阅读了许多关于如何修改 shell 选项然后恢复它们的问题 - 我在这里找到的最全面的问题是如何“撤消”`set -x`?

收到的智慧似乎是要么保存过的结果set +oshopt -poeval后来恢复到以前的设置。

但是,在我自己使用 bash 3.x 和 4.x 进行的测试中,errexit在执行命令替换时,该选项无法正确保存。

这是显示问题的示例脚本:

set -o errexit
set -o nounset
echo "LOCAL SETTINGS:"
set +o
OLDOPTS=$(set +o)
echo
echo "SAVED SETTINGS:"
echo "$OLDOPTS"
Run Code Online (Sandbox Code Playgroud)

和输出(我修剪了一些不相关的变量):

LOCAL SETTINGS:
set -o errexit
set -o nounset

SAVED SETTINGS:
set +o errexit
set -o nounset
Run Code Online (Sandbox Code Playgroud)

这似乎非常危险。errexit如果任何命令失败,我编写的大多数脚本都依赖于停止执行。我刚刚在我的一个脚本中找到了一个由此引起的错误,本应errexit在最后恢复的函数最终覆盖了它,在脚本运行期间将其设置回默认值off

我希望能够做的是编写可以根据需要设置选项的函数,然后在退出之前正确恢复所有选项。但是好像在子shell中调用的命令替换,errexit是没有继承的。

我不知道如何在set +o …

shell bash

10
推荐指数
1
解决办法
2665
查看次数

标签 统计

shell ×3

bash ×2

quoting ×1

wildcards ×1