【问题标题】:in Linux "which source" returns nothing?在 Linux 中“哪个源”什么都不返回?
【发布时间】:2013-07-05 11:11:01
【问题描述】:

我想在c 中使用exec() source 一些shell 脚本。

source 是什么?那是 binary executable 还是 shell script ?我在哪里可以找到 linux 文件系统?

我跑了

charan@PC-113:~$ which source 

charan@PC-113:~$

【问题讨论】:

  • source 是 bash 中的运算符。很像>ss64.com/bash/source.html
  • 你不能真正从 exec 函数中得到 source ......(你可以 exec 一些 /bin/shsource)。 exec 不会返回(成功时),或者您将在 fork-ed 子进程中运行它,并且源命令不会影响您的程序。你应该解释你真正想做的事情以及为什么。

标签: c linux shell system-calls


【解决方案1】:

这是一个内置的shell命令,如cdexitpwd...:

$ enable -p | grep source
enable source

请注意,enable -p 显示所有内置函数。更多信息在enable Man page

更新

刚刚在 SuperUser 中看到一个非常有趣的帖子:What does source do?

$ type source
source is a shell builtin

更新 2 - Tony D 发表评论

@SIGSEGV: 有时命令可以作为外部实现 (非 shell)可执行文件,但某些 shell 仍希望提供 他们自己的实现......可能有不同的行为, 可能只是为了让它更快。 test 和 pwd 就是这样的例子。 例如,shell 可以使用 getcwd(),但如果它运行单独的可执行文件而不更改 该可执行文件的当前目录,并且可执行文件运行 getcwd() - 它仍然有效。

【讨论】:

  • 不知道启用,+1。
  • 谢谢!我刚刚发现它two days ago :)
  • 非常感谢您的回答,但是像testpwd 这样的一些命令在/usr/bin 中有可执行文件,它们也在enable 输出中
  • 好点,@SIGSEGV,我刚刚在Super User 中发现了一个相关的帖子,它也可能有所帮助:superuser.com/questions/46139/what-does-source-do
  • @SIGSEGV:有时命令可以作为外部(非 shell)可执行文件实现,但一些 shell 仍然希望提供自己的实现......可能具有不同的行为,可能只是为了它更快。 testpwd 就是这样的例子。例如,shell 可以使用getcwd() 获取其当前工作目录,但如果它运行单独的可执行文件而不更改该可执行文件的当前目录,并且可执行文件运行getcwd() - 它仍然有效。
【解决方案2】:

您可以将source 视为Linux 中的. 运算符。

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 2018-09-10
    • 2017-02-14
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多