Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

5
区分运行和bash shell脚本中的源代码?
我在这里要问的是非常非传统/非常规/危险的,或者我的Google-fu技能根本无法解决... 在bashshell脚本中,是否有任何简单的方法可以判断它是从另一个shell脚本获取资源,还是由它自己运行?换句话说,是否可以区分以下两种行为? # from another shell script source myScript.sh # from command prompt, or another shell script ./myScript.sh 我正在考虑做的是创建一个类似于实用程序的shell脚本,其中包含bash可以在获取源代码后使用的功能。当这个脚本自己运行时,我也会希望它根据定义的功能执行某些操作。这个shell脚本是否可以使用某种环境变量,例如 some_function() { # ... } if [ -z "$IS_SOURCED" ]; then some_function; fi 最好是,我正在寻找一种不需要调用者脚本设置任何标志变量的解决方案。 编辑:我知道在源代码和运行脚本之间的区别,我试图在这里找到什么,才能分辨出正在使用的脚本的区别(两种方式)。



3
在bash中的条件语句中使用grep
我对使用bash编写脚本还是很陌生,只是尝试一些我认为是基本的事情。我想运行从运行Ubuntu 14.04的服务器更新的DDNS。 从dnsimple借用一些代码,这是我到目前为止所拥有的: #!/bin/bash LOGIN="email" TOKEN="token" DOMAIN_ID="domain" RECORD_ID="record" IP=`curl -s http://icanhazip.com/` OUTPUT=` curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-DNSimple-Domain-Token: $TOKEN" \ -X "PUT" \ -i "https://api.dnsimple.com/v1/domains/$DOMAIN_ID/records/$RECORD_ID" \ -d "{\"record\":{\"content\":\"$IP\"}}"` if ! echo "$OUTPUT" | grep -q "(Status:\s200)"; then echo "match" $(echo "$OUTPUT" | grep -oP '(?<="message":")(.[^"]*)' …

2
为什么此Shell脚本中包含反斜杠?
在conda.sh脚本的副本中,我看到以下几行: if [ -n "${_CE_CONDA}" ] && [ -n "${WINDIR+x}" ]; then SYSP=$(\dirname "${CONDA_EXE}") else SYSP=$(\dirname "${CONDA_EXE}") SYSP=$(\dirname "${SYSP}") fi 我很好奇,为什么在前面的一个反斜杠d中dirname。我认为没有必要。反斜杠的这种用法也出现在源文件的其他位置。我有没有这样做的理由?


2
是否有设置目标应用程序第零个参数的POSIX方法?
在中,bash您还可以使用exec -a和中的zsh选项来设置ARGV0执行带有特定第零个参数的程序,但是还有POSIX方法吗? 如该注释中所建议,您可以创建一个(临时)符号链接来实现此目的,但是通过这种方式,我无法将新的第零个参数值设置为真正的任意值,例如具有某个绝对路径的命令。那么还有其他解决方案吗?

2
硬链接算作普通文件吗?
我想知道是否有一种方法可以注册该单词,但是由于大多数现代搜索引擎无法使用长度超过5个单词的短语,因此在此方面我需要一些帮助。 我想知道这是因为我正在制作一个bash脚本,该脚本必须将文件注册为某些类型并做出相应的决定。从技术上讲,这对我的项目并不重要,但我很好奇。 另外,如果它们被认为是常规文件,那么有没有办法检查这些文件是否被硬链接而不需要解析ls -i?有没有一种方法可以检查某些任意文件X是否在不使用find -i命令的情况下硬链接到其他任意文件Y ?



3
发生错误时,如何在Bash中找到行号?
您如何在Bash中找到发生错误的行号? 例 我用行号创建以下简单脚本,以解释我们需要什么。该脚本将从以下位置复制文件 cp $file1 $file2 cp $file3 $file4 当cp命令之一失败时,该函数将退出并退出1。我们要向该功能添加功能,以便也用行号(例如8或12)打印错误。 这可能吗? 样例脚本 1 #!/bin/bash 2 3 4 function in_case_fail { 5 [[ $1 -ne 0 ]] && echo "fail on $2" && exit 1 6 } 7 8 cp $file1 $file2 9 in_case_fail $? "cp $file1 $file2" 10 11 12 …

3
如果为空,如何将带引号的变量扩展为空?
假设我有一个脚本正在执行: some-command "$var1" "$var2" ... 而且,在var1为空的情况下,我希望将其替换为空字符串而不是空字符串,以便执行的命令为: some-command "$var2" ... 并不是: some-command '' "$var2" ... 有没有比测试变量并有条件地包含它更简单的方法了? if [ -n "$1" ]; then some-command "$var1" "$var2" ... # or some variant using arrays to build the command # args+=("$var1") else some-command "$var2" ... fi 在bash,zsh等中,是否有参数替换无法扩展为空?我可能仍想在其余参数中使用globing,因此禁用该选项并取消引用该变量不是一种选择。

3
如何使用inotifywait监视目录以创建特定扩展名的文件
我已经看到了这个答案。 您应该考虑使用inotifywait作为示例: inotifywait -m /path -e create -e moved_to | while read path action file; do echo "The file '$file' appeared in directory '$path' via '$action'" # do something with the file done 我的问题是,上面的脚本监视目录以创建任何类型的文件,但是如何修改inotifywait命令以仅在创建了某种类型/扩展名的文件(或移动到目录中)时报告?.xml创建任何文件时报告。 我尝试过的是: 我已经运行了inotifywait --help命令,并且已经阅读了命令行选项。它具有--exclude <pattern>和--excludei <pattern>命令可以排除某些类型的文件(通过使用regEx),但是我需要一种方法来仅包括某些类型/扩展名的文件。

8
如何使用grep和插入脚本从HTML文件获取网站URL
我正在尝试使用grep和cut从HTML文件中提取URL。链接如下所示: <a href="http://examplewebsite.com/"> 其他网站都有.net,.gov但我认为我可以在截止点之前提出>。所以我知道我可以使用grep并以某种方式剪切掉http和.com之前的所有内容,但是我已经坚持了一段时间。


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.