如何在没有chmod的情况下解压缩后使shell脚本可执行

时间:2017-07-05 06:17:45

标签: linux shell

我正在学习linux,我必须通过这个命令使所有shell脚本可执行:

find ./ -name "*.sh" -exec chmod u+x {} \;

但是当我下载Logstash.tar.gz并将其解压缩到/ opt时,所有shell脚本都是可执行的,不需要chmod。并且/ opt不在$ PATH中。

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin

如何构建像logstash这样的应用程序?

===更新了验证测试步骤===

mkdir testtar && cd testtar   
## create a executable script
echo test_with_x >> test_with_x.sh   
chmod u+x test_with_x.sh   
## create a not executable script
echo test_without_x >> test_without_x.sh   
cd ..    
## compress with gzip
tar -zcvf testtar.tar.gz ./testtar

mkdir testextract     
mv testtar.tar.gz ./testextract    
cd ./testextract    
tar -zxvf testtar.tar.gz   
## decompressed and see a executable and not executable script 

2 个答案:

答案 0 :(得分:2)

可能已在所有脚本上创建了具有可执行权限的Logstash tar包。它应该是在不使用chmod u+x命令的情况下提取后工作正常的原因。如果您还使用可执行脚本创建tar包,则还应在解压缩后使用chmod u+x获取可执行脚本。

如果您希望在不使用chmod u+x的情况下执行shell脚本,请将shell脚本作为shell解释器的参数提供。

例如,

bash MyScript.sh
sh MyScript.sh
ksh MyScript.sh

答案 1 :(得分:0)

你有两个解决方案:

  • /opt添加到PATH

    export PATH=${PATH}:/opt
    
  • 以完整路径致电logstash

    /opt/<anywhere.it.may.be>/logstash