我仍在解决 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 脚本指南
看看let
,local
和export
。
看看它们有何不同,何时使用其中一种。
是的,您应该尝试将第二个重写为函数。
在学习过程中,更少的嵌套引用和管道将使编写函数和别名变得更容易。
稍后会出现单衬:)
答案2
尝试tar
不使用减号,即只是tar cfv
这是原来的、现在非标准的格式。