我正在学习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
答案 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