Questions tagged «function»

有关在Unix和Linux环境中使用功能的问题(主要但并非唯一地是shell脚本)。有关使用Python,Perl,Ruby等进行编程的问题,应在Stack Overflow上提出。

14
在Bash中,何时使用别名,何时编写脚本以及何时编写函数?
我花了将近10年的Linux使用时间问这个问题。这都是反复试验和随机的深夜互联网冲浪。 但是人们不需要10年的时间。如果我刚开始使用Linux,那么我想知道:什么时候使用别名,什么时候编写脚本,什么时候编写函数? 在涉及别名的地方,我将别名用于不带参数的非常简单的操作。 alias houston='cd /home/username/.scripts/' 这似乎很明显。但是有些人这样做: alias command="bash bashscriptname" (并将其添加到.bashrc文件中) 有充分的理由这样做吗?我真的很努力,但是我真的无法想到在任何情况下都需要这样做。因此,如果存在极端情况会有所作为,请在下面回答。 因为那是我要在PATH中放入内容的地方chmod +x,这是经过多年Linux反复试验之后出现的另一件事。 这将我带入下一个主题。举例来说,我添加了一个隐藏的文件夹(.scripts/只需添加一行到我的)主目录到我的PATH .bashrc(PATH=$PATH:/home/username/.scripts/),所以任何可执行文件中有自动的自动填充。 如果需要的话。 不过,我真的不需要那个吗?我只会将其用于非Shell语言,例如Python。 如果是外壳,我可以在相同的内部编写一个函数.bashrc: funcname () { somecommand -someARGS "$@" } 正如我所说,我通过反复试验发现了很多这样的问题。我只有在计算机死机时才真正看到功能的美,而当我周围的人不使用计算机时,我就不得不使用它们。 最终,我没有将整个脚本目录从一个计算机移动到另一个计算机,而是最终只用我自己的其他人替换了.bashrc,因为它们甚至从未进行任何修改。 但是我想念什么吗? 那么,您将如何告诉Linux新手何时使用别名,何时编写脚本以及何时编写函数? 如果不是很明显,我假设回答这个问题的人将使用所有三个选项。如果您仅使用别名,或仅使用脚本,或仅使用函数,或者仅使用别名和脚本,或者别名和函数或脚本和函数,则此问题并不是针对您的。


5
“ foo(){}函数”和“ foo(){}”之间的区别
我可以bash使用或省略function关键字来定义函数。有什么区别吗? #!/bin/bash function foo() { echo "foo" } bar() { echo "bar" } foo bar 调用函数foo和bar成功都没有,我看不出有什么区别。所以我想知道这是否只是为了提高可读性,还是我缺少某些东西... BTW在其他shell中dash(例如/bin/sh,dash在debian / ubuntu中被符号链接)在使用function关键字时失败。
96 bash  shell  function  posix 

8
我可以在bash中“导出”功能吗?
source some_file some_file: doit () { echo doit $1 } export TEST=true 如果我输入some_file,则函数“ doit ”和变量TEST在命令行上可用。但是运行此脚本: script.sh: #/bin/sh echo $TEST doit test2 将返回TEST的值,但将生成有关未知函数“ doit”的错误。 我也可以“导出”该功能,还是必须在script.sh中提供some_file才能在其中使用该功能?
80 bash  function 

12
为什么要在函数中编写整个bash脚本?
在工作中,我经常编写bash脚本。我的主管建议将整个脚本分解为功能,类似于以下示例: #!/bin/bash # Configure variables declare_variables() { noun=geese count=three } # Announce something i_am_foo() { echo "I am foo" sleep 0.5 echo "hear me roar!" } # Tell a joke walk_into_bar() { echo "So these ${count} ${noun} walk into a bar..." } # Emulate a pendulum clock for a bit …




4
Shell函数中局部变量的范围
看完24.2。局部变量,我认为var使用关键字声明变量local意味着var仅在函数的花括号分隔的代码块中可以访问的值。 但是,在运行以下示例之后,我发现var也可以从该代码块调用的函数中进行访问,读取和写入-即,即使var被声明local为outerFunc,innerFunc也仍然可以读取和更改其值。 Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" 输出: global: before outerFunc: [var:] …

