开发者

Quick bash script to run a script in a specified folder?

I am attempting to write a bash script that changes 开发者_如何学Godirectory and then runs an existing script in the new working directory.

This is what I have so far:

#!/bin/bash
cd /path/to/a/folder
./scriptname

scriptname is an executable file that exists in /path/to/a/folder - and (needless to say), I do have permission to run that script.

However, when I run this mind numbingly simple script (above), I get the response:

scriptname: No such file or directory

What am I missing?! the commands work as expected when entered at the CLI, so I am at a loss to explain the error message. How do I fix this?


Looking at your script makes me think that the script you want to launch a script which is locate in the initial directory. Since you change you directory before executing it won't work.

I suggest the following modified script:

#!/bin/bash
SCRIPT_DIR=$PWD
cd /path/to/a/folder
$SCRIPT_DIR/scriptname


cd /path/to/a/folder
pwd
ls
./scriptname

which'll show you what it thinks it's doing.


I usually have something like this in my useful script directory:

#!/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

Usage:

$ 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 '/'


One source of such error messages under those conditions is a broken symlink.

However, you say the script works when run from the command line. I would also check to see whether the directory is a symlink that's doing something other than what you expect.

Does it work if you call it in your script with the full path instead of using cd?

#!/bin/bash
/path/to/a/folder/scriptname

What about when called that way from the command line?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