〜不扩展到phantomjs脚本中的主目录

时间:2015-07-04 21:25:29

标签: bash phantomjs launchd

我有两个脚本。第一个是基本的bash脚本,名为tfile:

#!/bin/bash
logger -s "About to try running phantomjs"
logger -s "Current User: "$USER
VAR=$(phantomjs ~/test/phtest.js)
logger -s $VAR
logger -s "Finished running phantomjs"

第二个是phantomjs脚本,phtest.js:

var fs = require('fs');
console.log("It worked!" + fs.workingDirectory);
fs.write("~/test/testlog.txt","It worked!","w");
phantom.exit();

如果我从命令行运行脚本tfile,一切正常。它将用户记录为我,phtest将工作目录输出为/ Users / myname / test。

现在,我在〜/ Library / LaunchAgents中设置了一个launchd文件,只要更改了某个文件,它就会运行tfile。当我更改该文件时,tfile的前两行运行,给我与之前完全相同的输出,phantomjs进程启动,但随后它挂起。如果我终止进程,我会得到输出:

It worked! / Unable to open file '~/test/testlog.txt' :78 in open :135 in write

我认为这意味着phantomjs正在/位置运行,而不是像以前那样从我的主目录运行。

如果我硬编码我的主目录而不是在phtest中使用〜,那么它不再挂起,但是phantomjs的输出仍然是/.

所以我的问题是:为什么〜在tfile中扩展,无论我如何运行它,但不是在phtest中?我知道〜是shell的一个特性,而不是文件系统,但是因为在两种情况下都是从bash脚本调用phtest,我不确定为什么扩展在一个实例中发生,而不是另一个实例

1 个答案:

答案 0 :(得分:1)

不同之处在于~不会在双引号内扩展。它被视为引号内的文字值,而不是扩展到主目录。

您可以使用$HOME代替~

POSIX description州:

  

用双引号(“”)括起字符应保留   双引号内所有字符的字面值,用   字符反引号,美元符号和反斜杠的例外情况。

~位于双引号内扩展的字符列表中。您可以轻松地进行测试:

$cd ~
$touch test_file
$ls test_file 
test_file
$ls "~/test_file"
ls: cannot access ~/test_file: No such file or directory
$ls ~/test_file
/home/usr/test_file
$