3
函数是否在Bash中作为子流程运行?
在Advanced Bash-Scripting Guide中,在示例27-4(从底部开始的第7行)中,我已阅读以下内容: 函数作为子流程运行。 我在Bash中进行了测试,似乎以上陈述是错误的。 在本网站Bash Man和我的搜索引擎上进行的搜索没有任何帮助。 您有答案并想解释吗?
28 bash  process  function 


4
在find -exec调用中执行用户定义的函数
我在Solaris 10上,并且已经使用ksh(88),bash(3.00)和zsh(4.2.1)测试了以下内容。 以下代码不会产生任何结果: function foo { echo "Hello World" } find somedir -exec foo \; 这一发现不匹配多个文件(如更换-exec ...用-print),并从外面叫时功能完美的作品find调用。 这是该man find页面所说的-exec: -exec命令如果执行的命令返回a,则为true。 零值作为退出状态。结尾 命令必须由逃逸者标点 分号(;)。命令参数{}是 替换为当前路径名。如果 -exec的最后一个参数是{},而您 指定+而不是分号(;), 该命令被调用的次数更少, {}替换为路径名组。如果 该命令的任何调用都会返回一个 非零值作为退出状态,找到 返回非零退出状态。 我可能会逃脱做这样的事情: for f in $(find somedir); do foo done 但是我担心要处理字段分隔符问题。 是否可以从调用中调用Shell函数(在同一脚本中定义,让我们不用担心范围问题)find ... -exec ...? 我尝试了两者/usr/bin/find,/bin/find并得到了相同的结果。

2
bash的export -f的zsh等效项是什么
因此我开始使用zsh。我喜欢它。看起来很酷,很漂亮,并且当前的工作目录和实际的命令行位于不同的行是一个很好的事实,但是与此同时,我注意到这zsh可能会比慢一些bash,尤其是在将文本打印到屏幕。 我最喜欢的事情是,它zsh与我在中定义的所有功能“向后兼容” .bashrc。 虽然有一个抱怨。这些功能都可以完美地工作,但是我无法弄清楚导出系统是如何工作的。 我.bashrc导出了其中一些功能,以便可以在其他地方使用它们,例如在脚本和外部程序中使用export -f。 在zsh中,似乎甚至没有谈论导出。它是自动加载吗?这两件事是一样的吗?我很难解决这个问题。

6
如何在外壳中向.bash_profile / .profile / bashrc添加功能?
我有一个将纪元时间转换为日期的函数。这是定义 date1(){ date -d @$1 } 我希望能够写: $ date1 xxxyyy 其中xxxyyy是我传递给函数的参数,因此我可以获得相应的日期。我明白我必须将它添加在任.bash_profile,.profile或.bashrc然后它来源: $ source file 但是,我不确定要放入哪个文件。目前,我在中.profile。但是要运行它,我必须source .profile每次都做。 理想情况下,当计算机像环境变量一样启动时,它应该使它可用。
24 bash  shell  function  profile 

6
使用Sudo执行Bash脚本功能
我有一个脚本,可以执行许多不同的操作,其中大多数不需要任何特殊特权。但是,我包含在一个函数中的一个特定部分需要root特权。 我不希望整个脚本都以root身份运行,我希望能够以root权限从脚本中调用此函数。如有必要,提示输入密码不是问题,因为无论如何它都是交互式的。但是,当我尝试使用时sudo functionx,我得到: sudo: functionx: command not found 如我所料,export没什么不同。我希望能够直接在脚本中执行该功能,而不是出于多种原因而将其分解并作为单独的脚本执行。 有什么办法可以使我的函数对sudo可见,而无需将其解压缩,找到合适的目录,然后将其作为独立脚本执行? 该函数本身大约一页长,包含多个字符串,其中一些用双引号引起来,而某些用单引号引起来。它还取决于主脚本中其他位置定义的菜单功能。 我只希望拥有sudo ANY的人能够运行该功能,因为它的功能之一就是更改密码。
22 bash  sudo  function 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.