bashの最後のディレクトリでcdを試してください。
私がこれをしようとすると:
cd $(ls -l | tail -l)
結果は次のとおりです。
Illegal variable name.
何をすべきかわからない
答え1
$(...)
Korn/POSIX シェル構文です。 (t)cshのコマンドの置き換えはを介して行われます`...`
。
では、tcsh
次のことができます。
set dirs = (./*/); cd $dirs[$#dirs]:q
cd
現在のディレクトリの非表示ディレクトリの語彙リストに、最後のディレクトリ(またはディレクトリへのシンボリックリンク)を入力します。
これは次のより良いです:
cd "`ls | tail -n 1`"
ファイル名に改行文字が含まれている場合、次に始まる-
場合、+
または数字が続く場合、または現在のディレクトリの最後のファイルがディレクトリではない場合、この方法は機能しません。
cd $(ls | tail -1)
ファイル名にスペース、タブ、またはワイルドカードが含まれていると、Ksh構文も失敗するため、Ksh構文はさらに悪化します。
順序は語彙の順序です2
。後ろに 10
。 GNUを介して実装された数値ソートでは、オプション()をls
使用できます。-v
cd "`ls -v | tail -n 1`"
zsh
シェルを使用すると、次のことができます。
cd ./*(/[-1])
または、ディレクトリへのシンボリックリンクも考慮してください。
cd ./*(-/[-1])
ファイルを数字で並べ替えるには:
cd ./*(n-/[-1])
答え2
エラーの原因は、取得する文字列がディレクトリ名ではなく、宛先名ではなくディレクトリdrwxrwxr-x. 3 alessiosavi alessiosavi 4096 Sep 10 09:51 workplace-tmp
に関する情報を含む文字列であることです。workplace-tmp
これを行うには、次の手順を実行できます。
1. 最後のディレクトリを変数に保存します。
2. 変数がディレクトリであることを確認します。
3. ディレクトリに cd します。
file=$(ls -l | tail -n1 | awk '{print $9}') ; if [ -d "$file" ];then cd $file; else echo "$file not a directory" ; fi
「bashです。1行だけです。」