我在bash终端中寻找一个需要导出一些环境变量的文件.
例:
source linux_x86.env
Run Code Online (Sandbox Code Playgroud)
env文件看起来有点像这样:
export ARCH=/home/user/project/linux_x86
Run Code Online (Sandbox Code Playgroud)
我有一堆不同的体系结构要编译,我希望能够做到这样的事情:
export ARCH=/home/user/project/`basename $0 .env`
Run Code Online (Sandbox Code Playgroud)
哪里basename $0 .env会给我env文件的基本名称
bash linux_x86.env
linux_x86
Run Code Online (Sandbox Code Playgroud)
上面的工作是一个bash脚本,但是当你获取文件时它似乎不起作用.
有没有办法从源头获得相同的行为?
我需要从bash执行一个groovy脚本文件,我需要脚本有一个它所在目录的工作目录.
也就是说,在我的bash脚本中,我这样做:
/opt/script/myscript.groovy &
Run Code Online (Sandbox Code Playgroud)
但这似乎将工作目录设置为/etc/init.d我正在调用的目录.如何将该脚本的工作目录更改为/opt/script?
我创建了一个Java应用程序,需要准备它在任何操作系统上运行.对于Windows,我创建了一个这样的批处理文件launch-win32.bat:
@echo off
javaw -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*;bin/myjar-latest.jar my.package.MyMainClass
Run Code Online (Sandbox Code Playgroud)
对于linux我创建了一个这样的shell脚本launch-linux.sh:
#!/bin/sh
java -Xss1024k -Xmn256m -Xms512m -Xmx1024m -cp lib/*:bin/myjar-latest.jar my.package.MyMainClass
Run Code Online (Sandbox Code Playgroud)
现在我认为MacOS与linux非常相似,因为它们都是基于unix的,我问一个带有mac的朋友尝试运行shellscript来启动我的应用程序.但它失败了以下NoClassDefFoundError:
Exception in thread "main" java.lang.NoClassDefFoundError: my/package/MyMainClass
Caused by: java.lang.ClassNotFoundException: my.package.MyMainClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Run Code Online (Sandbox Code Playgroud)
看起来java命令的语法不正确,因为类路径未正确添加到java程序中.我现在的主要问题如下:
所以现在我的问题是:
;而不是冒号:分隔符.).sh或者.scpt或者 .command在linux中,只要你chmod +x的脚本文件,文件结尾无关紧要?谢谢你的任何提示.
所以我有一个bash脚本调用另一个bash脚本.第二个脚本位于不同的文件夹中.
script1.sh:
"some_other_folder/script2.sh"
# do something
script2.sh:
src=$(pwd) # THIS returns current directory of script1.sh...
# do something
Run Code Online (Sandbox Code Playgroud)
在第二个脚本中它有行src=$(pwd),因为我从另一个目录中的另一个脚本调用该脚本,所以$(pwd)返回第一个脚本的当前目录.
有没有办法在该脚本中使用简单命令获取第二个脚本的当前目录而不必传递参数?
谢谢.
我使用autoenv进行自动virtualenv激活.Python项目的顶级文件夹.env包含以下内容的文件
source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)
无论何时cd对项目的任何子文件夹执行此命令.然后抛出
-bash: venv/bin/activate: No such file or directory
Run Code Online (Sandbox Code Playgroud)
它失败了,因为它试图activate相对于子文件夹执行.为什么它甚至在子文件夹中执行?如何解决这个问题?
是否有一个等价的__FILE__,给我当前正在执行的文件的路径名?POSIX解决方案首选,bash可以接受,谢谢.
我正在使用卸载程序脚本删除安装脚本的父文件夹.
/usr/local/Myapplication/Uninstaller/uninstall.sh
Run Code Online (Sandbox Code Playgroud)
所以uninstall.sh必须这样做:
rm- rf /usr/local/Myapplication
Run Code Online (Sandbox Code Playgroud)
我可以检索卸载所在的文件夹
SYMLINKS=$(readlink -f "$0")
UNINSTALL_PATH=$(dirname "$SYMLINKS")
Run Code Online (Sandbox Code Playgroud)
但我仍然不确定获得父路径的漂亮方式.我想过使用sed去除这条路径的"Uninstaller"部分,但是有一种优雅的方法来获取Myapplication文件夹的路径来删除它吗?
谢谢
我正在尝试执行一个简单Bash Script的PHP脚本.我从HTML5前端页面收集数据,传递ajax给PHP脚本,获取变量,然后将这些变量传递给.sh脚本,但我有以下消息:
./test_bash.sh: line 13: ./test.txt: Permission denied
Run Code Online (Sandbox Code Playgroud)
我试图更改权限chmod 777 test_bash.sh,试图修改sudoers.d文件,试过这个:shell_exec("echo password_for_the_user | sudo -S command_to_execute");...但是Bash script无法写入test.txt文件.
这是我的基本代码,首先是PHP code:
<?php
$var1 = json_decode($_POST['var1']); //from front-end html5
$var2 = json_decode($_POST['var2']);
$var3 = json_decode($_POST['var3']);
$response = shell_exec("./test_bash.sh $var1 $var2 $var3 2>&1");
echo "$response";
?>
Run Code Online (Sandbox Code Playgroud)
其次,Bash代码:
#!/bin/bash
var1=$1;
var2=$2;
var3=$3;
echo "$var1";
echo "$var2";
echo "$var3";
echo $var1 $var2 …Run Code Online (Sandbox Code Playgroud) 我这里有一个shell脚本:
/node_modules/.bin/exec.sh
Run Code Online (Sandbox Code Playgroud)
在exec.sh脚本中,我想获取包含脚本的目录的父目录的路径(不是pwd/cwd!).我可以像这样获取包含目录:
`dirname $0`
Run Code Online (Sandbox Code Playgroud)
这将产生:
/node_modules/.bin
Run Code Online (Sandbox Code Playgroud)
但我希望在一个目录更高,我只想得到
/node_modules
Run Code Online (Sandbox Code Playgroud)
我无法找到答案,我的猜测是:
`dirname $1`
Run Code Online (Sandbox Code Playgroud)
但只是一个猜测,不确定这是否正确.任何人都可以解释如何做到这一点以及它是如何工作的?
我有以下设置
??? modules
??? main.sh
??? major.sh
??? sub-modules
? ??? minor.sh
Run Code Online (Sandbox Code Playgroud)
/modules$ PATH的路径.all.sh:
source major.sh
Run Code Online (Sandbox Code Playgroud)
major.sh:
source sub-module/minor.sh
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这个时,我得到:
-bash: /sub-module/minor.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)