Можно сделать это просто объединение названия сценария ([112]
) с realpath
и/или dirname
. Это работает на Bash и Shell.
#!/usr/bin/env bash
RELATIVE_PATH="[110]"
RELATIVE_DIR_PATH="$(dirname "[110]")"
FULL_DIR_PATH="$(realpath "[110]" | xargs dirname)"
FULL_PATH="$(realpath "[110]")"
echo "RELATIVE_PATH->${RELATIVE_PATH}<-"
echo "RELATIVE_DIR_PATH->${RELATIVE_DIR_PATH}<-"
echo "FULL_DIR_PATH->${FULL_DIR_PATH}<-"
echo "FULL_PATH->${FULL_PATH}<-"
вывод будет чем-то вроде этого:
# RELATIVE_PATH->./bin/startup.sh<-
# RELATIVE_DIR_PATH->./bin<-
# FULL_DIR_PATH->/opt/my_app/bin<-
# FULL_PATH->/opt/my_app/bin/startup.sh<-
0$ название самого сценария
https://www.tldp.org/LDP/abs/html/othertypesv.html
пример: https://gist.github.com/LozanoMatheus/da96b4e44b89b13ad4af10ac4602ad99
Если вы начинаете со строки, вы также можете сделать следующее:
new ByteArrayInputStream(inputString.getBytes("UTF-8"))
Вы пытаетесь записать содержимое Reader
в OutputStream
? В этом случае вам будет легче обернуть OutputStream
в OutputStreamWriter
и записать char
s из Reader
в Writer
, вместо того, чтобы пытаться преобразовать считыватель в InputStream
:
final Writer writer = new BufferedWriter(new OutputStreamWriter( urlConnection.getOutputStream(), "UTF-8" ) );
int charsRead;
char[] cbuf = new char[1024];
while ((charsRead = data.read(cbuf)) != -1) {
writer.write(cbuf, 0, charsRead);
}
writer.flush();
// don't forget to close the writer in a finally {} block
Также обратите внимание, что если вы начинаете со String, вы можете пропустить создание StringReader и создать InputStream за один шаг с помощью org.apache. commons.io.IOUtils из Commons IO вот так:
InputStream myInputStream = IOUtils.toInputStream(reportContents, "UTF-8");
Конечно, вам все еще нужно подумать о кодировке текста, но, по крайней мере, преобразование происходит за один шаг.