Questions tagged «shell-script»

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


4
是否可以使用Shell脚本打印变量内容的内容?(间接引用)
假设我已经声明了以下变量: $ var='$test' $ test="my string" 如果打印其内容,则会看到以下内容: $ echo $var $test $ echo $test my string 我想找到一种方法来打印的内容$var(即的内容$test)。因此,我尝试执行以下操作: $ echo $(echo $var) $test 但是这里的结果是$test,不是"my string"。。。是否可以使用bash打印变量内容的内容?

3
为什么在采购文件之前先检查文件是否存在?
尝试获取文件源时,是否会出现错误消息,指出该文件不存在,所以您知道要解决的问题? 例如,nvm建议将此添加到您的配置文件/ rc: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm 使用上面的命令,如果nvm.sh不存在,您将收到“静默错误”。但是,如果尝试. "$NVM_DIR/nvm.sh",输出将是FILE_PATH: No such file or directory。

3
为什么“ ps ax”找不到没有“#!”的正在运行的bash脚本 标头?
当我运行此脚本时,该脚本将一直运行直到被杀死... # foo.sh while true; do sleep 1; done ...我无法使用来找到它ps ax: >./foo.sh // In a separate shell: >ps ax | grep foo.sh 21110 pts/3 S+ 0:00 grep --color=auto foo.sh ...但是如果我只是将通用的“ #!”标头添加到脚本中... #! /usr/bin/bash # foo.sh while true; do sleep 1; done ...然后该脚本可通过同一ps命令找到... >./foo.sh // In a separate shell: >ps ax …



6
执行前验证命令二进制文件
有什么方法可以检查您从bash脚本实际执行的操作吗? 说你的bash脚本调用几个命令(例如:tar,mail,scp,mysqldump),你愿意以确保tar是真正的,真实的tar,这是由确定root用户是该文件的父目录的所有者,也是唯一一个具有写权限而不是/tmp/surprise/tar拥有者www-data或apache2拥有者。 当然,我知道PATH环境,我很想知道是否可以从正在运行的bash脚本中另外检查一下,如果可以的话,如何检查? 示例:(伪代码) tarfile=$(which tar) isroot=$(ls -l "$tarfile") | grep "root root" #and so on...

2
调用此Bash脚本时,为什么文件参数必须使用引号?
我对Bash脚本非常陌生。我有一个“ testscript”,它用作更高级/有用的脚本的基础: #!/bin/bash files=$1 for a in $files do echo "$a" done 当我不带引号的情况下调用它时,它只会在目录中拾取一个文件: testscript *.txt 但是,当我用引号将其调用时,它可以正常工作并挑选出所有文本文件: testscript '*.txt' 这里发生了什么?

2
Shell脚本是否有办法知道哪个程序执行了它?
在* nix世界中,shell脚本是否可以获取有关哪个程序已执行该程序的信息? 例: /path/to/script1 /path/to/script_xyz 在这种假想的情况下,script_xyz将具有路径信息(/path/to/script1) 要么 过程PID 执行它的实体。 注意:我对不同的解决方案和方法感到好奇,我不希望这真的可行

3
如何删除两个回显命令的输出之间的\ n?
我有一个文本文件,每行包含一个文件名: 111_c4l5r120.png 123_c4l4r60.png 135_c4l4r180.png 147_c4l3r60.png 15_c4l1r120.png ... 我想将其转换为以下形状: 111_c4l5r120.png 111 123_c4l4r60.png 123 135_c4l4r180.png 135 147_c4l3r60.png 147 15_c4l1r120.png 15 ... 使用此代码: #!/bin/bash while IFS='' read -r line || [[ -n "$line" ]]; do echo "$line" >> output.txt echo "$line" | cut -d'_' -f 1 >> output.txt done < "$1" 但是,结果是: 111_c4l5r120.png …

2
如何从$ @删除位置参数
基本上,我想-inf从参数列表中“拔出”第一次出现。(其余参数将传递给其他命令。) 我拥有的脚本具有以下结构: #!/bin/sh <CODE> for POSITIONAL_PARAM in "$@" do <CODE> if [ "$POSITIONAL_PARAM" = '-inf' ] then <PLUCK $POSITIONAL_PARAM FROM $@> break fi <CODE> done <CODE> some-other-command "$@" # end of script 有什么好方法吗? 顺便说一句,即使我主要对适用于的答案感兴趣,但我/bin/sh也对仅适用于的答案感兴趣/bin/bash。

2
为什么“ bash -x”会破坏此脚本?
我有一个脚本,可以测量某些命令的执行时间。 它需要“ real” time命令,即,例如in中的二进制文件/usr/bin/time(因为内置的bash没有该-f标志)。 下面是一个可以调试的简化脚本: #!/bin/bash TIMESEC=$(echo blah | ( /usr/bin/time -f %e grep blah >/dev/null ) 2>&1 | awk -F. '{print $1}') echo ABC--$TIMESEC--DEF if [ "$TIMESEC" -eq 0 ] ; then echo "we are here!" fi 另存为“ test.sh”并执行: $ bash test.sh ABC--0--DEF we are here! 这样就行了。 现在,让我们尝试通过在bash命令行中添加“ -x”来调试它: …

5
如何基于for循环的结果使该脚本错误退出?
我有一个bash脚本,使用set -o errexit该脚本可以在出错时退出整个脚本。 该脚本运行的curl命令有时无法检索想要的文件-但是,发生这种情况时,脚本不会错误退出。 我添加了一个for循环 暂停几秒钟,然后重试curl命令 false在for循环的底部使用来定义默认的非零退出状态-如果curl命令成功-循环中断并且最后一个命令的退出状态应为零。 #! /bin/bash set -o errexit # ... for (( i=1; i<5; i++ )) do echo "attempt number: "$i curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim if [ -f ~/.vim/autoload/pathogen.vim ] then echo "file has been retrieved by curl, so breaking now..." break; fi echo "curl'ed file …

1
复制文件并附加时间戳
我的脚本有两个问题,该脚本复制文件并为该名称添加时间戳。 cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T") 上面添加了Test2作为文件名,但我希望它保留原始源文件的文件名(在本示例中为)Test。 cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r") 另一个问题是当我将%r时间戳记代码添加为时间戳代码时,出现错误,指出目标“ PM”不是目录。我正在尝试将时间戳记为12小时制。


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.