“/bin/sh‘ls -l -R’”与“/bin/sh -c ‘ls -l -R’”

发布于 2024-08-26 09:26:13 字数 97 浏览 10 评论 0原文

在 AIX 上运行时,以下两个命令有什么区别?

/bin/sh 'ls -l -R'
/bin/sh -c 'ls -l -R'

What is the difference between the following two commands, when run on AIX?

/bin/sh 'ls -l -R'
/bin/sh -c 'ls -l -R'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黑寡妇 2024-09-02 09:26:13

在 AIX 上,/bin/sh 默认为 Korn Shell (ksh)。

/bin/sh 'ls -l -R'

使用 ksh,这会运行 shell,告诉它执行名为 ls -l -R 的脚本(在当前目录或路径上)。如果找不到具有该名称的脚本,ksh 会将参数视为命令并运行它。

请注意,对于 bash,如果找不到脚本,则会导致错误。

/bin/sh -c 'ls -l -R'

这将启动 shell 的一个新实例,告诉它运行命令 ls -l -R 。

On AIX, /bin/sh defaults to the Korn Shell (ksh).

/bin/sh 'ls -l -R'

With ksh, this runs the shell, telling it to execute the script named ls -l -R (in the current directory or on the path). If no script can be found with this name, ksh treats the argument as a command and runs it.

Note that with bash, if the script cannot be found, this would result in an error.

/bin/sh -c 'ls -l -R'

This starts a new instance of the shell, telling it to run the command ls -l -R.

伪心 2024-09-02 09:26:13

(这是对 Phil Ross 的回应,但我需要格式化:)

使用我的 Linux 帐户之一:

sh> /bin/sh --version
GNU bash, version 3.2.39(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
sh>  /bin/sh 'ls -l -R'
/bin/sh: ls -l -R: No such file or directory
sh> /bin/sh ls
/bin/ls: /bin/ls: cannot execute binary file
sh> /bin/sh -c 'ls -l | head -1'
total 147296
sh> 

使用我的 Cygwin 安装之一:

sh> /bin/sh --version
GNU bash, version 3.2.49(23)-release (i686-pc-cygwin)
Copyright (C) 2007 Free Software Foundation, Inc.
sh> /bin/sh 'ls -l -R'
/bin/sh: ls -l -R: No such file or directory
sh> /bin/sh ls
/usr/bin/ls: /usr/bin/ls: cannot execute binary file
sh> /bin/sh -c 'ls -l | head -1'
total 264744
sh> 

您的 /bin/sh 可能会有所不同,但这似乎是适当的行为:

  • 向 /bin/sh 提供文件名参数会将其解释为 shell 脚本的文件名,并尝试执行它
  • -c 提供参数将将该参数解释为 /bin/sh命令行并尝试执行该命令

有关更多详细信息,请键入

man sh

(This is in response to Phil Ross, but I need formatting:)

Using one of my Linux accounts:

sh> /bin/sh --version
GNU bash, version 3.2.39(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
sh>  /bin/sh 'ls -l -R'
/bin/sh: ls -l -R: No such file or directory
sh> /bin/sh ls
/bin/ls: /bin/ls: cannot execute binary file
sh> /bin/sh -c 'ls -l | head -1'
total 147296
sh> 

Using one of my Cygwin installations:

sh> /bin/sh --version
GNU bash, version 3.2.49(23)-release (i686-pc-cygwin)
Copyright (C) 2007 Free Software Foundation, Inc.
sh> /bin/sh 'ls -l -R'
/bin/sh: ls -l -R: No such file or directory
sh> /bin/sh ls
/usr/bin/ls: /usr/bin/ls: cannot execute binary file
sh> /bin/sh -c 'ls -l | head -1'
total 264744
sh> 

Your /bin/sh may vary, but this appears to be the appropriate behaviour:

  • supplying a filename argument to /bin/sh will interpret it as the filename of a shell script and try to execute it
  • supplying -c with an argument will interpret that argument as a /bin/sh command line and try to execute that

For more details, type

man sh
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文