slurmスクリプトが実行されているディレクトリに変更

slurmスクリプトが実行されているディレクトリに変更

cdSLURM Workload Managerを使用して、ディレクトリ()をジョブが実行されているフォルダに直接変更しようとしています。

SLURMスクリプトが実行されている場所を確認できます。

squeue --format %Z% -j 123

これで抽出も可能です。ディレクトリ名は次のとおりです。

echo   $(squeue --format "%Z" -j <jobid>) | awk '{print $2}'

(2021年11月26日に修正されました。) 次のように端末にフォルダ名が表示されます。

/HDD_Drive/myfiles/myfolder

しかしcd、これを連携して使用すると、まだ現在のフォルダにあります。興味深いことに、同じ方法でプロセスPIDをチェックすると、次のようになります。

cd "$(pwdx <PID> | awk '{print $2}')"

私のディレクトリは変更されますが、SLURMジョブIDを確認すると奇妙な動作が発生します。簡単に言うと:

echo $(squeue --format "%Z" -j jobid ) | awk '{print $2}'

現在のディレクトリを次のように表示します。

/HDD_Drive/myfiles/myfolder 

しかし、

cd $(squeue --format "%Z" -j 212 ) | awk '{print $2}'

プログラム

-bash: cd: too many arguments

そして

cd $(squeue --format "%Z" -j 212 | awk '{print $2}')

私はまだ現在のディレクトリにいます。ありがとうございます!

答え1

ディレクトリを抽出できたので、ほぼ成功しました。これをパラメータとして使用できますcd

cd $(squeue --format "%Z" | awk '{print $2}')

すべきこと。コマンド置換は、$( ... )括弧で囲まれたコマンドの出力に置き換えられます。

これは、試行に使用する構文が不必要に複雑であることを意味します。以降は$( cmd )次に置き換えられます。出力括弧内には、コマンドのecho $( cmd )機能と簡単な呼び出しが記載されていますcmd

関連情報