标签: shell-builtin

捕获 bash 内置的多行输出

通常,bash 能够分配命令的多行输出:

L=`ls`
Run Code Online (Sandbox Code Playgroud)

这适用于交互式 shell 和脚本。但似乎无法在变量中捕获内置函数的输出:

L=`dirs -l -p`
Run Code Online (Sandbox Code Playgroud)

这在交互式 shell 中有效,但在脚本中只有第一行在变量中结束,可能是由于 bash 对内置函数的不同处理。

为什么会发生这种情况,我该如何做我需要的事情?

bash shell-builtin

7
推荐指数
1
解决办法
3014
查看次数

给出 username@hostname:pwd 的命令

我知道pwd给出当前工作目录,hostname给出当前主机并whoami给出当前用户。是否有一个unix命令可以给我输出

whoami@hostname:pwd
Run Code Online (Sandbox Code Playgroud)

以便我可以快速将输出粘贴到scp命令中?

shell hostname shell-builtin pwd whoami

7
推荐指数
1
解决办法
2万
查看次数

可执行文件的默认首选项优于同名的内置函数

我在玩一些可执行文件的名称,将它们放在一个文件夹中~/bin,该文件夹位于我的$PATH. 现在我想知道如何设置bash-3.2终端的首选项,以便它选择这些可执行文件而不是要执行的内置程序或别名。

例如,如果我将一个名为的脚本放在cd中的目录中$PATHcd则仍会执行内置的 for 。但是,如果我创建一个aliasfor cd,那么这个别名将被执行,覆盖内置函数。

$ type cd
cd is a shell builtin
Run Code Online (Sandbox Code Playgroud)

我的问题

  1. 有没有办法让可执行文件在$PATH默认情况下优先于内置的shell,只执行,例如cd,不必求助于使用命令builtincommand

  2. 我也对任何讨论这种偏好的官方参考资料感兴趣(不是我理解的推理)。

注意:这个问题纯粹是出于个人教育目的,我想知道为什么它会这样工作。

shell bash path shell-builtin

7
推荐指数
1
解决办法
480
查看次数

内置的 echo 命令和 /bin/echo 有什么区别?

我正在玩typewhich命令,我发现了一些奇怪的东西。

type或者返回的路径或者说,一个命令是一个bash内置的。 which要么返回内置插件,如路径或没有exittype

奇怪的是,type echo说 echo 是我预期的内置。

但是which echo将 /bin/echo 作为 echo 可执行文件的路径。对于任何其他内置命令,这似乎不会发生。

我想知道两者之间的区别是什么,Bash 选择在脚本和命令行中执行哪一个,以及这两个回声背后的故事是什么。

我的系统是 Ubuntu Desktop 12.04

shell bash executable echo shell-builtin

7
推荐指数
1
解决办法
9144
查看次数

检查命令是否内置于 ksh

如何检查命令是否是 的内置命令ksh

tcsh你可以使用where; 在zshbash您可以使用type -a; 在某些现代版本中,ksh您可以使用whence -av.

我想要做的是编写一个isbuiltin在任何版本ksh(包括ksh88和任何其他“旧”版本ksh)中工作的函数,其行为如下:

  1. 接受多个参数并检查每个参数是否内置
  2. 0如果所有给定的命令都是内置的,则返回(成功)
  3. 在第一个非内置命令处,停止检查,返回1(失败)并将消息打印到 stderr。

我已经有这样的工作功能zshbash使用上述命令。

这是我的目的ksh

isbuiltin() {
  if [[ "$#" -eq 0 ]]; then
    echo "Usage: isbuiltin cmd" >&2
    return 1
  fi
  for cmd in "$@"
  do
    if [[ $cmd = "builtin" ]]; then
      #Handle the …
Run Code Online (Sandbox Code Playgroud)

scripting ksh function shell-builtin

7
推荐指数
1
解决办法
1582
查看次数

bash shell中set命令的参数“i”是什么?

我通过键入 查找了 shell 内置命令集help set,简短的语法说明显示:

设置 [-abefhkmnptuvxBCHP] [-o 选项名称] [--] [arg ...]

帮助文档解释说,变量 $- 保存使用 set 命令设置的所有当前参数。

所以,我确实echo $-显示了 shell 的所有参数设置,我的是:

他BH

文档和上面的简短语法描述中提到了所有字母,但缺少一个:i选项。i setbash中的参数是什么意思?

bash shell-builtin set

7
推荐指数
1
解决办法
2750
查看次数

如何使用find执行内置shell命令?

由于工作环境的原因,我只能在 CentOS 上的 tcsh 中执行此操作。执行时find . -type f -executable -exec source '{}' \;,唯一的结果是find: 'source': No such file or directory针对每个适当的文件。不知道为什么这在 tcsh 中不起作用,因为它非常简单。我究竟做错了什么?非常感谢任何帮助。

tcsh find shell-builtin

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

为什么“where”命令的手册不可用

我最近遇到了 command where,它提供了 Linux 中可执行文件的实际路径。我知道which, whereis,locatefind,但没有where

我想知道这个命令是什么时候引入的,为什么它的手册不可用。这个 shell 命令是特定于 C Shell 的还是所有 shell 都有这个where命令?

man tcsh shell-builtin

6
推荐指数
3
解决办法
752
查看次数

Shell内置`printf`行限制?

/usr/bin/printfUTIL参数列表的长度被限制在外壳的最大命令行长度( getconf ARG_MAX,我的系统上会是2097152); 例子:

# try using a list that's way too long
/usr/bin/printf '%s\n' $(seq $(( $(getconf ARG_MAX) * 2 ))) | tail -1
Run Code Online (Sandbox Code Playgroud)

输出:

bash: /usr/bin/printf: Argument list too long
Run Code Online (Sandbox Code Playgroud)

今天我被告知shell内置 printf没有这个限制;测试:

printf '%s\n' $(seq $(( $(getconf ARG_MAX) * 2 ))) | tail -1
Run Code Online (Sandbox Code Playgroud)

输出:

4194304
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 略读man bash dash一下似乎并没有说明builtin 的 这种优势printf。凡它记录?

  2. 难道内置 printfS(例如 bash)在字符的参数列表最大长度,如果是这样,那是什么长度?

shell bash dash shell-builtin printf

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

IFS=',' /usr/bin/read vs IFS=',' 读

语境

$ bash --version
GNU bash, version 4.4.19(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.$ which read
/usr/bin/read

$ which read
/usr/bin/read
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么下面的示例 1 有效而示例 2 无效吗?

示例 1 - 裸读作品

这个:

declare data
data="pig,cow,horse,rattlesnake,"
declare -a my_array
IFS=',' read -r -a my_array <<< "$data"
for item in …
Run Code Online (Sandbox Code Playgroud)

shell bash which shell-builtin read

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

标签 统计

shell-builtin ×10

bash ×6

shell ×5

tcsh ×2

dash ×1

echo ×1

executable ×1

find ×1

function ×1

hostname ×1

ksh ×1

man ×1

path ×1

printf ×1

pwd ×1

read ×1

scripting ×1

set ×1

which ×1

whoami ×1