Есть ли способ для сценария оболочки определить, вызывается ли он из терминала на виртуальной машине, на которой работает Ubuntu, или из терминала W10, использующего вызов bash
(установлено приложение Ubuntu в W10)?
Я работаю в обеих средах и у меня есть много полезных сценариев оболочки для повышения эффективности моей работы на виртуальной машине, например, открытие заданных c URL-адресов или выполнение наборов команд. Я бы хотел, чтобы они работали и на стороне Windows. Тем не менее, мои скрипты устанавливают каталоги, которые должны отличаться на моей стороне Windows.
Я установил приложение ubuntu из Windows Store, которое позволяет мне открывать окно bash и источник файлы. Я мог бы просто проверить, возвращает ли ~
пустую строку, но есть ли более надежный способ сделать это?
Я работаю Windows 10, версия 17763 и использую Ubuntu 18.04 LTS .
Например,
C: \. sourceThis. sh
#!/bin/bash
myDir="/home/user/stuff"
cdMySub() {
cd "$myDir/$1"
}
Я могу запустить это в Windows терминал от
C:\> bash
USER@XXXX:/mnt/c/$ source ./.sourceThis.sh
USER@XXXX:/mnt/c/$ cdMySub someSubDirectoryName
-bash: cd: /home/user/stuff/someSubDirectoryname: No such file or directory
USER@XXXX:/mnt/c/$ #Fail!
, но он не работает, поскольку файловая система Ubuntu отличается от Windows.
Я хотел бы изменить .sourceThis. sh что-то вроде
...
if [[ "Something that detects virtual machine" ]] ; then
myDir="/home/user/stuff"
elif [[ "Something that detects 'bash' from Windows prompt" ]] ; then
myDir="/mnt/c/user/stuff"
fi
, так что вместо этого получается
C:\> bash
USER@XXXX:/mnt/c/$ source ./.sourceThis.sh
USER@XXXX:/mnt/c/$ cdMySub someSubDirectoryName
USER@XXXX:/mnt/c/stuff/someSubDirectoryName$ #Yeay, success!
РЕДАКТИРОВАТЬ:
I не может просто проверить действительность каталога по умолчанию, так как сценарии создают каталог, если он не существует. Вместо этого я хочу, чтобы он указывал на другой путь по умолчанию.
Я использую разные имена пользователей, чтобы я мог проверить, что выводом ~
является "Windows или VM user".
USER@XXXX:/mnt/c$ echo ~
/home/USER
Таким образом,
tmpHome=~
if [[ "${tmpHome##*/}" == "USER" ]] ; then
# Windows user
elif [[ "${tmpHome##*/}" == "VM" ]] ; then
# VM user
fi
работает для моего указанного c пользователя. Однако я подозреваю, что хочу использовать это для разных пользователей (например, поделиться им с коллегой). Это требует более надежного пути.
Я не слишком опытен с Linux. Я не знаю, как ориентироваться в мире пользователей, процессов и задач, на которые, я подозреваю, может дать ответ.