- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下 shell 函数定义卡在 Cygwin 的 bash 控制台 (RHEL/Ubuntu) 中,当它被调用时它只是退出终端。
$ function ls { ls; }
$ ls
为什么会出现这种行为?
最佳答案
您定义的 ls
命令正在递归调用 自身 而不是 previous ls
命令。
如果你想从你重新定义的调用实际的 ls
,你可以简单地使用 which
来获得完整的路径名,比如重新定义 ls
给你长格式:
function ls { $(which ls) -l; }
这实际上等同于:
function ls { /bin/ls -l; }
这不会给您的解决方案递归带来的问题。
另一种选择是使用
function ls { command ls -l; }
command
将抑制 shell 函数查找并且只允许路径上的内置函数或程序。
内置文件(如 cd
)的处理方式与程序略有不同,因为它们实际上并不位于文件系统中。在这种情况下,您可以使用 builtin
而不是 which
来调用内置版本。
如果您想根据可能已经 是函数的东西来定义函数,那就有点棘手了。您可以使用 declare -f
获取当前定义,然后对其进行操作以创建一个新定义。
下面是一个这样的例子(虽然是人为的)。假设您声明了一个显示所有文本文件的函数:
pax> showtxt()
...> {
...> ls *.txt
...> }
你现在想给它一个漂亮的标题。使用declare -f showtxt
,你可以看到它的定义:
pax> declare -f showtxt
showtxt ()
{
ls *.txt
}
运行可能会产生以下输出:
pax> showtxt
passwords.txt p0rnsites.txt results.txt
现在假设您想更改它以给它一个标题。您可以捕获 declare -f
的输出并修改它以制作一个脚本,该脚本将重新定义函数:
pax> declare -f showtxt | awk '$1=="ls"{print "echo Text files:"}{print}' >tmp.sh
pax> cat tmp.sh
showtxt ()
{
echo Text files:
ls *.txt
}
你可以看到你现在有一个修改过的函数定义,当运行时,它将替换函数:
pax> . ./tmp.sh
pax> declare -f showtxt
showtxt ()
{
echo Text files:;
ls *.txt
}
而且,当您运行新函数时,它的行为发生了变化:
pax> showtxt
Text files:
passwords.txt p0rnsites.txt results.txt
现在这个人为的示例不是有用的,因为您可能已经自己输入了。当原始功能更复杂或您要对其进行的更改多种多样时,这会派上用场。
关于bash - 为什么函数 ls { ls; } 卡在那里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21569835/
如果我执行 ls -la,我会得到如下结果 total 16 drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . drwx------+ 23 rocks
我找到了一些Linux文件,当我键入ls -lah时,它将输出以下权限格式: ... drwxr-xr-x. 2 root root ... -rw-rw-r--. 1 root r
我正在尝试从 python 执行 ls -l 来检查文件的最后修改日期。 os.listdir 不显示长列表格式。subprocess.call 显示格式,但实际上打印它,并返回 0。我希望能够将其放
以下 shell 函数定义卡在 Cygwin 的 bash 控制台 (RHEL/Ubuntu) 中,当它被调用时它只是退出终端。 $ function ls { ls; } $ ls 为什么会出现这种
为什么这两个命令的输出不同: ls | cat ls 第一个似乎用换行符分隔文件名。 这也适用于命令 suc 有 ls > outfile 和类似的东西。 我使用的是 Mac OSX,如果这有什么不同
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我使用 eshell-parse-command 'ls -l' 得到了这个: (progn (eshell-trap-errors (eshell-named-command "l
如何使用 RegExp 在 JavaScript 中实现类似于 alias 的功能? ALIAS = [{pattern: /^ls[$ ]/, replace: 'ls --color '}] s
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在编写一个 shell 程序,当将值传递给 execv() 时,我需要一个指向程序名称的 char 指针(即 ls),我需要一个指向参数的 char 指针数组的指针。 我会检查并解析用户的输入,如
我对使用 bash 编写脚本还比较陌生,并编写了以下脚本: # Set variables logfile=/tmp/peter/logfile.log indir=/mls/indir/IG/ te
所以基本上我有一个任务要使用 strace 进行分析,ls 命令需要哪些系统调用才能提供与 ls -l 相同的信息。 但是对于 ls -l 命令有许多奇怪的系统调用,例如 stat 64 被调用时使用
我在 ubuntu 的文件夹中有一个文件夹列表。IE。/mnt/source/customcode/files/brands/下 root@a919794ec280:/mnt/source/custo
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
#include #include #include #include #include int flag; void catch (int sig) { if (sig == SIGI
我使用 Process 来调用 shell(zsh),我想 cd ~ 或其他一些目录,例如在 shell 中定义的 cd $PROJ_ROOT。但似乎无法处理这些 token 。如何解决这个问题? s
我在我的 Centos5 机器上运行了这个: ls -al & ; ls -al 我期待它在后台运行 ls -al,同时在前台运行 ls -al,并演示终端的输出是如何被破坏的通过这样做。 但是,我得
当我在 PowerShell 中使用 Get-ChildItem 时,我会得到目录中以行格式设置的项目列表。该列表经常会超出屏幕,如果我想查看列表的其余部分或以前的命令和输出,则迫使我向上滚动。我想为
我试图用所有必要的参数绕过调用 JNIEnv->DefineClass 方法,但当我尝试从 java 调用该方法时,它总是返回 java.lang.NoClassDefFoundError: ls.H
我是一名优秀的程序员,十分优秀!