我正在尝试执行以下任务:编写一个名为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)