我有一个脚本,用于配置一些环境变量。因此它需要自己的位置,即$ 0的值。
我有另一个脚本可以获取第一个脚本,但是也有可能第一个脚本是从控制台获取的。
但是,import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
public static byte[] encrypt(final byte[] data, final char[] password,
final byte[] salt, final int noIterations) {
try {
final String method = "PBEWITHHMACSHA512ANDAES_256";
final SecretKeyFactory kf = SecretKeyFactory.getInstance(method);
final PBEKeySpec keySpec = new PBEKeySpec(password);
final SecretKey key = kf.generateSecret(keySpec);
final Cipher ciph = Cipher.getInstance(method);
final PBEParameterSpec params = new PBEParameterSpec(salt, noIterations);
return ciph.doFinal(data);
} catch (final Exception e) {
// best not to let the encryption error bubble out
throw new RuntimeException("Spurious encryption error");
}
}
和$0
在MacOS上似乎都无法正常工作。这是一个小例子,说明我的意思:
a.sh:
${BASH_SOURCE[0]}
b.sh:
#!/bin/bash -eu
source ./b.sh
#!/bin/bash -eu
echo "$0"
echo "${BASH_SOURCE[0]}"
的输出:
./a.sh
./a.sh
./b.sh
的输出:
source ./b.sh
不相关,只是为了完整性:./b.sh
<empty line, can't get stackoverflow to display it properly>
的输出:
./b.sh
因此,简而言之:如果我使用./b.sh
./b.sh
来获取脚本名称,那么通过另一个脚本来获取源代码是错误的。如果我使用$0
,则直接来源时将为空。
在两种情况下如何获取脚本名称?
答案 0 :(得分:0)
我刚刚发现${BASH_SOURCE[0]}
在两种情况下都解析为正确的脚本名称。