我正在编写一个脚本来重命名目录中的一堆文件。这就是我到目前为止所做的:
cd /$1/
if [ -z "$1" ]
then
cd $PWD
fi
所以我试图告诉脚本在参数中提供的路径中运行,或者如果没有提供参数来使用当前工作目录。
我在if部分尝试了很多变种:
if [ -z "$1" ]
then
cd $CWD
以及使用pwd和cwd的各种其他东西,但它只是不起作用。我一直没有这样的文件或目录。
请帮忙!
答案 0 :(得分:0)
通过使用变量插值,您可以在没有if的情况下执行此操作,如下所示:
$PWD
由于cd
总是绝对的,如果使用它,它前面有两个斜杠。但这对{{1}}无关紧要。
答案 1 :(得分:0)
所以我试图告诉脚本在参数中提供的路径中运行,或者如果没有提供参数来使用当前的工作目录。
由于您不知道提供的路径是绝对路径还是相对路径,因此在目标目录前面加斜杠可能会导致失败。如果您想使用参数扩展,我建议如下:
cd "${1:-.}"
这将更改为提供的路径,相对或绝对路径,并且不会在包含空格的名称上失败。如果未提供$1
(并解析为空或null),则变量将扩展为一个点,该点始终引用当前目录。
那就是说,我对if
没有问题。它们有助于检测错误。我认为以下内容可以实现您的目标:
if ! cd "${1:-.}"; then
echo "ERROR: couldn't change to '$1'" >&2
exit 1
fi
这是上面的cd
,但如果失败(例如由于权限问题或路径不存在),则脚本报告错误(对stderr,因此{{1} })并退出。否则(>&2
成功),脚本现在发现自己在新位置。
此外,我建议不要使用cd
,因为它是变量,并且可以被覆盖。例如:
$PWD
虽然[ghoti@pc ~]$ pwd
/home/ghoti
[ghoti@pc ~]$ PWD=/tmp
[ghoti@pc /tmp]$ echo $PWD
/tmp
[ghoti@pc /tmp]$ pwd
/home/ghoti
[ghoti@pc /tmp]$
变量被用于一堆事情,但我建议不要依赖它,除非你自己设置在脚本的顶部。
$PWD
另外,请记住引用您的变量。
PWD=$(pwd)