标签: shopt

函数调用者位置参数

我需要读取和写入$@函数调用者的位置参数。Bash 手册页说:

shell 函数是一个对象,它像一个简单的命令一样被调用,并使用一组新的位置参数执行一个复合命令

所以$@在每次调用时都会重写。我寻找了一些“特殊参数”,但一无所获。shell 变量BASH_ARGV似乎解决了我的问题,但是它需要shopt -s extdebug启用,在我的机器中不是默认行为,也不是在生产中打开的选项。

extdebug
    If set, behavior intended for use by debuggers is enabled:
    ...
    4.     BASH_ARGC and BASH_ARGV are updated as described in their
           descriptions above.
    ...
Run Code Online (Sandbox Code Playgroud)

Bash 是否能够在$@没有 的情况下读取或写入函数的调用者BASH_ARGV?您是否认为 Bash 受到限制并使用另一个 shell 进行脚本编写?

编辑:我想要getopt在我的助手库中使用一个精美的包装器。所以与它相关的所有行为都在一个函数中。无需检查错误或set --.

shell bash parameter function shopt

6
推荐指数
1
解决办法
1201
查看次数

如何根据 bash 版本对 shopt -s autocd 进行 .bashrc 调用?

在 Ubuntu 中,我喜欢

shopt -s autocd
Run Code Online (Sandbox Code Playgroud)

在我的.bashrc文件中输入“cd”进行自动 CD,即只需输入目录名称(也可能使用制表符完成),然后按回车键,然后按 cd 到目录(如果存在)。

在 OSX 上,这对我的无效 .bashrc

我怎样才能为此做一个“依赖”?这样我就可以在两个操作系统之间共享和维护一个 .bashrc 吗?

我知道一个文件我可以做这样的事情:

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
Run Code Online (Sandbox Code Playgroud)

对于像 tmux 这样依赖于屏幕的应用程序,我可以做到

if [[ ! $TERM =~ screen ]]; then
  if [ -n "$(type -P tmux)" ]; then
    exec tmux
  fi  
fi
Run Code Online (Sandbox Code Playgroud)

但我能不能做这种事情,我能不能做shopt -s autocd

bash bashrc shopt

6
推荐指数
1
解决办法
969
查看次数

检查 bash 选项

我有一个函数,想使用pipefail里面的选项。但我不想简单地set -o pipefail,因为我担心脚本的另一部分可能不会pipefail被设置。当然我可以set +o pipefail事后做,但如果pipefail设置在我的函数之外,这也可能会引入意外行为。

当然false | true,如果pipefail设置了,我可以使用退出代码作为衡量标准,但这似乎有点脏。

有没有更通用的(也许是规范的?)方法来检查设置的 bash 选项吗?

bash shopt

6
推荐指数
2
解决办法
2656
查看次数

cron 脚本中 shopt 选项的范围

我有一个 bash 脚本,它在 cron 作业中每晚运行。它需要做不区分大小写的文件匹配,所以脚本调用

shopt -s nocaseglob
Run Code Online (Sandbox Code Playgroud)

我想确保这不会影响其他 cron 脚本。在此脚本结束后,此设置是否仍然存在?还是仅在脚本运行期间启用此设置?

谢谢!

bash cron shopt

5
推荐指数
1
解决办法
1130
查看次数

Linux Redhat 7:如何全局/系统范围设置 shell 选项?

我在尝试弄清楚如何为xpg_echo将在我的 Linux RedHat 系统 (7.4) 上运行的每个 shell 打开 bash 选项时遇到了一些麻烦。

我知道我可以通过使用来获得我需要的东西(目的是随时扩展反斜杠转义,因为所有 shell 都是从 HP-UX 服务器移植的)shopt -s xpg_echo,它在大多数情况下工作正常。

现在我的问题是在哪里“系统范围”或“全局”打开此选项,以便我将运行的每个 shell 都使用它。

我尝试将shopt -s xpg_echo一个自定义 shell 放入/etc/profile.d/myshell.sh.

它适用于:

  • 交互式 shell 会话(源自/etc/bashrc
  • 登录 shell 会话(源自/etc/profile
  • #!/bin/bash没有 bash shebang 的 shell 程序(第一行没有)

但我无法让它在以下情况下工作,因为/etc/profile.d/脚本似乎没有获取来源,并且该xpg_echo选项不是从调用 shell 继承的:

  • 当运行 shell 脚本(例如echo "a\tb")作为bash参数时,例如bash /tmp/mytest.sh
  • #!/bin/bash当运行第一行有 bash shebang ( ) 的 shell 脚本时

我想知道是否有任何方法可以xpg_echo在需要运行 …

linux shell bash rhel shopt

5
推荐指数
1
解决办法
1108
查看次数

bash 没有设置 autocd

我尝试autocd在 bash 中设置选项,所以我不必输入cd src,只需输入src. 但是shopt -s autocd给了我:

-bash: shopt: autocd: invalid shell option name
Run Code Online (Sandbox Code Playgroud)

(Ubuntu 8.04 耐久)

bash shopt

4
推荐指数
1
解决办法
2183
查看次数

使用 shopt -s autocd 有什么注意事项吗?

我最近发现了这个功能shopt -s autocd

          autocd  If  set,  a command name that is the name
                  of a directory is executed as if it  were
                  the argument to the cd command.  This op?
                  tion is only used by interactive shells.
Run Code Online (Sandbox Code Playgroud)

乍一看似乎很有帮助,但我不是 Bash 专家,我想知道使用它是否可能是错误的。

设置是否有任何潜在危险shopt -s autocd?我对脚本编写以及与其他应用程序或配置的冲突特别感兴趣。

bash cd-command shell-script shell-builtin shopt

3
推荐指数
1
解决办法
147
查看次数

是否有可以处理通配符的“ls”替代品?

我刚刚了解到 ls 无法处理通配符(ls '*'不起作用),因此 shell 在 ls 被调用之前会这样做。因此,对于使用 unix 工作了 20 年的人来说,ls 的行为可能被认为是合乎逻辑的,对我来说不是,我也不会与 ls 保持一致。

我想要一个目录命令来扫描文件和目录,然后应用通配符过滤器。这样 als cr*就不会列出目录“cron.daily”中的文件。

我知道有ls -d,我做了一个alias lx=ls -lartd. 但后来我意识到,ls -d出于某种秘密原因,没有任何争论是行不通的。

有没有我可以安装的替代品?

ls wildcards shopt

0
推荐指数
1
解决办法
687
查看次数