如何包装可执行命令以便它们在别名或函数中工作?

如何包装可执行命令以便它们在别名或函数中工作?

我仍在解决 shell 脚本的怪癖,但我觉得我对它越来越适应了。

我一直在尝试创建一个别名来生成一个我必须经常创建的 tar 文件,但它总是给我带来 tar 错误。就像测试一样,我尝试创建一个简单的包装器,但它也不起作用:

function eztar(){

    if [ -d $1 ]
    then
        export QTAR="$1.tar";
        tar –cvf ${QTAR} "$1/";

    else
        echo "Missing directory name";
    fi

}

>eztar mydir
tar: invalid option -- ''
Try `tar --help' or `tar --usage' for more information.

在这种情况下 -cvf 选项是否会以某种方式被消耗掉?

无论如何,这是另一件事。

我遇到了 Apache 内存不足的问题。我发现太多失败的关闭导致信号量已满,因此为了解决这个问题,我发现了一个我喜欢的脚本,并尝试让它以别名运行。 (顺便说一句,有更好的方法来做到这一点吗?)我认为我需要将其放入函数中,因为当我检查别名时,for 循环已扩展到当前信号量列表,这不是我想要的。

alias semfix='eval "for i in `ipcs -s # grep apache # awk '{print $2}'` ; do ipcrm -s $i; done";'

我正在学习我不能只用 Unix 上的所有内容创建别名或包装函数!

答案1

除了拼写错误之外,您的第一个函数没有任何问题。
前面的字符cvf不是减号。
你使用的是标准吗?美式101键键盘?

把它全部去掉(在大多数 tar 开关上减号是可选的),这个函数就可以正常工作了。
否则,您可以使用适当的方法修复它-cvf

此外,导出不需要export
导致环境变量比您在这样的函数中需要的持久性更高。

我建议你阅读高级 Bash 脚本指南
看看letlocalexport
看看它们有何不同,何时使用其中一种。

是的,您应该尝试将第二个重写为函数。
在学习过程中,更少的嵌套引用和管道将使编写函数和别名变得更容易。

稍后会出现单衬:)

答案2

尝试tar不使用减号,即只是tar cfv

这是原来的、现在非标准的格式。

相关内容