我有一个名为的脚本foo.R包含另一个脚本other.R,该脚本位于同一目录中:
#!/usr/bin/env Rscript
message("Hello")
source("other.R")
Run Code Online (Sandbox Code Playgroud)
但我想R发现other.R无论当前的工作目录是什么.
换句话说,foo.R需要知道自己的路径.我怎样才能做到这一点?
我有一个在OS X上具有用户执行权限的shell脚本,但是当我双击它时,它会在文本编辑器中打开.如何通过双击来运行它?
我用来创建一个tempfile,删除它并将其重新创建为一个目录:
tmpnam=`tempfile`
rm -f $tmpnam
mkdir "$tmpnam"
Run Code Online (Sandbox Code Playgroud)
问题是,另一个进程可能会得到一个相同的名称X,如果它在一个进程之后rm -f X和之前意外地执行tempfile mkdir X.
我正在尝试检查bash中是否存在符号链接.这是我尝试过的.
mda=/usr/mda
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
mda='/usr/mda'
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.如果'!' 被遗漏,它永远不会触发.而如果 '!' 在那里,它每次都会触发.
是否有命令在给定相对路径的情况下检索绝对路径?
例如,我希望$ line包含dir中每个文件的绝对路径 ./etc/
find ./ -type f | while read line; do
echo $line
done
Run Code Online (Sandbox Code Playgroud) 可能重复:
Bash脚本可以告诉它存储在哪个目录中吗?
在Windows命令脚本中,可以使用确定当前正在执行的脚本的目录路径%~dp0.例如:
@echo Running from %~dp0
Run Code Online (Sandbox Code Playgroud)
什么是BASH脚本中的等价物?
我试图获取OS X上当前运行脚本的绝对路径.
我看到很多回复readlink -f $0.但是,由于OS X readlink与BSD相同,它只是不起作用(它适用于GNU的版本).
有没有开箱即用的解决方案?
如何在"$0"和之间做出选择"${BASH_SOURCE[0]}"
GNU的这个描述对我没什么帮助.
BASH_SOURCE
An array variable whose members are the source filenames where the
corresponding shell function names in the FUNCNAME array variable are
defined. The shell function ${FUNCNAME[$i]} is defined in the file
${BASH_SOURCE[$i]} and called from ${BASH_SOURCE[$i+1]}
Run Code Online (Sandbox Code Playgroud) 鉴于:
some.txt
dir
|-cat.sh
Run Code Online (Sandbox Code Playgroud)
使用cat.sh的内容:
cat ../some.txt
Run Code Online (Sandbox Code Playgroud)
然后在./cat.sh内部运行dir工作正常,而不是./dir/cat.sh在同一级别上运行dir.我希望这是由于不同的工作目录.是否有一个容易的是../some.txt相对于位置的路径cat.sh?
我最近搜索了如何用Java获取应用程序的目录.我终于找到了答案,但我需要很长时间才能找到这样一个通用术语并不容易.我认为编译一个如何用多种语言实现这一目标的列表是一个好主意.
如果您(不)喜欢这个想法,请随意上/下投票,如果您愿意,请提供帮助.
包含可执行文件的目录和当前工作目录(由pwdUnix下给出)之间有一个很好的区别.我最初对前者感兴趣,但也可以随意发布确定后者的方法(澄清你的意思).