Mam skrypt, który zaczyna się w ten sposób
#!/bin/bash
VALKYRIE=~/myProjects/valkyrie
source $VALKYRIE/cluster.conf
ale kiedy go uruchomię, wraca
line 2: ~/myProjects/valkyrie/cluster.conf: No such file or directory
ale plik istnieje i po uruchomieniu source ~/myProjects/valkyrie/cluster.conf
działa poprawnie. Dowolny pomysł? Ustawiam VALKYRIE
zmienną gdzie indziej, więc twardy kod na ścieżce nie jest opcją.
source "${VALKYRIE}/cluster.conf"
.~
nieprawidłowym rozszerzaniem. Kiedy uruchamiam skrypt z celowo fałszywą ścieżką, błąd nie mówi~
, ale rozszerza ścieżkę. Czy możesz spróbować zastąpić~
w skrypcie ścieżkę bezwzględną? Spróbuj także uruchomić następujące polecenie w skrypcieecho ~
.$HOME
zamiast~
.~/.pam_environment
nie jest skryptem powłoki, więc nie wykonuje typowych rzeczy, których można oczekiwać od powłoki, takich jak interpretacja tyldy i interpretacja parametrów, więc ani~
nie$HOME
zostanie zastąpiona. Jeśli~/.profile
zamiast tego przeniesiesz tę linię i dodasz jąexport
z przodu, powinna ona działać.Odpowiedzi:
~
nie wydaje się prawidłowo rozwijać. Kiedy uruchomić skrypt z celowo fałszywe ścieżki, błąd nie mówi~
, lecz rozszerza ścieżkę (czyli/home/sparhawk/fakepath
nie~/fakepath
. Można spróbować użyć$HOME
zamiast~
, albo stosując pełną ścieżkę w skrypcie zamiast.(Nie jestem pewien, dlaczego
~
nie działa w twoim systemie, ponieważ twój skrypt działa dla mnie dobrze).źródło
$HOME
jest lepszy niż~
w zmiennej~
?x="~/.bashrc"; ls $x
- w kolejności rozszerzeń polecenia „ls” bash szuka tyldy i jej nie znajduje; w końcu bash widzi zmienną i rozwija ją. bash nie wraca i nie szuka tyldy, w tym momencie jest to zwykły znak. i nie ma żadnych plików w bieżącym katalogu, które zaczynają się od tyldy.x=~/".bashrc"; ls $x
działa. Dzięki za informację.