我正在尝试编写一个更改目录的bash脚本,然后在新的工作目录中运行现有脚本。
这是我到目前为止所做的:
#!/bin/bash
cd /path/to/a/folder
./scriptname
scriptname是存在于/ path / to / a / folder中的可执行文件 - 并且(不用说),我有权运行该脚本。
然而,当我运行这个令人难以置信的简单脚本(上图)时,我得到了回复:
scriptname:没有这样的文件或目录
我缺少什么?!在CLI中输入时,命令按预期工作,因此我无法解释错误消息。我该如何解决这个问题?
答案 0 :(得分:4)
查看您的脚本让我觉得您想要启动一个位于初始目录中的脚本的脚本。由于您在执行前更改了目录,因此无效。
我建议修改以下脚本:
#!/bin/bash
SCRIPT_DIR=$PWD
cd /path/to/a/folder
$SCRIPT_DIR/scriptname
答案 1 :(得分:3)
cd /path/to/a/folder
pwd
ls
./scriptname
它会告诉你它认为它正在做什么。
答案 2 :(得分:1)
我的有用脚本目录中通常有这样的东西:
#!/bin/bash
# Provide usage information if not arguments were supplied
if [[ "$#" -le 0 ]]; then
echo "Usage: $0 <executable> [<argument>...]" >&2
exit 1
fi
# Get the executable by removing the last slash and anything before it
X="${1##*/}"
# Get the directory by removing the executable name
D="${1%$X}"
# Check if the directory exists
if [[ -d "$D" ]]; then
# If it does, cd into it
cd "$D"
else
if [[ "$D" ]]; then
# Complain if a directory was specified, but does not exist
echo "Directory '$D' does not exist" >&2
exit 1
fi
fi
# Check if the executable is, well, executable
if [[ -x "$X" ]]; then
# Run the executable in its directory with the supplied arguments
exec ./"$X" "${@:2}"
else
# Complain if the executable is not a valid
echo "Executable '$X' does not exist in '$D'" >&2
exit 1
fi
用法:
$ cdexec
Usage: /home/archon/bin/cdexec <executable> [<argument>...]
$ cdexec /bin/ls ls
ls
$ cdexec /bin/xxx/ls ls
Directory '/bin/xxx/' does not exist
$ cdexec /ls ls
Executable 'ls' does not exist in '/'
答案 3 :(得分:0)
在这些条件下,此类错误消息的一个来源是符号链接损坏。
但是,您说从命令行运行时脚本可以正常工作。我还要检查目录是否是一个符合你期望的符号链接的符号链接。
如果您使用完整路径在脚本中调用它而不是使用cd?
,它是否有效#!/bin/bash
/path/to/a/folder/scriptname
从命令行调用那个方法怎么样?