Sadece tamir ediyorum
Bu komut "ERROR: extract: path mutlak olmalıdır" hata mesajını gösterir:
./cuda_6.5.14_linux_64.run -extract=~/Downloads/nvidia_installers
Hata yararlı değil - program zaten çok karışıktı.
Hatanın, ~
bununla çalıştığı şekliyle olduğunu zaten biliyorsunuz $HOME
.
Sorun: ~
sadece bir kelimenin başlangıcında değiştirilir.
Örneğin, bu tilde ile çalışır:
echo -extract ~/Downloads
Seçenek sözdizimine ihtiyacınız varsa =
, yerine $ HOME kullanmak ~
en temiz çözümdür;
echo -extract=$HOME/Downloads
Pratik
Bilmen gereken:
~
Bir kelimenin başında değilken genişlemenin genişletildiği özel durumlar vardır : değişken atamasının bir parçası olarak, hemen ardından =
. Tabii ki burada kafa karıştırıcı.
Diğer önemli özel durum ise PATH gibi değişkenlerle kullanım içindir. Değişken atamalarında, ~
ilkinden sonraki :
gibi, sonra da genişletilir =
.
$ dir=~ sh -c 'echo D2: $dir'
D2: /home/user
$ sh -c 'echo D2: $dir' dir=~
D2:
$ echo Dir: $dir
Dir:
$ dir=~; sh -c 'echo D2: $dir'
D2:
$ echo Dir: $dir
Dir: /home/user
$ sh -c 'echo D2: $dir'; d3=~
D2:
$ echo d3: $d3
d3: /home/user
Tilde anlamı
Bir kabukta, ~
tilde, gerçekten bir yol değildir. Sadece bir yolla, $HOME
bazen de değiştirilir.
Kabuk tarafından sağlanan bir steno veya kısaltma gibi bir şeydir.
Genel olarak bir yol gibi kullanılamaz, kabuk sadece çok özel yerlerde bir yola "genişletir".
Ve genişletilse bile, ana dizinden başka bir şey olabilir.
- Yalnızca bir kelimenin başında veya bir veya daha sonraki değişken atamalarında genişletilir.
:
=
- Yalnızca tırnak içinde değilse genişletilir.
- Sadece şekilde genişletilir
$HOME
varsa başka karakterler bir önceki kelimeyle/
Komut satırında sorun
Buna göre, emrindeki problem şu:
-extract=~/Downloads/nvidia_installers
genişletilmedi, çünkü listelenen durumlardan biri değil. Bu kadar.
Solüsyon bir sonraki önce başka hiçbir karakter ile, bir kelimenin ilk tırnaksız karakterine tilde yapmak olabilir /
- Eğer seçenek argümanı önce bir boşluk bir seçeneği kullandığınızda ne olsun sadece geçerli:
-extract ~/Downloads/nvidia_installers
$HOME
Bunun yerine başka bir çözüm kullanmak olacaktır . Bir komut dosyasında, bu genellikle daha iyi bir seçimdir.
-extract=$HOME/Downloads/nvidia_installers
Hata mesajı
Ama hata mesajı nasıl
"ERROR: extract: path must be absolute."
?
tüm bunlara uygun mu?
Tilde genişlemediğini biliyoruz. Bu, programın ~
, ancak /home/auser
yolun olmadığı da dahil olmak üzere argüman metnini aldığı anlamına gelir . Bu yol ~/Downloads/nvidia_installers
- ama şimdi kabuk yok, bu yüzden tilde özel bir anlamı yok. Bu sadece normal bir dizin adıdır. Ve formun diğer tüm yolları foo/bar/baz
gibi, göreceli bir yoldur.
Diğer kullanımlar
Sonra karakterler varsa ~
, olduğu gibi ~alice
diğer bütün kurallara uygulayarak yukarıda - - ve bir kullanıcı adları var alice
ana dizinine genişletilir, alice
bunun yerine, demek home/alice
.
Ayrıca, eğer bob
, ~
kadar genişleyip /home/bob
ve ~bob
aynı şekilde genişleyeceği.
Varyant ~+
geçerli dizine genişletilir,$PWD
Geçen önce öyleydin önceki dizine, başvurmak için cd
kullanabileceğiniz ~-
şekilde genişletilir, $OLDPWD
.
Kullanırsanız pushd
ve popd
yerine cd
, dizin yığınının bu şekilde erişilebileceğini zaten bileceksiniz ~-2
.
ayrıntılar
~
Bir yola genişletilen tüm durumlar kabuk tarafından elde edilir . Diğer programlar ~
için sadece normal bir dosya adı karakteridir.
İçin tam tanımı kabuk içindeki buradan ilgili bölümdür
değiştirilmesi nasıl Not tarafından birçok durumda sadece bir özel durum: Bu kullanıcı ismi boşsa ise" tilde kabuk parametresi HOME değeri ile değiştirilir. " :man bash
~
$HOME
Tilde Expansion
If a word begins with an unquoted tilde character (`~'), all of the charac‐
ters preceding the first unquoted slash (or all characters, if there is no
unquoted slash) are considered a tilde-prefix. If none of the characters
in the tilde-prefix are quoted, the characters in the tilde-prefix follow‐
ing the tilde are treated as a possible login name. If this login name is
the null string, the tilde is replaced with the value of the shell parame‐
ter HOME. If HOME is unset, the home directory of the user executing the
shell is substituted instead. Otherwise, the tilde-prefix is replaced with
the home directory associated with the specified login name.
If the tilde-prefix is a `~+', the value of the shell variable PWD replaces
the tilde-prefix. If the tilde-prefix is a `~-', the value of the shell
variable OLDPWD, if it is set, is substituted. If the characters following
the tilde in the tilde-prefix consist of a number N, optionally prefixed by
a `+' or a `-', the tilde-prefix is replaced with the corresponding element
from the directory stack, as it would be displayed by the dirs builtin
invoked with the tilde-prefix as an argument. If the characters following
the tilde in the tilde-prefix consist of a number without a leading `+' or
`-', `+' is assumed.
If the login name is invalid, or the tilde expansion fails, the word is
unchanged.
Each variable assignment is checked for unquoted tilde-prefixes immediately
following a : or the first =. In these cases, tilde expansion is also per‐
formed. Consequently, one may use filenames with tildes in assignments to
PATH, MAILPATH, and CDPATH, and the shell assigns the expanded value.