首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在启动rinari控制台之前,如何获取此shell脚本的源代码?

在启动rinari控制台之前,如何获取此shell脚本的源代码?
EN

Stack Overflow用户
提问于 2012-08-03 18:51:47
回答 4查看 243关注 0票数 0

在我的项目中,我们有一个为某些环境变量设置默认值的shell脚本。当我尝试运行rinari-console时,我收到一个错误,因为该脚本尚未获得源代码。有没有办法确保rinari提供它,这样当rails控制台启动时,所有的变量都有所需的值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-07 00:15:44

好吧,关于这个问题,我已经想得更仔细了。我提出了两种可能的解决方案:

通过包装器在外部Emacs

这个解决方案有点笨拙,但它应该是有效的。

你可以创建一个包装器脚本,例如'emacs-wrapper.sh':

代码语言:javascript
复制
#!/bin/sh
set -a
. YOUR-SCRIPT.sh
emacs

如果您启动./ Emacs -wrapper.sh,那么您的-SCRIPT.sh将是源文件,然后Emacs将启动。通过这种方式,Emacs也可以看到相同的环境。在我的机器上测试这种方法,我能够(getenv "var")在您的-SCRIPT.sh中定义的所有变量

更好:在Emcas中通过shell-command

这是一个IMO更好的解决方案,因为它完全运行在Emacs中。调用shell-command- to -string来获取您的-SCRIPT.sh。最后,它还会转储该进程的环境。这随后被添加到Emacs自己的process-environment中:

代码语言:javascript
复制
;; defadvice is optional, you could also just call source-script directly
(defadvice rinari-console (before init-environment activate)
   (source-script "/PATH/TO/YOUR-SCRIPT.sh"))

(defun source-script (script)
   (let ((env (extract-environment script)))
       (mapc 'import-environment-variable (split-string env "\n"))))

(defun extract-environment (script)
   (shell-command-to-string (format "set -a; . %s > /dev/null 2>&1; env" script)))

(defun import-environment-variable (variable-assignment)
   (when (not (or (null variable-assignment) (string= "" variable-assignment)))
      (let* ((key-value-pair (split-string variable-assignment "="))
             (key (car key-value-pair))
             (value (cadr key-value-pair)))
        (setenv key value))))

我也在我的机器上验证了这种方法。脚本中定义的所有变量也在Emacs中定义。

票数 2
EN

Stack Overflow用户

发布于 2012-08-07 03:52:17

我设法用包装器做了你想要的事情。假设您在~/test中创建了一个rails项目。Rinari将尝试通过执行命令~/test/script/console来启动irb。我创建了一个名为~/test/script/console.sh的包装器

代码语言:javascript
复制
#!/bin/sh

. ~/test/script/env.sh
~/test/script/console

包装器生成包含环境变量的脚本,然后执行常规命令。

文件~/test/script/env.sh包含:

代码语言:javascript
复制
export TEST=test

现在,要使用该包装器,请使用前缀参数C-u M-x rinari-mode调用rinari-mode,并在建议的命令末尾添加一个.sh。将设置环境变量TEST

然后,可以创建一个自动添加.sh的宏。

票数 1
EN

Stack Overflow用户

发布于 2012-08-06 15:52:30

我不使用rinari,所以可能有更好的方法来完成它,但原则上,您可以这样做,以便在运行实际的rinari console命令之前运行"YOUR-SCRIPT.sh“。

代码语言:javascript
复制
(defadvice rinari-console (before run-my-script activate)
  (shell-command "YOUR-SCRIPT.sh"))

另请参阅:http://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11794276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档