bash脚本更改目录并使用参数执行命令

fro*_*odo 8 bash

我正在尝试执行以下任务:编写一个名为shell的脚本changedir,该脚本采用目录名,命令名和(可选)一些其他参数.然后,脚本将更改为指示的目录,并执行使用提供的参数指示的命令.

这是一个例子:

$ sh changedir /etc ls -al
Run Code Online (Sandbox Code Playgroud)

这应该更改为/etc目录并运行命令ls -al.

到目前为止,我有:

#!/bin/sh
directory=$1; shift
command=$1; shift
args=$1; shift
cd $directory
$command
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的内容,就像sh changedir /etc ls它更改并列出目录.但是,如果我添加参数,ls它不起作用.我需要做些什么来纠正它?

CB *_*ley 17

你似乎忽略了命令的其余参数.

如果我理解正确,你需要做这样的事情:

#!/bin/sh
cd "$1"         # change to directory specified by arg 1
shift           # drop arg 1
cmd="$1"        # grab command from next argument
shift           # drop next argument
"$cmd" "$@"     # expand remaining arguments, retaining original word separations
Run Code Online (Sandbox Code Playgroud)

一个更简单,更安全的变体是:

#!/bin/sh
cd "$1" && shift && "$@"
Run Code Online (Sandbox Code Playgroud)