我正在尝试执行以下任务:
编写一个名为changedir
的shell脚本
获取目录名称,命令名称和(可选)一些其他参数。
然后该脚本将更改为指示的目录,并且
执行用提供的参数指示的命令。
这是一个例子:
$ sh changedir /etc ls -al
这应该更改为/etc
目录并运行命令ls -al
。
到目前为止,我有:
#!/bin/sh
directory=$1; shift
command=$1; shift
args=$1; shift
cd $directory
$command
如果我运行上面的sh changedir /etc ls
,它会更改并列出目录。但是,如果我向ls
添加参数,它就不起作用。我需要做些什么来纠正它?
答案 0 :(得分: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
更简单,更安全的变体是:
#!/bin/sh
cd "$1" && shift && "$@"
答案 1 :(得分:-1)
由于命令可能有多个参数,我建议使用引号。像这样:
sh changedir.sh /etc "ls -lsah"
如果您忽略了'shift',您的代码将更具可读性:
directory=$1;
command=$2;
cd $directory
$command
或只是
cd DIRECTORY_HERE; COMMAND_WITH_ARGS_HERE