我运行以下命令来获取.sh文件的位置并将其存储在变量中:
startupfile=`find . -name "startup.sh"`
以上结果是:
./server1/bin/startup.sh
下一步是运行startup.sh
文件。
当我尝试sh $startupfile
时,它无法运行服务器。
有没有办法忽略位置值中的./
?任何其他方式来运行startup.sh脚本。
答案 0 :(得分:0)
您应该使用:
startupfile=$(find . -name "startup.sh")
在BASH中不太优选:
startupfile=`find . -name "startup.sh"`
更新::发布问题编辑:
为避免以完整路径运行脚本,您可以在PATH变量中放置startup.sh
的路径,因此~/.bashrc
中的内容如此:
export PATH=$PATH:~/server1/binripts
然后你可以运行:
startup.sh
从您的主目录的任何位置。
答案 1 :(得分:0)
./
无害。
你还有另外一个问题。您是否在两个命令之间更改了目录? “脚本”实际上不是一个有效的脚本吗?
答案 2 :(得分:0)
./
不是问题,它只是当前目录的一条(多余的)路径:./file
和././././file
都是file
的有效路径当前目录,前导./
的数量没有任何区别。
查看原始问题的来源(在编辑之前为了更好的格式化),命令周围有单引号'
:'sh $startupfile'
。如果你在实际命令中也有那些,那就是你的问题;命令应该是:sh "$startupfile"
。
除此之外,很难说出问题可能是什么。检查echo "$startupfile"
是否显示正确的路径,仅显示正确的路径。如果是,sh ./server1/bin/startup.sh
是否有效?如果没有,那么错误是什么?
答案 3 :(得分:0)
回答您的具体问题:
有没有办法忽略位置值中的./?
有两种方法可以剥离主要目录名称。最有效但最不明确的是:
startupfile=${startupfile##*/}
删除左边最长的字符串'/'。第二种方式更为明显,但涉及创建子进程:
startupfile=$(basename "$startupfile")
运行startup.sh脚本的任何其他方式。
是的,您可以使用PATH
环境变量,正如@anubhava所说。我唯一要补充的是你需要对脚本执行访问权限; chmod u+x "$startupfile"
。
但是,名称“startupfile”的含义是它正在进行某种初始化,在这种情况下,您可能需要使用source
在相同的进程中运行它或.
(点)命令:
source "$startupfile"
您可能仍需要文件名中的路径,或更新PATH
。